1
0
mirror of https://github.com/firstBitMarksistskaya/jenkins-lib.git synced 2024-11-21 18:16:34 +02:00

new json schema generator

defaults for enums
This commit is contained in:
Dima 2024-08-30 19:34:56 +03:00
parent 0f33f96c27
commit 571b37b054
10 changed files with 428 additions and 413 deletions

View File

@ -43,6 +43,10 @@ dependencies {
// jackson
implementation("com.fasterxml.jackson.module", "jackson-module-jsonSchema", jacksonVersion)
// jsonschema-generator
implementation("com.github.victools", "jsonschema-generator", "4.36.0")
implementation("com.github.victools", "jsonschema-module-jackson", "4.36.0")
// unit-tests
testImplementation("org.junit.jupiter", "junit-jupiter-api", junitVersion)
testRuntimeOnly("org.junit.jupiter", "junit-jupiter-engine", junitVersion)

View File

@ -1,56 +1,312 @@
{
"$schema" : "http://json-schema.org/draft-07/schema#",
"definitions" : {
"EmailExtConfiguration" : {
"type" : "object",
"properties" : {
"attachLog" : {
"type" : "boolean"
},
"directRecipients" : {
"type" : "array",
"items" : {
"type" : "string"
}
},
"recipientProviders" : {
"type" : "array",
"items" : {
"type" : "string",
"enum" : [ "developers", "requestor", "brokenBuildSuspects", "brokenTestsSuspects" ]
}
}
}
}
},
"type" : "object",
"id" : "urn:jsonschema:ru:pulsar:jenkins:library:configuration:JobConfiguration",
"properties" : {
"v8version" : {
"type" : "string",
"description" : "Версия платформы 1С:Предприятие в формате 8.3.хх.хххх."
},
"edtVersion" : {
"type" : "string",
"description" : "Версия модуля 1C:Enterprise Development Tools формате xxxx.x.x:x86_64"
},
"srcDir" : {
"type" : "string",
"description" : "Путь к корневому каталогу с исходниками конфигурации, в случае хранения исходников в формате EDT, необходимо указать путь к проекту"
},
"sourceFormat" : {
"type" : "string",
"description" : "Формат исходников конфигурации",
"enum" : [ "edt", "designer" ]
"bdd" : {
"type" : "object",
"properties" : {
"vrunnerSteps" : {
"description" : "Шаги, запускаемые через vrunner.\n В каждой строке передается отдельная команда \n vrunner и ее аргументы (например, \"vanessa --settings ./tools/vrunner.json\").\n По умолчанию содержит одну команду \"vanessa --settings ./tools/vrunner.json\".\n ",
"type" : "array",
"items" : {
"type" : "string"
}
}
},
"description" : "Настройки шага запуска BDD сценариев"
},
"defaultBranch" : {
"type" : "string",
"description" : "Имя ветки по умолчанию. Значение по умолчанию - main."
},
"edtVersion" : {
"type" : "string",
"description" : "Версия модуля 1C:Enterprise Development Tools формате xxxx.x.x:x86_64"
},
"initInfobase" : {
"type" : "object",
"properties" : {
"additionalInitializationSteps" : {
"description" : "Дополнительные шаги, запускаемые через vrunner.\n В каждой строке передается отдельная команда \n vrunner и ее аргументы (например, \"vanessa --settings ./tools/vrunner.first.json\")\n ",
"type" : "array",
"items" : {
"type" : "string"
}
},
"extensions" : {
"description" : "Массив расширений для загрузки в конфигурацию.",
"type" : "array",
"items" : {
"type" : "object",
"properties" : {
"initMethod" : {
"type" : "string",
"enum" : [ "fromSource", "fromFile" ],
"description" : "\n Способ инициализации расширения.\n Поддерживается два варианта:\n * fromSource - инициализация расширения из исходников;\n * fromFile - скачивание скомпилированного cfe по ссылке.\n "
},
"name" : {
"type" : "string",
"description" : "Имя расширения, используемое при его загрузке в конфигурацию."
},
"path" : {
"type" : "string",
"description" : "\n Путь к расширению.\n * В случае если выбран initMethod <fromSource> - указывается путь к исходникам расширения.\n * В случае если выбран initMethod <fromFile> - указывается путь к cfe-файлу\n "
},
"stages" : {
"description" : "\n Шаги, на которых необходимо использовать расширение\n * Если не заполнено, то расширение будет подключено при инициализации базы и останется в базе на всех последующих шагах.\n * Если заполнено, то расширение будет подключено только на соответствующих шагах.\n ",
"type" : "array",
"items" : {
"type" : "string"
}
}
}
}
},
"initMethod" : {
"type" : "string",
"enum" : [ "fromStorage", "fromSource", "defaultBranchFromStorage" ],
"description" : "\n Способ инициализации информационной базы.\n Поддерживается три варианта:\n * fromStorage - инициализация информационной базы из хранилища конфигурации;\n * fromSource - инициализация информационной базы из исходников конфигурации;\n * defaultBranchFromStorage - инициализация основной ветки из хранилища конфигурации, остальных - из исходников конфигурации.\n По умолчанию содержит значение \"fromStorage\".",
"default" : "fromStorage"
},
"runMigration" : {
"type" : "boolean",
"description" : "Запустить миграцию ИБ"
},
"templateDBPath" : {
"type" : "string",
"description" : "\n Путь к файлу эталонной базы данных.\n * По умолчанию не заполнен;\n * Указывается путь к файлу *.dt или *.1CD.\n "
},
"vrunnerSettings" : {
"type" : "string",
"description" : "Путь к конфигурационному файлу vanessa-runner.\n По умолчанию содержит значение \"./tools/vrunner.json\"\n Используется, если на этапе подготовки база загружается из эталона. \n "
}
},
"description" : "Настройки шага инициализации ИБ"
},
"logosConfig" : {
"type" : "string",
"description" : "Конфигурация библиотеки logos. Применяется перед запуском каждой стадии сборки"
},
"notifications" : {
"type" : "object",
"properties" : {
"email" : {
"type" : "object",
"properties" : {
"alwaysOptions" : {
"$ref" : "#/definitions/EmailExtConfiguration"
},
"failureOptions" : {
"$ref" : "#/definitions/EmailExtConfiguration"
},
"onAlways" : {
"type" : "boolean",
"description" : "Отправлять всегда"
},
"onFailure" : {
"type" : "boolean",
"description" : "Отправлять при падении сборки"
},
"onSuccess" : {
"type" : "boolean",
"description" : "Отправлять при успешной сборке"
},
"onUnstable" : {
"type" : "boolean",
"description" : "Отправлять при нестабильной сборке"
},
"successOptions" : {
"$ref" : "#/definitions/EmailExtConfiguration"
},
"unstableOptions" : {
"$ref" : "#/definitions/EmailExtConfiguration"
}
},
"description" : "Настройки рассылки результатов сборки через email"
},
"telegram" : {
"type" : "object",
"properties" : {
"onAlways" : {
"type" : "boolean",
"description" : "Отправлять всегда"
},
"onFailure" : {
"type" : "boolean",
"description" : "Отправлять при падении сборки"
},
"onSuccess" : {
"type" : "boolean",
"description" : "Отправлять при успешной сборке"
},
"onUnstable" : {
"type" : "boolean",
"description" : "Отправлять при нестабильной сборке"
}
},
"description" : "Настройки рассылки результатов сборки через telegram"
}
},
"description" : "Настройки рассылки результатов сборки"
},
"resultsTransform" : {
"type" : "object",
"properties" : {
"genericIssueFormat" : {
"type" : "string",
"enum" : [ "Generic_Issue", "Generic_Issue_10_3" ],
"description" : "Формат отчета generic issue. Только для stebi.\n Для SonarQube версии ниже 10.3 необходимо использовать Generic_Issue.\n По умолчанию Generic_Issue_10_3\n ",
"default" : "Generic_Issue_10_3"
},
"removeSupport" : {
"type" : "boolean",
"description" : "Фильтровать замечания по уровню поддержки модуля. Только для stebi. По умолчанию включено."
},
"supportLevel" : {
"type" : "integer",
"description" : "Настройка фильтрации замечаний по уровню поддержки. Только для stebi.\n 0 - удалить файлы на замке;\n 1 - удалить файлы на замке и на поддержке;\n 2 - удалить файлы на замке, на поддержке и снятые с поддержки.\n "
},
"transformer" : {
"type" : "string",
"enum" : [ "stebi", "edt-ripper" ],
"description" : "Способ преобразования замечаний.\n Поддерживается stebi и edt-ripper.\n По умолчанию содержит значение \"stebi\".\n ",
"default" : "stebi"
}
},
"description" : "Настройки трансформации результатов анализа"
},
"secrets" : {
"type" : "object",
"id" : "urn:jsonschema:ru:pulsar:jenkins:library:configuration:Secrets",
"description" : "Идентификаторы сохраненных секретов",
"properties" : {
"storagePath" : {
"type" : "string",
"description" : "Путь к хранилищу конфигурации"
},
"storage" : {
"type" : "string",
"description" : "Данные авторизации в хранилище конфигурации"
},
"telegramChatId" : {
"storagePath" : {
"type" : "string",
"description" : "Идентификатор telegram-чата для отправки уведомлений"
"description" : "Путь к хранилищу конфигурации"
},
"telegramBotToken" : {
"type" : "string",
"description" : "Токен авторизации telegram-бота для отправки уведомлений"
},
"telegramChatId" : {
"type" : "string",
"description" : "Идентификатор telegram-чата для отправки уведомлений"
}
}
},
"description" : "Идентификаторы сохраненных секретов"
},
"smoke" : {
"type" : "object",
"properties" : {
"publishToAllureReport" : {
"type" : "boolean",
"description" : "Выполнять публикацию результатов в отчет Allure.\n По умолчанию выключено.\n "
},
"publishToJUnitReport" : {
"type" : "boolean",
"description" : "Выполнять публикацию результатов в отчет JUnit.\n По умолчанию включено.\n "
},
"vrunnerSettings" : {
"type" : "string",
"description" : "Путь к конфигурационному файлу vanessa-runner.\n По умолчанию содержит значение \"./tools/vrunner.json\".\n "
},
"xddConfigPath" : {
"type" : "string",
"description" : "Путь к конфигурационному файлу для xddTestRunner.\n По умолчанию содержит значение \"./tools/xUnitParams.json\".\n "
}
},
"description" : "Настройки дымового тестирования"
},
"sonarqube" : {
"type" : "object",
"properties" : {
"branchAnalysisConfiguration" : {
"type" : "string",
"enum" : [ "auto", "fromEnv" ],
"description" : "Вариант конфигурации branch plugin.\n Поддерживаемые варианты:\n * auto - применяется автоконфигурация sonar-scanner силами branchplugin. Так же может применяться для отключения конфигурирования, если branch plugin отсутствует;\n * fromEnv - применяется ручная конфигурация sonar-scanner на основе переменных среды.\n Значение по умолчанию: fromEnv.",
"default" : "auto"
},
"infoBaseUpdateModuleName" : {
"type" : "string",
"description" : "Имя общего модуля (например, ОбновлениеИнформационнойБазыXXX), в котором указана версия библиотеки.\n Версия должна задаваться в виде присвоения `Описание.Версия = \"ваш номер версии\";`\n "
},
"sonarQubeInstallation" : {
"type" : "string",
"description" : "Имя настроенного SonarQube-сервера (SonarQube installations).\nЕсли настроен только один сервер, то может быть оставлено пустым."
},
"sonarScannerToolName" : {
"type" : "string",
"description" : "Имя настроенной утилиты sonar-scanner.\nПрименяется, если useSonarScannerFromPath установлено в false."
},
"useSonarScannerFromPath" : {
"type" : "boolean",
"description" : "Использовать sonar-scanner, доступный в PATH"
},
"waitForQualityGate" : {
"type" : "boolean",
"description" : "Ожидать состояние Quality Gate от SonarQube после загрузки анализа. По умолчанию `false`.\n Таймаут ожидания состояния равен таймауту шага.\n "
}
},
"description" : "Настройки анализа SonarQube"
},
"sourceFormat" : {
"type" : "string",
"enum" : [ "edt", "designer" ],
"description" : "Формат исходников конфигурации",
"default" : "designer"
},
"srcDir" : {
"type" : "string",
"description" : "Путь к корневому каталогу с исходниками конфигурации, в случае хранения исходников в формате EDT, необходимо указать путь к проекту"
},
"stages" : {
"type" : "object",
"id" : "urn:jsonschema:ru:pulsar:jenkins:library:configuration:StageFlags",
"description" : "Включение этапов сборок",
"properties" : {
"bdd" : {
"type" : "boolean",
"description" : "Запуск BDD сценариев включен"
},
"edtValidate" : {
"type" : "boolean",
"description" : "Валидация EDT включена"
},
"email" : {
"type" : "boolean",
"description" : "Выполнять рассылку результатов сборки на email"
},
"initSteps" : {
"type" : "boolean",
"description" : "Предварительные шаги инициализации включены"
},
"smoke" : {
"type" : "boolean",
"description" : "Дымовые тесты включены"
},
"sonarqube" : {
"type" : "boolean",
"description" : "Анализ SonarQube включен"
@ -59,226 +315,23 @@
"type" : "boolean",
"description" : "Синтаксический контроль включен"
},
"edtValidate" : {
"telegram" : {
"type" : "boolean",
"description" : "Валидация EDT включена"
},
"smoke" : {
"type" : "boolean",
"description" : "Дымовые тесты включены"
"description" : "Выполнять рассылку результатов сборки в telegram"
},
"yaxunit" : {
"type" : "boolean",
"description" : "Запуск YAXUnit тестов включен"
},
"initSteps" : {
"type" : "boolean",
"description" : "Предварительные шаги инициализации включены"
},
"bdd" : {
"type" : "boolean",
"description" : "Запуск BDD сценариев включен"
},
"email" : {
"type" : "boolean",
"description" : "Выполнять рассылку результатов сборки на email"
},
"telegram" : {
"type" : "boolean",
"description" : "Выполнять рассылку результатов сборки в telegram"
}
}
},
"timeout" : {
"type" : "object",
"id" : "urn:jsonschema:ru:pulsar:jenkins:library:configuration:TimeoutOptions",
"description" : "Настройка таймаутов для шагов",
"properties" : {
"edtToDesignerFormatTransformation" : {
"type" : "integer",
"description" : "Таймаут шага трансформации исходников из формата EDT в формат Конфигуратора, в минутах.\n По умолчанию содержит значение 60.\n "
},
"getBinaries" : {
"type" : "integer",
"description" : "Таймаут шага получения бинарников, в минутах.\n По умолчанию содержит значение 60.\n "
},
"createInfoBase" : {
"type" : "integer",
"description" : "Таймаут шага создания информационной базы, в минутах.\n По умолчанию содержит значение 60.\n "
},
"loadConfiguration" : {
"type" : "integer",
"description" : "Таймаут шага загрузки конфигурации в базу, в минутах.\n По умолчанию содержит значение 60.\n "
},
"initInfoBase" : {
"type" : "integer",
"description" : "Таймаут шага инициализации информационной базы, в минутах.\n По умолчанию содержит значение 60.\n "
},
"loadExtensions" : {
"type" : "integer",
"description" : "Таймаут шага загрузки расширений в базу, в минутах.\n По умолчанию содержит значение 60.\n "
},
"zipInfoBase" : {
"type" : "integer",
"description" : "Таймаут шага архивирования информационной базы, в минутах.\n По умолчанию содержит значение 60.\n "
},
"designerToEdtFormatTransformation" : {
"type" : "integer",
"description" : "Таймаут шага трансформации исходников из формата Конфигуратора в формат EDT, в минутах.\n По умолчанию содержит значение 60.\n "
},
"edtValidate" : {
"type" : "integer",
"description" : "Таймаут шага валидации EDT, в минутах.\n По умолчанию содержит значение 240.\n "
},
"resultTransformation" : {
"type" : "integer",
"description" : "Таймаут шага трансформации результатов EDT, в минутах.\n По умолчанию содержит значение 10.\n "
},
"bdd" : {
"type" : "integer",
"description" : "Таймаут шага проверки сценариев поведения, в минутах.\n По умолчанию содержит значение 120.\n "
},
"syntaxCheck" : {
"type" : "integer",
"description" : "Таймаут шага синтаксического контроля, в минутах.\n По умолчанию содержит значение 240.\n "
},
"smoke" : {
"type" : "integer",
"description" : "Таймаут шага дымовых тестов, в минутах.\n По умолчанию содержит значение 240.\n "
},
"yaxunit" : {
"type" : "integer",
"description" : "Таймаут шага YAXUnit тестов, в минутах.\n По умолчанию содержит значение 240.\n "
},
"sonarqube" : {
"type" : "integer",
"description" : "Таймаут шага статического анализа SonarQube, в минутах.\n По умолчанию содержит значение 90.\n "
}
}
},
"initInfobase" : {
"type" : "object",
"id" : "urn:jsonschema:ru:pulsar:jenkins:library:configuration:InitInfoBaseOptions",
"description" : "Настройки шага инициализации ИБ",
"properties" : {
"initMethod" : {
"type" : "string",
"description" : "\n Способ инициализации информационной базы.\n Поддерживается три варианта:\n * fromStorage - инициализация информационной базы из хранилища конфигурации;\n * fromSource - инициализация информационной базы из исходников конфигурации;\n * defaultBranchFromStorage - инициализация основной ветки из хранилища конфигурации, остальных - из исходников конфигурации.\n По умолчанию содержит значение \"fromStorage\".",
"enum" : [ "fromStorage", "fromSource", "defaultBranchFromStorage" ]
},
"runMigration" : {
"type" : "boolean",
"description" : "Запустить миграцию ИБ"
},
"additionalInitializationSteps" : {
"type" : "array",
"description" : "Дополнительные шаги, запускаемые через vrunner.\n В каждой строке передается отдельная команда \n vrunner и ее аргументы (например, \"vanessa --settings ./tools/vrunner.first.json\")\n ",
"items" : {
"type" : "string"
}
},
"vrunnerSettings" : {
"type" : "string",
"description" : "Путь к конфигурационному файлу vanessa-runner.\n По умолчанию содержит значение \"./tools/vrunner.json\"\n Используется, если на этапе подготовки база загружается из эталона. \n "
},
"templateDBPath" : {
"type" : "string",
"description" : "\n Путь к файлу эталонной базы данных.\n * По умолчанию не заполнен;\n * Указывается путь к файлу *.dt или *.1CD.\n "
},
"extensions" : {
"type" : "array",
"description" : "Массив расширений для загрузки в конфигурацию.",
"items" : {
"type" : "object",
"id" : "urn:jsonschema:ru:pulsar:jenkins:library:configuration:InitInfoBaseOptions:Extension",
"properties" : {
"name" : {
"type" : "string",
"description" : "Имя расширения, используемое при его загрузке в конфигурацию."
},
"initMethod" : {
"type" : "string",
"description" : "\n Способ инициализации расширения.\n Поддерживается два варианта:\n * fromSource - инициализация расширения из исходников;\n * fromFile - скачивание скомпилированного cfe по ссылке.\n ",
"enum" : [ "fromSource", "fromFile" ]
},
"path" : {
"type" : "string",
"description" : "\n Путь к расширению.\n * В случае если выбран initMethod <fromSource> - указывается путь к исходникам расширения.\n * В случае если выбран initMethod <fromFile> - указывается путь к cfe-файлу\n "
},
"stages" : {
"type" : "array",
"description" : "\n Шаги, на которых необходимо использовать расширение\n * Если не заполнено, то расширение будет подключено при инициализации базы и останется в базе на всех последующих шагах.\n * Если заполнено, то расширение будет подключено только на соответствующих шагах.\n ",
"items" : {
"type" : "string"
}
}
}
}
}
}
},
"bdd" : {
"type" : "object",
"id" : "urn:jsonschema:ru:pulsar:jenkins:library:configuration:BddOptions",
"description" : "Настройки шага запуска BDD сценариев",
"properties" : {
"vrunnerSteps" : {
"type" : "array",
"description" : "Шаги, запускаемые через vrunner.\n В каждой строке передается отдельная команда \n vrunner и ее аргументы (например, \"vanessa --settings ./tools/vrunner.json\").\n По умолчанию содержит одну команду \"vanessa --settings ./tools/vrunner.json\".\n ",
"items" : {
"type" : "string"
}
}
}
},
"sonarqube" : {
"type" : "object",
"id" : "urn:jsonschema:ru:pulsar:jenkins:library:configuration:SonarQubeOptions",
"description" : "Настройки анализа SonarQube",
"properties" : {
"sonarQubeInstallation" : {
"type" : "string",
"description" : "Имя настроенного SonarQube-сервера (SonarQube installations).\nЕсли настроен только один сервер, то может быть оставлено пустым."
},
"useSonarScannerFromPath" : {
"type" : "boolean",
"description" : "Использовать sonar-scanner, доступный в PATH"
},
"sonarScannerToolName" : {
"type" : "string",
"description" : "Имя настроенной утилиты sonar-scanner.\nПрименяется, если useSonarScannerFromPath установлено в false."
},
"infoBaseUpdateModuleName" : {
"type" : "string",
"description" : "Имя общего модуля (например, ОбновлениеИнформационнойБазыXXX), в котором указана версия библиотеки.\n Версия должна задаваться в виде присвоения `Описание.Версия = \"ваш номер версии\";`\n "
},
"branchAnalysisConfiguration" : {
"type" : "string",
"description" : "Вариант конфигурации branch plugin.\n Поддерживаемые варианты:\n * auto - применяется автоконфигурация sonar-scanner силами branchplugin. Так же может применяться для отключения конфигурирования, если branch plugin отсутствует;\n * fromEnv - применяется ручная конфигурация sonar-scanner на основе переменных среды.\n Значение по умолчанию: fromEnv.",
"enum" : [ "auto", "fromEnv" ]
},
"waitForQualityGate" : {
"type" : "boolean",
"description" : "Ожидать состояние Quality Gate от SonarQube после загрузки анализа. По умолчанию `false`.\n Таймаут ожидания состояния равен таймауту шага.\n "
}
}
},
"description" : "Включение этапов сборок"
},
"syntaxCheck" : {
"type" : "object",
"id" : "urn:jsonschema:ru:pulsar:jenkins:library:configuration:SyntaxCheckOptions",
"description" : "Настройки синтаксического контроля",
"properties" : {
"pathToJUnitReport" : {
"type" : "string",
"description" : "Путь к файлу отчета jUnit\n По умолчанию содержит значение \"./build/out/jUnit/syntax.xml\"\n "
},
"groupErrorsByMetadata" : {
"type" : "boolean",
"description" : "Группировать выявленные ошибки по объектам метаданных.\n По умолчанию включено.\n "
},
"checkModes" : {
"type" : "array",
"description" : "Режимы проверки конфигурации",
"type" : "array",
"items" : {
"type" : "string"
}
@ -287,44 +340,94 @@
"type" : "string",
"description" : "Путь к файлу с указанием пропускаемых ошибок.\n Формат файла: в каждой строке файла указан текст пропускаемого исключения или его часть\n Кодировка: UTF-8\n "
},
"groupErrorsByMetadata" : {
"type" : "boolean",
"description" : "Группировать выявленные ошибки по объектам метаданных.\n По умолчанию включено.\n "
},
"pathToJUnitReport" : {
"type" : "string",
"description" : "Путь к файлу отчета jUnit\n По умолчанию содержит значение \"./build/out/jUnit/syntax.xml\"\n "
},
"vrunnerSettings" : {
"type" : "string",
"description" : "Путь к конфигурационному файлу vanessa-runner.\n По умолчанию содержит значение \"./tools/vrunner.json\".\n "
}
}
},
"description" : "Настройки синтаксического контроля"
},
"smoke" : {
"timeout" : {
"type" : "object",
"id" : "urn:jsonschema:ru:pulsar:jenkins:library:configuration:SmokeTestOptions",
"description" : "Настройки дымового тестирования",
"properties" : {
"vrunnerSettings" : {
"type" : "string",
"description" : "Путь к конфигурационному файлу vanessa-runner.\n По умолчанию содержит значение \"./tools/vrunner.json\".\n "
"bdd" : {
"type" : "integer",
"description" : "Таймаут шага проверки сценариев поведения, в минутах.\n По умолчанию содержит значение 120.\n "
},
"xddConfigPath" : {
"type" : "string",
"description" : "Путь к конфигурационному файлу для xddTestRunner.\n По умолчанию содержит значение \"./tools/xUnitParams.json\".\n "
"createInfoBase" : {
"type" : "integer",
"description" : "Таймаут шага создания информационной базы, в минутах.\n По умолчанию содержит значение 60.\n "
},
"publishToAllureReport" : {
"type" : "boolean",
"description" : "Выполнять публикацию результатов в отчет Allure.\n По умолчанию выключено.\n "
"designerToEdtFormatTransformation" : {
"type" : "integer",
"description" : "Таймаут шага трансформации исходников из формата Конфигуратора в формат EDT, в минутах.\n По умолчанию содержит значение 60.\n "
},
"publishToJUnitReport" : {
"type" : "boolean",
"description" : "Выполнять публикацию результатов в отчет JUnit.\n По умолчанию включено.\n "
"edtToDesignerFormatTransformation" : {
"type" : "integer",
"description" : "Таймаут шага трансформации исходников из формата EDT в формат Конфигуратора, в минутах.\n По умолчанию содержит значение 60.\n "
},
"edtValidate" : {
"type" : "integer",
"description" : "Таймаут шага валидации EDT, в минутах.\n По умолчанию содержит значение 240.\n "
},
"getBinaries" : {
"type" : "integer",
"description" : "Таймаут шага получения бинарников, в минутах.\n По умолчанию содержит значение 60.\n "
},
"initInfoBase" : {
"type" : "integer",
"description" : "Таймаут шага инициализации информационной базы, в минутах.\n По умолчанию содержит значение 60.\n "
},
"loadConfiguration" : {
"type" : "integer",
"description" : "Таймаут шага загрузки конфигурации в базу, в минутах.\n По умолчанию содержит значение 60.\n "
},
"loadExtensions" : {
"type" : "integer",
"description" : "Таймаут шага загрузки расширений в базу, в минутах.\n По умолчанию содержит значение 60.\n "
},
"resultTransformation" : {
"type" : "integer",
"description" : "Таймаут шага трансформации результатов EDT, в минутах.\n По умолчанию содержит значение 10.\n "
},
"smoke" : {
"type" : "integer",
"description" : "Таймаут шага дымовых тестов, в минутах.\n По умолчанию содержит значение 240.\n "
},
"sonarqube" : {
"type" : "integer",
"description" : "Таймаут шага статического анализа SonarQube, в минутах.\n По умолчанию содержит значение 90.\n "
},
"syntaxCheck" : {
"type" : "integer",
"description" : "Таймаут шага синтаксического контроля, в минутах.\n По умолчанию содержит значение 240.\n "
},
"yaxunit" : {
"type" : "integer",
"description" : "Таймаут шага YAXUnit тестов, в минутах.\n По умолчанию содержит значение 240.\n "
},
"zipInfoBase" : {
"type" : "integer",
"description" : "Таймаут шага архивирования информационной базы, в минутах.\n По умолчанию содержит значение 60.\n "
}
}
},
"description" : "Настройка таймаутов для шагов"
},
"v8version" : {
"type" : "string",
"description" : "Версия платформы 1С:Предприятие в формате 8.3.хх.хххх."
},
"yaxunit" : {
"type" : "object",
"id" : "urn:jsonschema:ru:pulsar:jenkins:library:configuration:YaxunitOptions",
"description" : "Настройки YAXUnit",
"properties" : {
"vrunnerSettings" : {
"type" : "string",
"description" : "Путь к конфигурационному файлу vanessa-runner.\n По умолчанию содержит значение \"./tools/vrunner.json\".\n "
},
"configPath" : {
"type" : "string",
"description" : "Путь к конфигурационному файлу YAXUnit.\n По умолчанию содержит значение \"./tools/yaxunit.json\".\n "
@ -336,124 +439,13 @@
"publishToJUnitReport" : {
"type" : "boolean",
"description" : "Выполнять публикацию результатов в отчет JUnit.\n По умолчанию включено.\n "
}
}
},
"resultsTransform" : {
"type" : "object",
"id" : "urn:jsonschema:ru:pulsar:jenkins:library:configuration:ResultsTransformOptions",
"description" : "Настройки трансформации результатов анализа",
"properties" : {
"transformer" : {
},
"vrunnerSettings" : {
"type" : "string",
"description" : "Способ преобразования замечаний.\n Поддерживается stebi и edt-ripper.\n По умолчанию содержит значение \"stebi\".\n ",
"enum" : [ "stebi", "edt-ripper" ]
},
"removeSupport" : {
"type" : "boolean",
"description" : "Фильтровать замечания по уровню поддержки модуля. Только для stebi. По умолчанию включено."
},
"supportLevel" : {
"type" : "integer",
"description" : "Настройка фильтрации замечаний по уровню поддержки. Только для stebi.\n 0 - удалить файлы на замке;\n 1 - удалить файлы на замке и на поддержке;\n 2 - удалить файлы на замке, на поддержке и снятые с поддержки.\n "
},
"genericIssueFormat" : {
"type" : "string",
"description" : "Формат отчета generic issue. Только для stebi.\n Для SonarQube старее 10.3 необходимо использовать Generic_Issue.\n По умолчанию Generic_Issue_10_3\n ",
"enum" : [ "Generic_Issue", "Generic_Issue_10_3" ]
"description" : "Путь к конфигурационному файлу vanessa-runner.\n По умолчанию содержит значение \"./tools/vrunner.json\".\n "
}
}
},
"notifications" : {
"type" : "object",
"id" : "urn:jsonschema:ru:pulsar:jenkins:library:configuration:NotificationsOptions",
"description" : "Настройки рассылки результатов сборки",
"properties" : {
"email" : {
"type" : "object",
"id" : "urn:jsonschema:ru:pulsar:jenkins:library:configuration:notification:EmailNotificationOptions",
"description" : "Настройки рассылки результатов сборки через email",
"properties" : {
"onAlways" : {
"type" : "boolean",
"description" : "Отправлять всегда"
},
"onSuccess" : {
"type" : "boolean",
"description" : "Отправлять при успешной сборке"
},
"onFailure" : {
"type" : "boolean",
"description" : "Отправлять при падении сборки"
},
"onUnstable" : {
"type" : "boolean",
"description" : "Отправлять при нестабильной сборке"
},
"alwaysOptions" : {
"type" : "object",
"id" : "urn:jsonschema:ru:pulsar:jenkins:library:configuration:notification:email:EmailExtConfiguration",
"properties" : {
"attachLog" : {
"type" : "boolean"
},
"directRecipients" : {
"type" : "array",
"items" : {
"type" : "string"
}
},
"recipientProviders" : {
"type" : "array",
"items" : {
"type" : "string",
"enum" : [ "developers", "requestor", "brokenBuildSuspects", "brokenTestsSuspects" ]
}
}
}
},
"successOptions" : {
"type" : "object",
"$ref" : "urn:jsonschema:ru:pulsar:jenkins:library:configuration:notification:email:EmailExtConfiguration"
},
"failureOptions" : {
"type" : "object",
"$ref" : "urn:jsonschema:ru:pulsar:jenkins:library:configuration:notification:email:EmailExtConfiguration"
},
"unstableOptions" : {
"type" : "object",
"$ref" : "urn:jsonschema:ru:pulsar:jenkins:library:configuration:notification:email:EmailExtConfiguration"
}
}
},
"telegram" : {
"type" : "object",
"id" : "urn:jsonschema:ru:pulsar:jenkins:library:configuration:notification:TelegramNotificationOptions",
"description" : "Настройки рассылки результатов сборки через telegram",
"properties" : {
"onAlways" : {
"type" : "boolean",
"description" : "Отправлять всегда"
},
"onSuccess" : {
"type" : "boolean",
"description" : "Отправлять при успешной сборке"
},
"onFailure" : {
"type" : "boolean",
"description" : "Отправлять при падении сборки"
},
"onUnstable" : {
"type" : "boolean",
"description" : "Отправлять при нестабильной сборке"
}
}
}
}
},
"logosConfig" : {
"type" : "string",
"description" : "Конфигурация библиотеки logos. Применяется перед запуском каждой стадии сборки"
},
"description" : "Настройки YAXUnit"
}
}
}

View File

@ -1,27 +1,40 @@
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.fasterxml.jackson.module.jsonSchema.JsonSchema;
import com.fasterxml.jackson.module.jsonSchema.JsonSchemaGenerator;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.JsonNode;
import com.github.victools.jsonschema.generator.OptionPreset;
import com.github.victools.jsonschema.generator.SchemaGenerator;
import com.github.victools.jsonschema.generator.SchemaGeneratorConfigBuilder;
import com.github.victools.jsonschema.generator.SchemaVersion;
import com.github.victools.jsonschema.module.jackson.JacksonModule;
import com.github.victools.jsonschema.module.jackson.JacksonOption;
import ru.pulsar.jenkins.library.configuration.JobConfiguration;
import java.io.File;
import java.io.StringWriter;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
public class JobConfigurationSchemaGenerator {
public static void main(String[] args) throws Exception {
ObjectMapper mapper = new ObjectMapper();
JsonSchemaGenerator generator = new JsonSchemaGenerator(mapper);
JsonSchema jsonSchema = generator.generateSchema(JobConfiguration.class);
StringWriter json = new StringWriter();
mapper.configure(SerializationFeature.INDENT_OUTPUT, true);
mapper.writeValue(json, jsonSchema);
SchemaGeneratorConfigBuilder configBuilder = new SchemaGeneratorConfigBuilder(SchemaVersion.DRAFT_7, OptionPreset.PLAIN_JSON)
.with(new JacksonModule(JacksonOption.FLATTENED_ENUMS_FROM_JSONVALUE, JacksonOption.FLATTENED_ENUMS_FROM_JSONPROPERTY));
File jsonSchemaFile = new File("./resources/schema.json");
mapper.writeValue(jsonSchemaFile, jsonSchema);
configBuilder.forFields().withDefaultResolver(field -> {
JsonProperty annotation = field.getAnnotationConsideringFieldAndGetter(JsonProperty.class);
return annotation == null || annotation.defaultValue().isEmpty() ? null : annotation.defaultValue();
});
System.out.println(json);
SchemaGenerator generator = new SchemaGenerator(configBuilder.build());
JsonNode jsonSchema = generator.generateSchema(JobConfiguration.class);
String outputPath = "./resources/schema.json";
try (BufferedWriter writer = new BufferedWriter(new FileWriter(outputPath))) {
writer.write(jsonSchema.toPrettyString());
System.out.println(jsonSchema.toPrettyString());
} catch (IOException e) {
e.printStackTrace();
}
}
}

View File

@ -2,6 +2,7 @@ package ru.pulsar.jenkins.library.configuration
import com.cloudbees.groovy.cps.NonCPS
import com.fasterxml.jackson.annotation.JsonIgnoreProperties
import com.fasterxml.jackson.annotation.JsonProperty
import com.fasterxml.jackson.annotation.JsonPropertyDescription
@JsonIgnoreProperties(ignoreUnknown = true)
@ -14,6 +15,7 @@ class InitInfoBaseOptions implements Serializable {
* fromSource - инициализация информационной базы из исходников конфигурации;
* defaultBranchFromStorage - инициализация основной ветки из хранилища конфигурации, остальных - из исходников конфигурации.
По умолчанию содержит значение "fromStorage".""")
@JsonProperty(defaultValue = "fromStorage")
InitInfoBaseMethod initMethod = InitInfoBaseMethod.FROM_STORAGE
@JsonPropertyDescription("Запустить миграцию ИБ")

View File

@ -19,57 +19,58 @@ class JobConfiguration implements Serializable {
String srcDir
@JsonPropertyDescription("Формат исходников конфигурации")
SourceFormat sourceFormat;
@JsonProperty(defaultValue = "designer")
SourceFormat sourceFormat
@JsonProperty("stages")
@JsonPropertyDescription("Включение этапов сборок")
StageFlags stageFlags;
StageFlags stageFlags
@JsonProperty("timeout")
@JsonPropertyDescription("Настройка таймаутов для шагов")
TimeoutOptions timeoutOptions;
TimeoutOptions timeoutOptions
@JsonPropertyDescription("Имя ветки по умолчанию. Значение по умолчанию - main.")
String defaultBranch
@JsonPropertyDescription("Идентификаторы сохраненных секретов")
Secrets secrets;
Secrets secrets
@JsonProperty("initInfobase")
@JsonPropertyDescription("Настройки шага инициализации ИБ")
InitInfoBaseOptions initInfoBaseOptions;
InitInfoBaseOptions initInfoBaseOptions
@JsonProperty("bdd")
@JsonPropertyDescription("Настройки шага запуска BDD сценариев")
BddOptions bddOptions;
BddOptions bddOptions
@JsonProperty("sonarqube")
@JsonPropertyDescription("Настройки анализа SonarQube")
SonarQubeOptions sonarQubeOptions;
SonarQubeOptions sonarQubeOptions
@JsonProperty("syntaxCheck")
@JsonPropertyDescription("Настройки синтаксического контроля")
SyntaxCheckOptions syntaxCheckOptions;
SyntaxCheckOptions syntaxCheckOptions
@JsonProperty("smoke")
@JsonPropertyDescription("Настройки дымового тестирования")
SmokeTestOptions smokeTestOptions;
SmokeTestOptions smokeTestOptions
@JsonProperty("yaxunit")
@JsonPropertyDescription("Настройки YAXUnit")
YaxunitOptions yaxunitOptions;
YaxunitOptions yaxunitOptions
@JsonProperty("resultsTransform")
@JsonPropertyDescription("Настройки трансформации результатов анализа")
ResultsTransformOptions resultsTransformOptions;
ResultsTransformOptions resultsTransformOptions
@JsonProperty("notifications")
@JsonPropertyDescription("Настройки рассылки результатов сборки")
NotificationsOptions notificationsOptions;
NotificationsOptions notificationsOptions
@JsonProperty("logosConfig")
@JsonPropertyDescription("Конфигурация библиотеки logos. Применяется перед запуском каждой стадии сборки")
String logosConfig;
String logosConfig
@Override
@NonCPS
@ -92,13 +93,13 @@ class JobConfiguration implements Serializable {
", resultsTransformOptions=" + resultsTransformOptions +
", notificationOptions=" + notificationsOptions +
", logosConfig='" + logosConfig + '\'' +
'}';
'}'
}
boolean infoBaseFromFiles() {
IStepExecutor steps = ContextRegistry.getContext().getStepExecutor()
def env = steps.env();
String branchName = env.BRANCH_NAME;
def env = steps.env()
String branchName = env.BRANCH_NAME
def initMethod = initInfoBaseOptions.initMethod
return (initMethod == InitInfoBaseMethod.FROM_SOURCE) ||

View File

@ -3,6 +3,7 @@ package ru.pulsar.jenkins.library.configuration
import com.cloudbees.groovy.cps.NonCPS
import com.fasterxml.jackson.annotation.JsonIgnoreProperties
import com.fasterxml.jackson.annotation.JsonPropertyDescription
import com.fasterxml.jackson.annotation.JsonProperty
import ru.pulsar.jenkins.library.configuration.sonarqube.GenericIssueFormat
@JsonIgnoreProperties(ignoreUnknown = true)
@ -12,6 +13,7 @@ class ResultsTransformOptions implements Serializable {
Поддерживается stebi и edt-ripper.
По умолчанию содержит значение "stebi".
""")
@JsonProperty(defaultValue = "stebi")
ResultsTransformerType transformer = ResultsTransformerType.STEBI
@JsonPropertyDescription("Фильтровать замечания по уровню поддержки модуля. Только для stebi. По умолчанию включено.")
@ -28,7 +30,8 @@ class ResultsTransformOptions implements Serializable {
Для SonarQube версии ниже 10.3 необходимо использовать Generic_Issue.
По умолчанию Generic_Issue_10_3
""")
GenericIssueFormat genericIssueFormat = GenericIssueFormat.GENERIC_ISSUE_10_3
@JsonProperty(defaultValue = "Generic_Issue_10_3")
GenericIssueFormat genericIssueFormat
@Override
@NonCPS

View File

@ -2,6 +2,7 @@ package ru.pulsar.jenkins.library.configuration
import com.cloudbees.groovy.cps.NonCPS
import com.fasterxml.jackson.annotation.JsonIgnoreProperties
import com.fasterxml.jackson.annotation.JsonProperty
import com.fasterxml.jackson.annotation.JsonPropertyDescription
@JsonIgnoreProperties(ignoreUnknown = true)
@ -10,7 +11,7 @@ class SonarQubeOptions implements Serializable {
@JsonPropertyDescription(
"Имя настроенного SonarQube-сервера (SonarQube installations).\nЕсли настроен только один сервер, то может быть оставлено пустым."
)
String sonarQubeInstallation;
String sonarQubeInstallation
@JsonPropertyDescription("Использовать sonar-scanner, доступный в PATH")
Boolean useSonarScannerFromPath
@ -30,6 +31,7 @@ class SonarQubeOptions implements Serializable {
* auto - применяется автоконфигурация sonar-scanner силами branchplugin. Так же может применяться для отключения конфигурирования, если branch plugin отсутствует;
* fromEnv - применяется ручная конфигурация sonar-scanner на основе переменных среды.
Значение по умолчанию: fromEnv.""")
@JsonProperty(defaultValue = "auto")
BranchAnalysisConfiguration branchAnalysisConfiguration
@JsonPropertyDescription("""Ожидать состояние Quality Gate от SonarQube после загрузки анализа. По умолчанию `false`.
@ -47,6 +49,6 @@ class SonarQubeOptions implements Serializable {
", infoBaseUpdateModuleName='" + infoBaseUpdateModuleName + '\'' +
", branchAnalysisConfiguration='" + branchAnalysisConfiguration + '\'' +
", waitForQualityGate='" + waitForQualityGate + '\'' +
'}';
'}'
}
}

View File

@ -1,7 +1,6 @@
package ru.pulsar.jenkins.library.configuration.sonarqube
import com.fasterxml.jackson.annotation.JsonProperty
import com.fasterxml.jackson.annotation.JsonValue
enum GenericIssueFormat {
@JsonProperty("Generic_Issue")
@ -16,7 +15,6 @@ enum GenericIssueFormat {
this.value = value
}
String getValue() {
return value
}

View File

@ -50,7 +50,7 @@ class ConfigurationReaderTest {
ResultsTransformOptions resultsTransformOptions = jobConfiguration.getResultsTransformOptions();
assertThat(resultsTransformOptions.getTransformer()).isEqualTo(ResultsTransformerType.STEBI);
assertThat(resultsTransformOptions.getGenericIssueFormat()).isEqualTo(GenericIssueFormat.GENERIC_ISSUE_10_3);
assertThat(resultsTransformOptions.getGenericIssueFormat()).isEqualTo(GenericIssueFormat.GENERIC_ISSUE);
assertThat(resultsTransformOptions.getRemoveSupport()).isFalse();
assertThat(resultsTransformOptions.getSupportLevel()).isZero();

View File

@ -55,7 +55,7 @@
},
"resultsTransform": {
"transformer": "stebi",
"genericIssueFormat": "Generic_Issue_10_3",
"genericIssueFormat": "Generic_Issue",
"removeSupport": false
},
"smoke": {