-
Notifications
You must be signed in to change notification settings - Fork 70
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Замер покрытия #98
Замер покрытия #98
Conversation
closes #39 |
src/ru/pulsar/jenkins/library/configuration/ConfigurationReader.groovy
Outdated
Show resolved
Hide resolved
src/ru/pulsar/jenkins/library/configuration/SmokeTestOptions.groovy
Outdated
Show resolved
Hide resolved
src/ru/pulsar/jenkins/library/steps/EdtToDesignerFormatTransformation.groovy
Outdated
Show resolved
Hide resolved
@nixel2007 вроде как все отработал, на своих проектах проверил |
Ох, до сюда бы ещё добраться... |
f1a4ea7
to
ed17c4b
Compare
WalkthroughЭтот pull request представляет собой значительное обновление библиотеки Jenkins для 1C:Enterprise 8, фокусирующееся на добавлении функциональности измерения покрытия кода. Изменения включают создание новых классов, интерфейсов и методов для поддержки измерения покрытия в различных тестовых сценариях, таких как BDD, smoke-тесты и Yaxunit. Обновлена конфигурация, добавлены новые опции для настройки покрытия и улучшена общая структура библиотеки. Changes
Possibly related PRs
Poem
Tip CodeRabbit's docstrings feature is now available as part of our Early Access Program! Simply use the command Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media? 🪧 TipsChatThere are 3 ways to chat with CodeRabbit:
Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments. CodeRabbit Commands (Invoked using PR comments)
Other keywords and placeholders
CodeRabbit Configuration File (
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 2
Outside diff range, codebase verification and nitpick comments (1)
src/ru/pulsar/jenkins/library/steps/Start.groovy (1)
6-23
: Текущая реализация одобрена.Класс
Start
корректно обрабатывает выполнение скриптов в зависимости от платформы. Возможно, стоит рассмотреть интеграцию этой функциональности в классCmd
для упрощения архитектуры в будущем.
Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Files ignored due to path filters (3)
resources/globalConfiguration.json
is excluded by!**/*.json
resources/schema.json
is excluded by!**/*.json
test/integration/resources/jobConfiguration.json
is excluded by!**/*.json
Files selected for processing (19)
- README.md (5 hunks)
- src/ru/pulsar/jenkins/library/IStepExecutor.groovy (2 hunks)
- src/ru/pulsar/jenkins/library/StepExecutor.groovy (2 hunks)
- src/ru/pulsar/jenkins/library/configuration/BddOptions.groovy (1 hunks)
- src/ru/pulsar/jenkins/library/configuration/ConfigurationReader.groovy (5 hunks)
- src/ru/pulsar/jenkins/library/configuration/CoverageOptions.groovy (1 hunks)
- src/ru/pulsar/jenkins/library/configuration/JobConfiguration.groovy (2 hunks)
- src/ru/pulsar/jenkins/library/configuration/SmokeTestOptions.groovy (3 hunks)
- src/ru/pulsar/jenkins/library/configuration/YaxunitOptions.groovy (2 hunks)
- src/ru/pulsar/jenkins/library/steps/Bdd.groovy (3 hunks)
- src/ru/pulsar/jenkins/library/steps/EdtToDesignerFormatTransformation.groovy (1 hunks)
- src/ru/pulsar/jenkins/library/steps/PublishAllure.groovy (1 hunks)
- src/ru/pulsar/jenkins/library/steps/SmokeTest.groovy (5 hunks)
- src/ru/pulsar/jenkins/library/steps/SonarScanner.groovy (3 hunks)
- src/ru/pulsar/jenkins/library/steps/Start.groovy (1 hunks)
- src/ru/pulsar/jenkins/library/steps/Yaxunit.groovy (5 hunks)
- test/integration/groovy/jobConfigurationTest.groovy (1 hunks)
- test/unit/groovy/ru/pulsar/jenkins/library/configuration/ConfigurationReaderTest.java (2 hunks)
- vars/start.groovy (1 hunks)
Files skipped from review due to trivial changes (2)
- src/ru/pulsar/jenkins/library/configuration/ConfigurationReader.groovy
- src/ru/pulsar/jenkins/library/steps/EdtToDesignerFormatTransformation.groovy
Additional comments not posted (39)
src/ru/pulsar/jenkins/library/configuration/BddOptions.groovy (3)
19-20
: Добавлен новый параметрcoverage
.Параметр корректно добавлен и аннотирован, что позволяет правильно управлять замером покрытия.
22-23
: Добавлен новый параметрdbgsPort
.Параметр для указания порта сервера отладки добавлен корректно и аннотирован, что обеспечивает его правильное использование.
30-32
: Обновление методаtoString()
.Метод
toString()
обновлен для включения новых параметров, что обеспечивает корректное отображение состояния экземпляра класса.src/ru/pulsar/jenkins/library/configuration/SmokeTestOptions.groovy (3)
30-31
: Добавлен параметрcoverage
.Параметр для замера покрытия добавлен корректно, что позволяет настроить измерение покрытия во время тестирования.
33-34
: Добавлен параметрdbgsPort
.Параметр для указания порта сервера отладки добавлен корректно, что обеспечивает его правильное использование при замере покрытия.
44-45
: Обновление методаtoString()
.Метод
toString()
обновлен для включения новых параметров. Предложение изменения отnixel2007
уже учтено в текущем изменении.src/ru/pulsar/jenkins/library/configuration/YaxunitOptions.groovy (3)
30-31
: Добавлен параметрcoverage
.Параметр для замера покрытия добавлен корректно, что позволяет настроить измерение покрытия во время тестирования.
33-34
: Добавлен параметрdbgsPort
.Параметр для указания порта сервера отладки добавлен корректно, что обеспечивает его правильное использование при замере покрытия.
44-45
: Обновление методаtoString()
.Метод
toString()
обновлен для включения новых параметров, что обеспечивает корректное отображение состояния экземпляра класса.src/ru/pulsar/jenkins/library/steps/PublishAllure.groovy (2)
34-34
: Улучшение поддерживаемости кода.Замена строкового литерала на константу улучшает читаемость и управляемость кода, снижая риск ошибок при написании строк.
40-40
: Консистентное использование констант.Использование констант для имен стэшей улучшает поддерживаемость и предотвращает возможные ошибки, связанные с опечатками в строках.
test/integration/groovy/jobConfigurationTest.groovy (2)
77-77
: Проверка пути к исполняемому файлу отладчика.Добавление утверждения для проверки наличия пути к исполняемому файлу отладчика в логе увеличивает покрытие тестами и помогает убедиться в корректности конфигурации.
78-78
: Проверка пути к инструменту покрытия.Утверждение для проверки пути к инструменту покрытия в логе улучшает надежность тестов, подтверждая, что инструмент покрытия корректно интегрирован в процесс.
src/ru/pulsar/jenkins/library/IStepExecutor.groovy (2)
43-43
: Добавление метода для запуска скриптов.Метод
start
расширяет функциональность интерфейса, позволяя инициировать выполнение скриптов, что может быть полезно для различных задач в Jenkins.
69-69
: Введение механизма блокировки ресурсов.Метод
lock
добавляет возможность управления конкуренцией за ресурсы, что важно для корректной работы параллельных задач в сложных пайплайнах.src/ru/pulsar/jenkins/library/steps/Bdd.groovy (6)
15-17
: Определение констант для работы с результатами тестирования и покрытия.Добавление констант
ALLURE_STASH
,COVERAGE_STASH_NAME
,COVERAGE_STASH_PATH
улучшает читаемость и поддерживаемость кода, обеспечивая стандартизацию имен и путей для сохранения артефактов.
33-37
: Инициализация переменных для конфигурации и окружения.Код корректно инициализирует переменные
options
,env
,srcDir
,workspaceDir
, используя настройки из конфигурации и окружения. Это обеспечивает гибкость и масштабируемость в управлении настройками.
44-47
: Генерация уникального ресурса для блокировки.Использование
RandomStringUtils.random
для создания уникального идентификатора ресурса, который потом условно модифицируется в зависимости от настроек покрытия, является хорошей практикой для управления параллельным доступом.
48-57
: Управление запуском инструментов покрытия.Добавленные условные блоки для управления командами покрытия (
start
,cmd
) позволяют гибко управлять процессом измерения покрытия, что улучшает функциональность класса Bdd.
74-76
: Остановка инструментов покрытия.Команда
stop
для инструмента покрытия корректно размещена внутри условного блока, что обеспечивает правильное завершение процесса измерения покрытия.
80-84
: Сохранение результатов покрытия.Условие для сохранения результатов покрытия использует ранее определенные константы, что обеспечивает консистентность и уменьшает вероятность ошибок в путях или именах файлов.
src/ru/pulsar/jenkins/library/steps/Yaxunit.groovy (6)
20-21
: Определение констант для работы с результатами покрытия.Добавление констант
COVERAGE_STASH_NAME
,COVERAGE_STASH_PATH
улучшает читаемость и поддерживаемость кода, обеспечивая стандартизацию имен и путей для сохранения результатов покрытия.
45-47
: Инициализация переменных для конфигурации и окружения.Корректная инициализация переменных
srcDir
,workspaceDir
из конфигурации и окружения поддерживает гибкость и масштабируемость управления настройками.
71-77
: Генерация уникального ресурса для блокировки.Использование
RandomStringUtils.random
для создания уникального идентификатора ресурса, который модифицируется в зависимости от настроек покрытия, является хорошей практикой для управления параллельным доступом.
78-83
: Управление запуском инструментов покрытия.Добавленные условные блоки для управления командами покрытия (
start
,cmd
) позволяют гибко управлять процессом измерения покрытия, что улучшает функциональность класса Yaxunit.
90-92
: Остановка инструментов покрытия.Команда
stop
для инструмента покрытия корректно размещена внутри условного блока, что обеспечивает правильное завершение процесса измерения покрытия.
115-117
: Сохранение результатов покрытия.Условие для сохранения результатов покрытия использует ранее определенные константы, что обеспечивает консистентность и уменьшает вероятность ошибок в путях или именах файлов.
src/ru/pulsar/jenkins/library/configuration/JobConfiguration.groovy (2)
58-61
: Добавление новой настройки для замеров покрытия.Добавление свойства
coverageOptions
с аннотациями@JsonProperty
и@JsonPropertyDescription
улучшает конфигурируемость и документированность классаJobConfiguration
, позволяя пользователям указывать настройки измерения покрытия.
95-95
: Обновление методаtoString
.Включение
coverageOptions
в вывод методаtoString
улучшает отображение состояния экземпляров класса, что способствует лучшему логированию и отладке.src/ru/pulsar/jenkins/library/steps/SonarScanner.groovy (2)
14-14
: Удаление точки с запятой у переменнойconfig
.Изменение соответствует синтаксическим предпочтениям Groovy, где точки с запятой не обязательны.
66-92
: Добавление логики для динамического построения путей отчетов о покрытии.Внесенные изменения улучшают конфигурируемость и полезность класса
SonarScanner
, особенно в средах CI/CD, где отчеты о покрытии критически важны.src/ru/pulsar/jenkins/library/steps/SmokeTest.groovy (2)
15-17
: Переименование константы и добавление новых констант для управления данными о покрытии.Изменения отражают улучшение функциональности класса
SmokeTest
, особенно в его обработке отчетов о покрытии.
Line range hint
109-144
: Расширение логики методаexecute
для включения опций покрытия.Новая переменная
coverageOpts
используется для получения конфигураций покрытия из объектаconfig
, и контрольный поток модифицирован для включения обработки покрытия.test/unit/groovy/ru/pulsar/jenkins/library/configuration/ConfigurationReaderTest.java (1)
43-45
: Добавление дополнительных утверждений в методtestCreateJobConfigurationObject
.Эти утверждения улучшают покрытие тестов для объекта
jobConfiguration
, проверяя значенияdbgsPath
иCoverage41CPath
, а также устанавливают свойстваCoverage
вfalse
дляsmokeTestOptions
иbddOptions
.Also applies to: 59-59, 65-65
src/ru/pulsar/jenkins/library/StepExecutor.groovy (2)
75-78
: Проверка метода start.Метод
start
корректно реализует вызов скрипта черезsteps.start(script)
. Это расширяет функциональность классаStepExecutor
, позволяя ему инициировать процессы, определенные предоставленным скриптом.
152-157
: Проверка метода lock.Метод
lock
корректно реализует управление блокировками ресурсов. Использованиеsteps.lock(...)
с передачей параметровlabel
,quantity
,resource
и выполнением переданного замыкания (body
) внутри блокировки улучшает возможности управления ресурсами и конкуренцией.README.md (3)
9-9
: Уточнение описания конфигурационного файла.Добавлено уточнение о предоставлении пользователю простого декларативного конфигурационного файла, что упрощает настройку и использование библиотеки.
27-28
: Уточнение требований к агентам для замеров покрытия.В документацию добавлены требования к агентам для замеров покрытия, включая необходимость установки Coverage41C, EDT и сервера отладки dbgs. Это важно для корректной настройки среды и избежания конфликтов при параллельном выполнении.
48-48
: Добавление новой функциональности замера покрытия.Документация теперь включает информацию о возможности замера покрытия при выполнении тестов, что является значимым улучшением для отслеживания качества кода.
src/ru/pulsar/jenkins/library/configuration/CoverageOptions.groovy
Outdated
Show resolved
Hide resolved
@nixel2007 сделал rebase ветки, заодно затащил замер покрытия в шаг yaxunit. У себя проверил, работает. |
ed17c4b
to
8f948c2
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 2
Outside diff range, codebase verification and nitpick comments (1)
src/ru/pulsar/jenkins/library/steps/Bdd.groovy (1)
Line range hint
44-84
: Предложение по улучшению управления ресурсамиИспользование случайно сгенерированной строки для блокировки ресурсов может внести элемент непредсказуемости в управление ресурсами. Рассмотрите возможность использования более предсказуемого механизма, основанного на конкретных параметрах среды выполнения.
Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Files ignored due to path filters (3)
resources/globalConfiguration.json
is excluded by!**/*.json
resources/schema.json
is excluded by!**/*.json
test/integration/resources/jobConfiguration.json
is excluded by!**/*.json
Files selected for processing (19)
- README.md (5 hunks)
- src/ru/pulsar/jenkins/library/IStepExecutor.groovy (2 hunks)
- src/ru/pulsar/jenkins/library/StepExecutor.groovy (2 hunks)
- src/ru/pulsar/jenkins/library/configuration/BddOptions.groovy (1 hunks)
- src/ru/pulsar/jenkins/library/configuration/ConfigurationReader.groovy (5 hunks)
- src/ru/pulsar/jenkins/library/configuration/CoverageOptions.groovy (1 hunks)
- src/ru/pulsar/jenkins/library/configuration/JobConfiguration.groovy (2 hunks)
- src/ru/pulsar/jenkins/library/configuration/SmokeTestOptions.groovy (3 hunks)
- src/ru/pulsar/jenkins/library/configuration/YaxunitOptions.groovy (2 hunks)
- src/ru/pulsar/jenkins/library/steps/Bdd.groovy (3 hunks)
- src/ru/pulsar/jenkins/library/steps/EdtToDesignerFormatTransformation.groovy (1 hunks)
- src/ru/pulsar/jenkins/library/steps/PublishAllure.groovy (1 hunks)
- src/ru/pulsar/jenkins/library/steps/SmokeTest.groovy (5 hunks)
- src/ru/pulsar/jenkins/library/steps/SonarScanner.groovy (3 hunks)
- src/ru/pulsar/jenkins/library/steps/Start.groovy (1 hunks)
- src/ru/pulsar/jenkins/library/steps/Yaxunit.groovy (5 hunks)
- test/integration/groovy/jobConfigurationTest.groovy (1 hunks)
- test/unit/groovy/ru/pulsar/jenkins/library/configuration/ConfigurationReaderTest.java (2 hunks)
- vars/start.groovy (1 hunks)
Files skipped from review due to trivial changes (2)
- src/ru/pulsar/jenkins/library/configuration/ConfigurationReader.groovy
- src/ru/pulsar/jenkins/library/steps/EdtToDesignerFormatTransformation.groovy
Additional comments not posted (30)
vars/start.groovy (1)
4-9
: Основная функциональность одобрена.Функция
call
корректно регистрирует контекст и запускает скрипт. Однако, рекомендуется добавить обработку ошибок и логирование для улучшения отладки и надежности.src/ru/pulsar/jenkins/library/steps/Start.groovy (1)
6-24
: Реализация классаStart
одобрена.Класс корректно обрабатывает выполнение скриптов в зависимости от операционной системы. Рассмотрите возможность интеграции функциональности с классом
Cmd
для упрощения архитектуры в будущем.src/ru/pulsar/jenkins/library/configuration/CoverageOptions.groovy (1)
7-29
: Структура класса и аннотации одобрены.Класс
CoverageOptions
корректно описан с четкими аннотациями для сериализации. Рекомендуется добавить валидацию путей к файлам для увеличения надежности конфигурации.src/ru/pulsar/jenkins/library/configuration/BddOptions.groovy (3)
19-21
: Добавление свойстваcoverage
.Свойство корректно реализовано и хорошо документировано. Изменения одобрены.
22-24
: Добавление свойстваdbgsPort
.Свойство корректно реализовано и хорошо документировано. Изменения одобрены.
30-32
: Изменения в методеtoString
.Метод корректно обновлён для включения новых свойств, что улучшает отладку и логирование. Изменения одобрены.
src/ru/pulsar/jenkins/library/configuration/SmokeTestOptions.groovy (3)
30-32
: Добавление свойстваcoverage
.Свойство корректно реализовано и хорошо документировано. Изменения одобрены.
33-35
: Добавление свойстваdbgsPort
.Свойство корректно реализовано и хорошо документировано. Изменения одобрены.
44-45
: Изменения в методеtoString
.Метод корректно обновлён для включения новых свойств, что улучшает отладку и логирование. Изменения одобрены.
src/ru/pulsar/jenkins/library/configuration/YaxunitOptions.groovy (3)
30-32
: Добавление свойстваcoverage
.Свойство корректно реализовано и хорошо документировано. Изменения одобрены.
33-35
: Добавление свойстваdbgsPort
.Свойство корректно реализовано и хорошо документировано. Изменения одобрены.
44-45
: Изменения в методеtoString
.Метод корректно обновлён для включения новых свойств, что улучшает отладку и логирование. Изменения одобрены.
src/ru/pulsar/jenkins/library/steps/PublishAllure.groovy (2)
40-40
: Использование константы для идентификатора кэша.Замена
SmokeTest.SMOKE_ALLURE_STASH
наSmokeTest.ALLURE_STASH
улучшает поддержку и читаемость кода. Убедитесь, что константаSmokeTest.ALLURE_STASH
корректно определена и доступна в этом контексте.Verification successful
Константа SmokeTest.ALLURE_STASH корректно определена.
Константа
SmokeTest.ALLURE_STASH
определена в файлеSmokeTest.groovy
какpublic static final String ALLURE_STASH = 'smoke-allure'
. Изменение вPublishAllure.groovy
является правильным и соответствует определению.Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash # Описание: Проверка определения константы SmokeTest.ALLURE_STASH. # Тест: Поиск определения константы. Ожидаемое: Наличие определения константы. rg --type groovy -A 5 $'SmokeTest.ALLURE_STASH'Length of output: 565
Script:
#!/bin/bash # Broader search for the definition of ALLURE_STASH in the repository. rg --type groovy -A 5 'ALLURE_STASH'Length of output: 4530
34-34
: Использование константы вместо жёстко закодированной строки.Замена
'bdd-allure'
наBdd.ALLURE_STASH
улучшает поддержку и читаемость кода. Убедитесь, что константаBdd.ALLURE_STASH
корректно определена и доступна в этом контексте.Verification successful
Константа Bdd.ALLURE_STASH корректно определена.
Константа
Bdd.ALLURE_STASH
определена в классеBdd
в файлеsrc/ru/pulsar/jenkins/library/steps/Bdd.groovy
какpublic static final String ALLURE_STASH = 'bdd-allure'
. Замена жёстко закодированной строки на константу улучшает поддержку и читаемость кода. Изменение является корректным и полезным.Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash # Описание: Проверка определения константы Bdd.ALLURE_STASH. # Тест: Поиск определения константы. Ожидаемое: Наличие определения константы. rg --type groovy -A 5 $'Bdd.ALLURE_STASH'Length of output: 674
Script:
#!/bin/bash # Описание: Расширенный поиск определения константы Bdd.ALLURE_STASH. # Тест: Поиск определения класса или объекта Bdd, чтобы найти ALLURE_STASH. rg --type groovy -A 10 $'class Bdd' rg --type groovy -A 10 $'object Bdd'Length of output: 2055
src/ru/pulsar/jenkins/library/steps/Bdd.groovy (2)
15-17
: Одобрение изменений в константахИспользование констант вместо жестко закодированных строк улучшает поддерживаемость и читаемость кода.
80-85
: Одобрение условной логики архивацииУсловная архивация данных покрытия корректно реализована и соответствует принципу выполнения действий только при необходимости.
src/ru/pulsar/jenkins/library/steps/Yaxunit.groovy (1)
20-21
: Одобрение изменений в константахИспользование констант вместо жестко закодированных строк улучшает поддерживаемость и читаемость кода.
src/ru/pulsar/jenkins/library/configuration/JobConfiguration.groovy (1)
58-61
: Одобрение добавления свойстваcoverageOptions
Добавление свойства
coverageOptions
расширяет функциональность класса, позволяя настраивать параметры замеров покрытия. Отлично документировано.src/ru/pulsar/jenkins/library/steps/SonarScanner.groovy (3)
9-9
: Добавлен новый импорт.Добавление
StringJoiner
изru.pulsar.jenkins.library.utils
подразумевает использование этого класса для управления строками, что видно из последующих изменений в коде.
30-30
: Инициализация переменной окружения.Переменная
env
используется для доступа к переменным окружения, что является стандартной практикой в Jenkins pipelines.
68-93
: Логика обработки путей покрытия.Добавленная логика проверяет флаги этапов и настройки покрытия для различных тестов (BDD, дымовые тесты, Yaxunit). Если покрытие включено, используется
StringJoiner
для создания строки с путями к отчетам о покрытии, которая затем добавляется к команде SonarQube.+if (stageFlags.bdd && config.bddOptions.coverage + || stageFlags.smoke && config.smokeTestOptions.coverage + || stageFlags.yaxunit && config.yaxunitOptions.coverage) { + StringJoiner coveragePathsConstructor = new StringJoiner(",") + if (stageFlags.bdd && config.bddOptions.coverage) { + steps.unstash(Bdd.COVERAGE_STASH_NAME) + coveragePathsConstructor.add(Bdd.COVERAGE_STASH_PATH) + } + if (stageFlags.smoke && config.smokeTestOptions.coverage) { + steps.unstash(SmokeTest.COVERAGE_STASH_NAME) + coveragePathsConstructor.add(SmokeTest.COVERAGE_STASH_PATH) + } + if (stageFlags.yaxunit && config.yaxunitOptions.coverage) { + steps.unstash(Yaxunit.COVERAGE_STASH_NAME) + coveragePathsConstructor.add(Yaxunit.COVERAGE_STASH_PATH) + } + String coveragePaths = coveragePathsConstructor.toString() + sonarCommand += " -Dsonar.coverageReportPaths=${coveragePaths}" +}Это изменение улучшает интеграцию отчетов о покрытии в процесс анализа SonarQube, что соответствует целям pull request.
Verification successful
Логика обработки путей покрытия подтверждена.
Логика обработки путей покрытия, добавленная в
SonarScanner.groovy
, проверяет флаги этапов и настройки покрытия для различных тестов и корректно интегрируется в команду SonarQube. Эта логика используется только в данном файле, что подтверждает локализованность изменений.Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash # Описание: Проверка использования новой логики путей покрытия. # Тест: Поиск использования новой логики в других файлах. Ожидаемый результат: только в этом файле. rg --type groovy -A 5 $'coveragePathsConstructor'Length of output: 2219
src/ru/pulsar/jenkins/library/steps/SmokeTest.groovy (2)
15-17
: Переименование и добавление констант.Переименование
SMOKE_ALLURE_STASH
вALLURE_STASH
и добавлениеCOVERAGE_STASH_NAME
иCOVERAGE_STASH_PATH
улучшает читаемость и структурирование данных о покрытии. Эти изменения поддерживают новую функциональность отчетов о покрытии.-public static final String SMOKE_ALLURE_STASH = 'smoke-allure' +public static final String ALLURE_STASH = 'smoke-allure' +public static final String COVERAGE_STASH_NAME = 'smoke-coverage' +public static final String COVERAGE_STASH_PATH = 'build/out/smoke-coverage.xml'
Line range hint
109-144
: Реализация логики покрытия.Добавлены новые переменные и условия для управления процессом покрытия в тестах. Это включает блокировку ресурсов, запуск и остановку процессов покрытия, а также условное сохранение данных о покрытии.
+def coverageOpts = config.coverageOptions +def port = options.dbgsPort +def lockableResource = RandomStringUtils.random(9, true, false) +if (options.coverage) { + lockableResource = "${env.NODE_NAME}_$port" +} +steps.lock(null, 1, lockableResource) { + if (options.coverage) { + steps.start("${coverageOpts.dbgsPath} --addr=127.0.0.1 --port=$port") + steps.start("${coverageOpts.coverage41CPath} start -i DefAlias -u http://127.0.0.1:$port -P $workspaceDir -s $srcDir -o $COVERAGE_STASH_PATH") + steps.cmd("${coverageOpts.coverage41CPath} check -i DefAlias -u http://127.0.0.1:$port") + } + steps.withEnv(logosConfig) { + VRunner.exec(command, true) + } + if (options.coverage) { + steps.cmd("${coverageOpts.coverage41CPath} stop -i DefAlias -u http://127.0.0.1:$port") + } +} +if (options.coverage) { + steps.stash(COVERAGE_STASH_NAME, COVERAGE_STASH_PATH, true) +}Эти изменения улучшают управление покрытием и его интеграцию в процесс тестирования.
test/unit/groovy/ru/pulsar/jenkins/library/configuration/ConfigurationReaderTest.java (1)
43-45
: Улучшение тестового покрытия.Добавлены новые утверждения для проверки путей и настроек покрытия в
jobConfiguration
. Это улучшает проверку конфигурации и соответствует изменениям в коде, связанным с покрытием.+assertThat(jobConfiguration.getCoverageOptions().getDbgsPath()).isEqualTo("/opt/1cv8/current/dbgs"); +assertThat(jobConfiguration.getCoverageOptions().getCoverage41CPath()).isEqualTo("Coverage41C"); +assertThat(jobConfiguration.getSmokeTestOptions().getCoverage()).isFalse(); +assertThat(jobConfiguration.getBddOptions().getCoverage()).isFalse();Эти изменения повышают надежность тестов за счет проверки новых аспектов конфигурации.
Also applies to: 59-59, 65-65
src/ru/pulsar/jenkins/library/StepExecutor.groovy (2)
75-78
: Добавлен метод startМетод
start
корректно делегирует выполнение скрипта. Это упрощает интеграцию и использование в различных частях Jenkins pipeline.
152-157
: Добавлен метод lockМетод
lock
использует замыкания для управления ресурсами, что является типичным подходом в Groovy и Jenkins. Однако, стоит убедиться, что использование замыканий и параметров соответствует лучшим практикам безопасности и управления ресурсами.Verification successful
Метод
lock
используется корректноИспользование метода
lock
в файлахBdd.groovy
,SmokeTest.groovy
иYaxunit.groovy
соответствует лучшим практикам управления ресурсами и безопасности. Замыкания выполняют команды в безопасном контексте, управляя переменными окружения и проверяя параметры покрытия.
Bdd.groovy
: Управление ресурсами и выполнение команд с проверкой покрытия.SmokeTest.groovy
: Использованиеsteps.withEnv
для управления переменными окружения.Yaxunit.groovy
: Аналогично, управление ресурсами и выполнение команд в безопасном контексте.Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash # Описание: Проверка использования метода lock в других частях кода. # Тест: Поиск использования метода lock. Ожидаем: Корректное использование замыканий. rg --type groovy -A 5 $'lock'Length of output: 6495
Script:
#!/bin/bash # Extract detailed information about the closures used with the lock method in the identified files. # Search for the lock method usage and extract more lines to understand the closure content. rg --type groovy -A 10 'steps.lock' src/ru/pulsar/jenkins/library/steps/Yaxunit.groovy src/ru/pulsar/jenkins/library/steps/SmokeTest.groovy src/ru/pulsar/jenkins/library/steps/Bdd.groovyLength of output: 3762
README.md (2)
27-28
: Уточнение требований к агентамДобавлены новые требования к агентам для замеров покрытия, что улучшает понимание необходимой конфигурации и инструментов. Особенно важно указание на необходимость установки Coverage41C и сервера отладки dbgs.
48-48
: Упоминание о замере покрытия при выполнении тестовДобавление этого пункта расширяет функциональность и подчеркивает возможности библиотеки в контексте измерения покрытия кода, что является значительным улучшением документации.
src/ru/pulsar/jenkins/library/IStepExecutor.groovy (2)
43-44
: Добавление метода startМетод
start
корректно расширяет функциональность интерфейса, позволяя выполнять скрипты в контексте исполнителя шагов. Это важное дополнение для управления процессами.
69-70
: Добавление метода lockМетод
lock
корректно добавлен для управления доступом к общим ресурсам. Параметры метода позволяют контролировать доступ к ресурсам с помощью метки, количества и ресурса, что является важным для сложных рабочих процессов. Предыдущий комментарий отnixel2007
указывает на возможное обсуждение сигнатуры метода, рекомендуется учесть это при дальнейшей разработке.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 2
♻️ Duplicate comments (6)
src/ru/pulsar/jenkins/library/utils/CoverageUtils.groovy (5)
11-33
:⚠️ Potential issueПроверьте и очистите входной параметр
name
для предотвращения уязвимостей безопасностиМетод
getPIDs
не проверяет входной параметрname
, что может привести к инъекции команд или ошибкам выполнения скрипта. Рекомендуется добавить проверкуname
наnull
или пустую строку, а также очистить входные данные, чтобы удалить небезопасные символы.Примените следующий дифф для решения проблемы:
+ if (name == null || name.trim().isEmpty()) { + throw new IllegalArgumentException("Имя процесса не может быть пустым") + } + String safeName = name.replaceAll("[^\\w\\-\\.\\s]", "")Вставьте этот код после объявления метода
getPIDs
и используйтеsafeName
вместоname
в скриптах.
35-47
:⚠️ Potential issueДобавьте проверку входных параметров и обработку возможных ошибок
В методе
prepareContext
отсутствует проверка наnull
для параметровconfig
иoptions
, что может привести кNullPointerException
. Рекомендуется добавить валидацию входных параметров и убедиться, что они корректны.Примените следующий дифф:
+ if (config == null || options == null) { + throw new IllegalArgumentException("Параметры config и options не могут быть null") + }Добавьте эту проверку в начале метода
prepareContext
.
60-62
: 🛠️ Refactor suggestionСделайте IP-адрес настраиваемым вместо использования жестко заданного
В данный момент IP-адрес
127.0.0.1
захардкожен в вызовах методовsteps.start
иsteps.cmd
. Рекомендуется вынести IP-адрес в конфигурацию, чтобы обеспечить большую гибкость и возможность использовать другой адрес при необходимости.Примените следующий дифф:
- steps.start(dbgsPath, "--addr=127.0.0.1 --port=${coverageContext.port}") + steps.start(dbgsPath, "--addr=${coverageOpts.host ?: '127.0.0.1'} --port=${coverageContext.port}")И аналогично для остальных мест, где используется
127.0.0.1
.
78-83
: 🛠️ Refactor suggestionДобавьте обработку исключений и настраиваемый IP-адрес в методе
stopCoverage
Метод
stopCoverage
не обрабатывает возможные исключения при выполнении команды и использует жестко заданный IP-адрес. Рекомендуется добавить обработку ошибок и сделать IP-адрес настраиваемым.Примените следующий дифф:
+ def host = coverageOpts.host ?: "127.0.0.1" + try { - steps.cmd("${coverageOpts.coverage41CPath} stop -i DefAlias -u http://127.0.0.1:$coverageContext.port") + steps.cmd("${coverageOpts.coverage41CPath} stop -i DefAlias -u http://${host}:$coverageContext.port") + } catch (Exception e) { + Logger.println("Ошибка при остановке покрытия: ${e.message}") + }
85-111
:⚠️ Potential issueОбеспечьте удаление временных файлов и обработку возможных ошибок
Метод
findDbgs
создает временные файлы, но не удаляет их после использования, что может привести к засорению файловой системы. Кроме того, отсутствует обработка исключений при работе с файлами. Рекомендуется добавить удаление временных файлов в блокеfinally
и обработку возможных ошибок.Примените следующий дифф:
+ try { def dbgsFindScript = steps.libraryResource("dbgs.os") steps.writeFile(dbgsFindScriptPath, dbgsFindScript, 'UTF-8') steps.cmd("oscript ${dbgsFindScriptPath} ${config.v8version} > ${dbgsPathResult}") dbgsPath = steps.readFile(dbgsPathResult).strip() + } finally { + try { + steps.deleteFile(dbgsFindScriptPath) + steps.deleteFile(dbgsPathResult) + } catch (Exception e) { + Logger.println("Ошибка при удалении временных файлов: ${e.message}") + } + }Это гарантирует, что временные файлы будут удалены независимо от того, произошла ошибка или нет.
src/ru/pulsar/jenkins/library/steps/Bdd.groovy (1)
40-55
: 🛠️ Refactor suggestionОбеспечьте корректное завершение покрытия при возникновении исключений
Если в блоке
steps.withCoverage
произойдет исключение, процессы покрытия могут остаться запущенными. Рекомендуется убедиться, что процессы будут корректно остановлены в случае ошибок.Проверьте, что внутри
withCoverage
используется конструкцияtry...finally
для гарантии остановки покрытия.
🧹 Nitpick comments (5)
src/ru/pulsar/jenkins/library/steps/Coverable.groovy (1)
3-10
: Добавьте документацию к интерфейсуCoverable
и его методамВ настоящее время интерфейс
Coverable
не содержит JavaDoc комментариев, что затрудняет понимание его назначения и использования. Рекомендуется добавить описание интерфейса и его методов для улучшения читаемости и поддержки кода.Пример:
/** * Интерфейс для шагов, поддерживающих замер покрытия кода. */ interface Coverable { /** * Получает уникальный идентификатор этапа. */ String getStageSlug(); /** * Получает путь для сохранения отчета покрытия. */ String getCoverageStashPath(); /** * Получает имя для хранения отчета покрытия. */ String getCoverageStashName(); /** * Получает путь к файлу с PID процессов покрытия. */ String getCoveragePidsPath(); }src/ru/pulsar/jenkins/library/steps/Bdd.groovy (2)
13-16
: Соблюдайте согласованность в именовании константИмена констант
ALLURE_STASH
,COVERAGE_STASH_NAME
,COVERAGE_STASH_PATH
иCOVERAGE_PIDS_PATH
должны быть согласованы по стилю и отражать их назначение. Рекомендуется придерживаться единого стиля именования и добавить комментарии к этим константам.Пример:
// Путь для сохранения отчетов Allure public static final String ALLURE_STASH = 'bdd-allure' // Имя хранилища для отчета покрытия public static final String COVERAGE_STASH_NAME = 'bdd-coverage' // Путь к файлу отчета покрытия public static final String COVERAGE_STASH_PATH = 'build/out/bdd-coverage.xml' // Путь к файлу с PID процессов покрытия public static final String COVERAGE_PIDS_PATH = 'build/bdd-pids'
64-78
: Добавьте аннотацию@Override
к реализуемым методам интерфейсаМетоды
getStageSlug
,getCoverageStashPath
,getCoverageStashName
иgetCoveragePidsPath
реализуют интерфейсCoverable
. Рекомендуется добавить аннотацию@Override
для повышения читаемости и соблюдения стандартов кода.Пример:
@Override String getStageSlug() { return "bdd" } @Override String getCoverageStashPath() { return COVERAGE_STASH_PATH } @Override String getCoverageStashName() { return COVERAGE_STASH_NAME } @Override String getCoveragePidsPath() { return COVERAGE_PIDS_PATH }src/ru/pulsar/jenkins/library/steps/WithCoverage.groovy (1)
26-29
: Оптимизируйте условную конструкцию для улучшения читаемостиВместо проверки отрицания условия
!coverageOptions.coverage
рекомендуется перестроить условие для улучшения читаемости кода.Пример:
if (coverageOptions.coverage) { // код с покрытием } else { body() return }Или перенести возврат в конец метода:
if (coverageOptions.coverage) { // код с покрытием } else { body() }src/ru/pulsar/jenkins/library/steps/Yaxunit.groovy (1)
50-54
: Рекомендуется параметризовать кодировку файлаЖестко заданная кодировка 'UTF-8' может вызвать проблемы в разных окружениях. Рекомендуется вынести её в конфигурацию.
- steps.writeFile(options.configPath, defaultYaxunitConfig, 'UTF-8') + steps.writeFile(options.configPath, defaultYaxunitConfig, config.fileEncoding ?: 'UTF-8')
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (6)
src/ru/pulsar/jenkins/library/steps/Bdd.groovy
(2 hunks)src/ru/pulsar/jenkins/library/steps/Coverable.groovy
(1 hunks)src/ru/pulsar/jenkins/library/steps/SmokeTest.groovy
(2 hunks)src/ru/pulsar/jenkins/library/steps/WithCoverage.groovy
(1 hunks)src/ru/pulsar/jenkins/library/steps/Yaxunit.groovy
(3 hunks)src/ru/pulsar/jenkins/library/utils/CoverageUtils.groovy
(1 hunks)
🔇 Additional comments (9)
src/ru/pulsar/jenkins/library/steps/Bdd.groovy (1)
59-61
: Стащируйте отчеты покрытия внутри блока покрытия
Метод steps.stash
для покрытия находится вне блока withCoverage
, что может привести к некорректному стащированию в случае ошибок. Рекомендуется переместить его внутрь withCoverage
.
Пример:
steps.withCoverage(config, this, options) {
// ...
steps.stash(COVERAGE_STASH_NAME, COVERAGE_STASH_PATH, true)
}
src/ru/pulsar/jenkins/library/steps/WithCoverage.groovy (1)
34-79
: Обеспечьте корректное управление ресурсами при использовании блокировки
Если покрытие не используется, блокировка ресурса все равно происходит, что может снизить производительность. Рекомендуется выполнять блокировку только при включенном покрытии.
Примените следующий дифф:
-steps.lock(context.lockableResource) {
+if (coverageOptions.coverage) {
+ steps.lock(context.lockableResource) {
// код с покрытием
+ }
+} else {
+ body()
+}
Это позволит избежать ненужной блокировки при отключенном покрытии.
src/ru/pulsar/jenkins/library/steps/Yaxunit.groovy (4)
11-20
: LGTM: Корректная реализация интерфейса Coverable
Реализация интерфейса и добавление констант для работы с покрытием кода выполнены правильно. Константы имеют правильную область видимости и следуют соглашениям об именовании.
70-72
: Необходимо обеспечить корректное завершение процессов покрытия
Текущая реализация может оставить процессы покрытия запущенными в случае ошибки выполнения тестов.
99-114
: LGTM: Корректная реализация методов интерфейса
Методы интерфейса Coverable реализованы корректно и возвращают правильные значения.
74-94
: 🛠️ Refactor suggestion
Добавьте проверку существования директорий перед операциями с файлами
Рекомендуется добавить создание директорий перед операциями с файлами для предотвращения ошибок.
+ steps.createDir(junitReportDir)
if (options.publishToJUnitReport) {
steps.junit("$junitReportDir/*.xml", true)
steps.archiveArtifacts("$junitReportDir/**")
}
if (options.publishToAllureReport) {
String allureReport = "./build/out/allure/yaxunit/junit.xml"
FilePath pathToAllureReport = FileUtils.getFilePath("$env.WORKSPACE/$allureReport")
String allureReportDir = FileUtils.getLocalPath(pathToAllureReport.getParent())
+ steps.createDir(allureReportDir)
Likely invalid or redundant comment.
src/ru/pulsar/jenkins/library/steps/SmokeTest.groovy (3)
12-17
: LGTM: Согласованная реализация с классом Yaxunit
Реализация интерфейса Coverable и константы для работы с покрытием соответствуют общему подходу в проекте.
108-110
: Необходимо обеспечить корректное завершение процессов покрытия
Аналогично классу Yaxunit, необходимо обеспечить корректное завершение процессов покрытия в случае ошибок.
128-137
: LGTM: Корректная реализация методов интерфейса
Методы интерфейса Coverable реализованы корректно и согласованы с реализацией в других классах.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 2
🧹 Nitpick comments (4)
README.md (3)
242-244
: Исправьте форматирование MarkdownДля улучшения читаемости и соответствия стандартам оформления:
- Исправьте отступы в списках (строки 242-244)
- Добавьте указание языка для блоков кода (строки 295, 304)
- * Добавить расширение `YAXUnit` и дополнительные расширения с тестами можно в `jobConfiguration.json` -> `initInfobase` -> `extensions`. Они будут загружены при инициализации ИБ. - * Если ваши тесты размещены в отдельных расширениях, скопируйте файл `./resources/yaxunit.json` из текущей библиотеки в свой репозиторий (`./tools/yaxunit.json`) и перечислите в нем имена ваших расширений. - * Если используется собственный файл `tools/yaxunit.json`, то значение параметра `reportPath` в нем должно быть равно `./build/out/yaxunit/junit.xml` +* Добавить расширение `YAXUnit` и дополнительные расширения с тестами можно в `jobConfiguration.json` -> `initInfobase` -> `extensions`. Они будут загружены при инициализации ИБ. +* Если ваши тесты размещены в отдельных расширениях, скопируйте файл `./resources/yaxunit.json` из текущей библиотеки в свой репозиторий (`./tools/yaxunit.json`) и перечислите в нем имена ваших расширений. +* Если используется собственный файл `tools/yaxunit.json`, то значение параметра `reportPath` в нем должно быть равно `./build/out/yaxunit/junit.xml` -``` +```json "default": { "--additional": "/debug -http -attach /debuggerURL http://localhost:1550" }Also applies to: 295-295, 304-304
🧰 Tools
🪛 Markdownlint (0.37.0)
242-242: Expected: 0; Actual: 2
Unordered list indentation(MD007, ul-indent)
243-243: Expected: 0; Actual: 2
Unordered list indentation(MD007, ul-indent)
244-244: Expected: 0; Actual: 2
Unordered list indentation(MD007, ul-indent)
261-262
: Дополните информацию о конфигурации портов для замеров покрытияНеобходимо добавить важные предупреждения:
- Укажите диапазон рекомендуемых портов
- Добавьте предупреждение о необходимости проверки доступности портов
- Опишите возможные проблемы при конфликте портов
* Чтобы замеры в `bdd`, `yaxunit`, `smoke` могли выполняться параллельно **на одном агенте**, необходимо указывать для них разные порты отладки в параметре `dbgsPort`. * Не забудьте настроить подключение клиентов тестирования к серверу отладки. +* **Важно**: При выборе портов учитывайте: + * Рекомендуемый диапазон портов: 1550-1560 + * Необходимость проверки доступности выбранного порта + * Возможные конфликты с другими процессами или параллельными сборками
254-254
: Улучшите структуру предложенияУпростите предложение, избегая избыточных определений:
- * oscript с библиотекой v8find, которая по умолчанию есть в составе дистрибутива oscript + * oscript с предустановленной библиотекой v8find из дистрибутива🧰 Tools
🪛 LanguageTool
[uncategorized] ~254-~254: Избыточные определения. В правильно составленном предложении не должно быть больше одного придаточного определения.
Context: ...ется: * oscript с библиотекой v8find, которая по умолчанию есть в составе дистрибутива oscript * сервер отладки dbgs, который есть в составе дистрибутива платформы 1...(OPREDELENIA)
src/ru/pulsar/jenkins/library/steps/SmokeTest.groovy (1)
14-14
: Рассмотрите переименование константы для согласованностиДля поддержания единого стиля именования констант, рекомендуется переименовать
ALLURE_STASH
вSMOKE_ALLURE_STASH
.
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (4)
README.md
(1 hunks)src/ru/pulsar/jenkins/library/steps/SmokeTest.groovy
(2 hunks)src/ru/pulsar/jenkins/library/steps/WithCoverage.groovy
(1 hunks)src/ru/pulsar/jenkins/library/steps/Yaxunit.groovy
(3 hunks)
🧰 Additional context used
🪛 LanguageTool
README.md
[uncategorized] ~254-~254: Избыточные определения. В правильно составленном предложении не должно быть больше одного придаточного определения.
Context: ...ется: * oscript с библиотекой v8find, которая по умолчанию есть в составе дистрибутива oscript * сервер отладки dbgs, который есть в составе дистрибутива платформы 1...
(OPREDELENIA)
🪛 Markdownlint (0.37.0)
README.md
242-242: Expected: 0; Actual: 2
Unordered list indentation
(MD007, ul-indent)
243-243: Expected: 0; Actual: 2
Unordered list indentation
(MD007, ul-indent)
244-244: Expected: 0; Actual: 2
Unordered list indentation
(MD007, ul-indent)
34-34: null
Bare URL used
(MD034, no-bare-urls)
55-55: null
Bare URL used
(MD034, no-bare-urls)
197-197: null
Bare URL used
(MD034, no-bare-urls)
295-295: null
Fenced code blocks should have a language specified
(MD040, fenced-code-language)
304-304: null
Fenced code blocks should have a language specified
(MD040, fenced-code-language)
🔇 Additional comments (4)
src/ru/pulsar/jenkins/library/steps/WithCoverage.groovy (1)
35-47
: Убедитесь, что метод stopCoverage вызывается даже при возникновении исключений
Если в процессе выполнения body()
произойдет исключение, метод stopCoverage
не будет вызван, что может привести к некорректному завершению процесса покрытия и возможным утечкам ресурсов. Рекомендуется использовать конструкцию try...finally
, чтобы гарантировать вызов stopCoverage()
независимо от возникновения исключений.
src/ru/pulsar/jenkins/library/steps/Yaxunit.groovy (2)
70-72
: Добавьте обработку ошибок при выполнении тестов с покрытием
Рекомендуется добавить блок try...catch
для корректной обработки ошибок при выполнении тестов с измерением покрытия.
75-92
: 🛠️ Refactor suggestion
Добавьте проверку наличия файлов отчётов перед их обработкой
Перед копированием или архивированием результатов тестирования рекомендуется убедиться, что файлы существуют. Это поможет избежать ошибок в случае отсутствия файлов.
Примените следующий дифф для добавления проверок:
+ if (!steps.fileExists(junitReport)) {
+ throw new Exception("Файл с результатами тестирования не найден: $junitReport")
+ }
FilePath pathToJUnitReport = FileUtils.getFilePath("$env.WORKSPACE/$junitReport")
Likely invalid or redundant comment.
src/ru/pulsar/jenkins/library/steps/SmokeTest.groovy (1)
108-110
: Добавьте обработку ошибок при выполнении тестов с покрытием
Рекомендуется добавить блок try...catch
для корректной обработки ошибок при выполнении тестов с измерением покрытия.
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 2
🧹 Nitpick comments (2)
src/ru/pulsar/jenkins/library/steps/WithCoverage.groovy (2)
45-47
: Улучшите сообщение об ошибкеТекущее сообщение об ошибке не содержит информации о контексте выполнения. Добавьте больше деталей для упрощения отладки.
Примените следующий дифф:
- Logger.println("При выполнении блока произошла ошибка: ${e.message}") + Logger.println("При выполнении блока '${stage.getStageSlug()}' произошла ошибка: ${e.message}") + Logger.println("Стек вызова: ${e.stackTrace.join('\n')}")
157-183
: Добавьте очистку временных файловВременные файлы
dbgsFindScriptPath
иdbgsPathResult
не удаляются после использования, что может привести к накоплению мусора в файловой системе.Добавьте очистку файлов после использования:
steps.cmd("oscript ${dbgsFindScriptPath} ${config.v8version} > ${dbgsPathResult}") dbgsPath = steps.readFile(dbgsPathResult).strip() + + // Очистка временных файлов + steps.cmd("rm -f ${dbgsFindScriptPath} ${dbgsPathResult}", false, false) if (dbgsPath.isEmpty()) { steps.error("Не удалось найти путь к dbgs")
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (1)
src/ru/pulsar/jenkins/library/steps/WithCoverage.groovy
(1 hunks)
🔇 Additional comments (1)
src/ru/pulsar/jenkins/library/steps/WithCoverage.groovy (1)
67-76
: Исправьте формирование команды taskkill для Windows
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 0
🧹 Nitpick comments (3)
README.md (3)
296-300
: Добавьте указание языка в блоках кодаДля улучшения читаемости документации добавьте спецификатор языка
json
в блоки кода:-``` +```jsonAlso applies to: 305-309
🧰 Tools
🪛 Markdownlint (0.37.0)
296-296: null
Fenced code blocks should have a language specified(MD040, fenced-code-language)
262-263
: Добавьте предупреждение о параллельном выполненииРекомендуется добавить явное предупреждение о том, что некорректная настройка портов может привести к конфликтам при параллельном выполнении тестов. Также стоит указать рекомендуемые диапазоны портов для разных типов тестов.
35-35
: Оформите URL-ссылки корректноЗамените "голые" URL-ссылки на корректно оформленные markdown-ссылки:
-https://github.com/firstBitMarksistskaya/onec-docker +[https://github.com/firstBitMarksistskaya/onec-docker](https://github.com/firstBitMarksistskaya/onec-docker)Also applies to: 56-56, 198-198
🧰 Tools
🪛 Markdownlint (0.37.0)
35-35: null
Bare URL used(MD034, no-bare-urls)
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (1)
README.md
(1 hunks)
🧰 Additional context used
🪛 LanguageTool
README.md
[uncategorized] ~255-~255: Избыточные определения. В правильно составленном предложении не должно быть больше одного придаточного определения.
Context: ...ется: * oscript с библиотекой v8find, которая по умолчанию есть в составе дистрибутива oscript * сервер отладки dbgs, который есть в составе дистрибутива платформы 1...
(OPREDELENIA)
🪛 Markdownlint (0.37.0)
README.md
243-243: Expected: 0; Actual: 2
Unordered list indentation
(MD007, ul-indent)
244-244: Expected: 0; Actual: 2
Unordered list indentation
(MD007, ul-indent)
245-245: Expected: 0; Actual: 2
Unordered list indentation
(MD007, ul-indent)
35-35: null
Bare URL used
(MD034, no-bare-urls)
56-56: null
Bare URL used
(MD034, no-bare-urls)
198-198: null
Bare URL used
(MD034, no-bare-urls)
296-296: null
Fenced code blocks should have a language specified
(MD040, fenced-code-language)
305-305: null
Fenced code blocks should have a language specified
(MD040, fenced-code-language)
🔇 Additional comments (1)
README.md (1)
254-259
: Рекомендуется расширить документацию по настройке Coverage41C
Предлагаю добавить следующую информацию:
- Минимальная требуемая версия Coverage41C
- Пошаговая инструкция по установке Coverage41C
- Типичные проблемы и их решения
🧰 Tools
🪛 LanguageTool
[uncategorized] ~255-~255: Избыточные определения. В правильно составленном предложении не должно быть больше одного придаточного определения.
Context: ...ется: * oscript с библиотекой v8find, которая по умолчанию есть в составе дистрибутива oscript * сервер отладки dbgs, который есть в составе дистрибутива платформы 1...
(OPREDELENIA)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 0
🧹 Nitpick comments (4)
README.md (4)
245-247
: Исправьте форматирование спискаДля улучшения читаемости документации необходимо исправить отступы в маркированном списке.
- * Добавить расширение `YAXUnit` и дополнительные расширения с тестами можно в `jobConfiguration.json` -> `initInfobase` -> `extensions`. Они будут загружены при инициализации ИБ. - * Если ваши тесты размещены в отдельных расширениях, скопируйте файл `./resources/yaxunit.json` из текущей библиотеки в свой репозиторий (`./tools/yaxunit.json`) и перечислите в нем имена ваших расширений. - * Если используется собственный файл `tools/yaxunit.json`, то значение параметра `reportPath` в нем должно быть равно `./build/out/yaxunit/junit.xml` +* Добавить расширение `YAXUnit` и дополнительные расширения с тестами можно в `jobConfiguration.json` -> `initInfobase` -> `extensions`. Они будут загружены при инициализации ИБ. +* Если ваши тесты размещены в отдельных расширениях, скопируйте файл `./resources/yaxunit.json` из текущей библиотеки в свой репозиторий (`./tools/yaxunit.json`) и перечислите в нем имена ваших расширений. +* Если используется собственный файл `tools/yaxunit.json`, то значение параметра `reportPath` в нем должно быть равно `./build/out/yaxunit/junit.xml`🧰 Tools
🪛 Markdownlint (0.37.0)
245-245: Expected: 0; Actual: 2
Unordered list indentation(MD007, ul-indent)
246-246: Expected: 0; Actual: 2
Unordered list indentation(MD007, ul-indent)
247-247: Expected: 0; Actual: 2
Unordered list indentation(MD007, ul-indent)
298-302
: Добавьте указание языка для блоков кодаДля правильной подсветки синтаксиса необходимо указать язык для блоков кода.
-``` +```json "default": { "--additional": "/debug -http -attach /debuggerURL http://localhost:1550" }-
+
json
"xunit": {
"--testclient-additional": "/debug -http -attach /debuggerURL http://localhost:1550"
}Also applies to: 307-311
🧰 Tools
🪛 Markdownlint (0.37.0)
298-298: null
Fenced code blocks should have a language specified(MD040, fenced-code-language)
37-37
: Оформите URL-адреса как markdown-ссылкиДля улучшения читаемости и соответствия стандартам markdown необходимо оформить URL-адреса как ссылки.
-https://github.com/firstBitMarksistskaya/onec-docker +[https://github.com/firstBitMarksistskaya/onec-docker](https://github.com/firstBitMarksistskaya/onec-docker) -https://jenkins.io/doc/book/pipeline/shared-libraries/#using-libraries +[https://jenkins.io/doc/book/pipeline/shared-libraries/#using-libraries](https://jenkins.io/doc/book/pipeline/shared-libraries/#using-libraries) -https://github.com/bia-technologies/yaxunit/releases/download/23.05/YAXUNIT-23.05.cfe +[https://github.com/bia-technologies/yaxunit/releases/download/23.05/YAXUNIT-23.05.cfe](https://github.com/bia-technologies/yaxunit/releases/download/23.05/YAXUNIT-23.05.cfe)Also applies to: 58-58, 200-200
🧰 Tools
🪛 Markdownlint (0.37.0)
37-37: null
Bare URL used(MD034, no-bare-urls)
256-261
: Уточните требования к версиям компонентовВ разделе о сборе замеров покрытия рекомендуется:
- Указать минимальную поддерживаемую версию Coverage41C
- Добавить информацию о совместимости с различными версиями EDT
- Упростить структуру предложений для улучшения читаемости
Хотите, чтобы я подготовил обновленный текст этого раздела?
🧰 Tools
🪛 LanguageTool
[uncategorized] ~257-~257: Избыточные определения. В правильно составленном предложении не должно быть больше одного придаточного определения.
Context: ...ется: * oscript с библиотекой v8find, которая по умолчанию есть в составе дистрибутива oscript * сервер отладки dbgs, который есть в составе дистрибутива платформы 1...(OPREDELENIA)
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (1)
README.md
(1 hunks)
🧰 Additional context used
🪛 LanguageTool
README.md
[uncategorized] ~257-~257: Избыточные определения. В правильно составленном предложении не должно быть больше одного придаточного определения.
Context: ...ется: * oscript с библиотекой v8find, которая по умолчанию есть в составе дистрибутива oscript * сервер отладки dbgs, который есть в составе дистрибутива платформы 1...
(OPREDELENIA)
🪛 Markdownlint (0.37.0)
README.md
245-245: Expected: 0; Actual: 2
Unordered list indentation
(MD007, ul-indent)
246-246: Expected: 0; Actual: 2
Unordered list indentation
(MD007, ul-indent)
247-247: Expected: 0; Actual: 2
Unordered list indentation
(MD007, ul-indent)
37-37: null
Bare URL used
(MD034, no-bare-urls)
58-58: null
Bare URL used
(MD034, no-bare-urls)
200-200: null
Bare URL used
(MD034, no-bare-urls)
298-298: null
Fenced code blocks should have a language specified
(MD040, fenced-code-language)
307-307: null
Fenced code blocks should have a language specified
(MD040, fenced-code-language)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 0
🧹 Nitpick comments (4)
README.md (4)
254-266
: Улучшить структуру раздела о замерах покрытияРекомендуется реорганизовать раздел следующим образом:
- Вынести требования к агентам в отдельный подраздел
- Сгруппировать настройки параметров конфигурации
- Добавить информацию о минимальной версии Coverage41C
🧰 Tools
🪛 LanguageTool
[uncategorized] ~257-~257: Избыточные определения. В правильно составленном предложении не должно быть больше одного придаточного определения.
Context: ...ется: * oscript с библиотекой v8find, которая по умолчанию есть в составе дистрибутива oscript * сервер отладки dbgs, который есть в составе дистрибутива платформы 1...(OPREDELENIA)
298-302
: Добавить указание языка для блоков кодаНеобходимо указать язык для блоков кода конфигурации:
-``` +```jsonAlso applies to: 307-311
🧰 Tools
🪛 Markdownlint (0.37.0)
298-298: null
Fenced code blocks should have a language specified(MD040, fenced-code-language)
37-37
: Оформить URL-адреса как markdown-ссылкиЗаменить "голые" URL-адреса на корректно оформленные markdown-ссылки:
-https://github.com/firstBitMarksistskaya/onec-docker +[https://github.com/firstBitMarksistskaya/onec-docker](https://github.com/firstBitMarksistskaya/onec-docker) -https://jenkins.io/doc/book/pipeline/shared-libraries/#using-libraries +[https://jenkins.io/doc/book/pipeline/shared-libraries/#using-libraries](https://jenkins.io/doc/book/pipeline/shared-libraries/#using-libraries) -https://github.com/bia-technologies/yaxunit/releases/download/23.05/YAXUNIT-23.05.cfe +[https://github.com/bia-technologies/yaxunit/releases/download/23.05/YAXUNIT-23.05.cfe](https://github.com/bia-technologies/yaxunit/releases/download/23.05/YAXUNIT-23.05.cfe)Also applies to: 58-58, 200-200
🧰 Tools
🪛 Markdownlint (0.37.0)
37-37: null
Bare URL used(MD034, no-bare-urls)
245-247
: Исправить отступы в спискеНеобходимо использовать единообразные отступы для всех элементов списка в разделе YAXUnit:
- * Добавить расширение `YAXUnit` и дополнительные расширения с тестами можно в `jobConfiguration.json` -> `initInfobase` -> `extensions`. Они будут загружены при инициализации ИБ. - * Если ваши тесты размещены в отдельных расширениях, скопируйте файл `./resources/yaxunit.json` из текущей библиотеки в свой репозиторий (`./tools/yaxunit.json`) и перечислите в нем имена ваших расширений. - * Если используется собственный файл `tools/yaxunit.json`, то значение параметра `reportPath` в нем должно быть равно `./build/out/yaxunit/junit.xml` +* Добавить расширение `YAXUnit` и дополнительные расширения с тестами можно в `jobConfiguration.json` -> `initInfobase` -> `extensions`. Они будут загружены при инициализации ИБ. +* Если ваши тесты размещены в отдельных расширениях, скопируйте файл `./resources/yaxunit.json` из текущей библиотеки в свой репозиторий (`./tools/yaxunit.json`) и перечислите в нем имена ваших расширений. +* Если используется собственный файл `tools/yaxunit.json`, то значение параметра `reportPath` в нем должно быть равно `./build/out/yaxunit/junit.xml`🧰 Tools
🪛 Markdownlint (0.37.0)
245-245: Expected: 0; Actual: 2
Unordered list indentation(MD007, ul-indent)
246-246: Expected: 0; Actual: 2
Unordered list indentation(MD007, ul-indent)
247-247: Expected: 0; Actual: 2
Unordered list indentation(MD007, ul-indent)
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (1)
README.md
(1 hunks)
🧰 Additional context used
🪛 LanguageTool
README.md
[uncategorized] ~257-~257: Избыточные определения. В правильно составленном предложении не должно быть больше одного придаточного определения.
Context: ...ется: * oscript с библиотекой v8find, которая по умолчанию есть в составе дистрибутива oscript * сервер отладки dbgs, который есть в составе дистрибутива платформы 1...
(OPREDELENIA)
🪛 Markdownlint (0.37.0)
README.md
245-245: Expected: 0; Actual: 2
Unordered list indentation
(MD007, ul-indent)
246-246: Expected: 0; Actual: 2
Unordered list indentation
(MD007, ul-indent)
247-247: Expected: 0; Actual: 2
Unordered list indentation
(MD007, ul-indent)
37-37: null
Bare URL used
(MD034, no-bare-urls)
58-58: null
Bare URL used
(MD034, no-bare-urls)
200-200: null
Bare URL used
(MD034, no-bare-urls)
298-298: null
Fenced code blocks should have a language specified
(MD040, fenced-code-language)
307-307: null
Fenced code blocks should have a language specified
(MD040, fenced-code-language)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 1
♻️ Duplicate comments (1)
src/ru/pulsar/jenkins/library/steps/Yaxunit.groovy (1)
70-72
:⚠️ Potential issueНеобходима обработка ошибок при выполнении тестов
Текущая реализация не обрабатывает ошибки выполнения тестов в блоке withCoverage.
steps.withCoverage(config, this, options) { - VRunner.exec(runTestsCommand, true) + try { + VRunner.exec(runTestsCommand, true) + } catch (Exception e) { + Logger.println("Ошибка при выполнении тестов: ${e.message}") + throw e + } }
🧹 Nitpick comments (5)
test/unit/groovy/ru/pulsar/jenkins/library/utils/EnvUtils.java (2)
12-12
: Добавьте документацию для нового поляРеализация соответствует существующему паттерну класса. Рекомендуется добавить документацию, поясняющую назначение поля в контексте тестирования покрытия кода.
Предлагаемые изменения:
+ /** + * Имя ветки, используемое в тестовом окружении. + * Применяется при настройке измерения покрытия кода. + */ public String BRANCH_NAME = "master";
12-12
: Рассмотрите использование "main" вместо "master"В современной практике многие репозитории используют "main" как название основной ветки вместо "master". Возможно, стоит обновить значение по умолчанию для соответствия текущим тенденциям.
- public String BRANCH_NAME = "master"; + public String BRANCH_NAME = "main";src/JobConfigurationSchemaGenerator.java (1)
18-18
: Улучшите обработку исключенийУдаление
throws Exception
- это хорошая практика, но рекомендуется добавить обработкуRuntimeException
для повышения надежности приложения.public static void main(String[] args) { + try { SchemaGeneratorConfigBuilder configBuilder = new SchemaGeneratorConfigBuilder(SchemaVersion.DRAFT_7, OptionPreset.PLAIN_JSON) .with(new JacksonModule(JacksonOption.FLATTENED_ENUMS_FROM_JSONVALUE, JacksonOption.FLATTENED_ENUMS_FROM_JSONPROPERTY)); // ... rest of the code ... + } catch (RuntimeException e) { + System.err.println("Ошибка при генерации схемы: " + e.getMessage()); + e.printStackTrace(); + System.exit(1); + }src/ru/pulsar/jenkins/library/steps/Yaxunit.groovy (2)
11-11
: Рекомендации по улучшению именования константДля улучшения читаемости и поддерживаемости кода предлагаю:
- Добавить префикс DEFAULT_ к константе YAXUNIT_ALLURE_STASH для консистентности
- Сгруппировать связанные константы в отдельный блок с комментариями
- public static final String YAXUNIT_ALLURE_STASH = 'yaxunit-allure' - public static final String COVERAGE_STASH_NAME = 'yaxunit-coverage' - public static final String COVERAGE_STASH_PATH = 'build/out/yaxunit-coverage.xml' - public static final String COVERAGE_PIDS_PATH = 'build/yaxunit-pids' + // Константы для Allure отчетов + public static final String DEFAULT_YAXUNIT_ALLURE_STASH = 'yaxunit-allure' + + // Константы для измерения покрытия кода + public static final String COVERAGE_STASH_NAME = 'yaxunit-coverage' + public static final String COVERAGE_STASH_PATH = 'build/out/yaxunit-coverage.xml' + public static final String COVERAGE_PIDS_PATH = 'build/yaxunit-pids'Also applies to: 15-15, 18-20
97-115
: Добавьте документацию к методам интерфейсаРекомендуется добавить документацию к реализованным методам интерфейса для улучшения поддерживаемости кода.
+ /** + * Возвращает идентификатор этапа для использования в путях и именах файлов + * @return Строковый идентификатор этапа + */ @Override String getStageSlug() { return "yaxunit" } + /** + * Возвращает путь к файлу с данными покрытия кода + * @return Путь к файлу покрытия + */ @Override String getCoverageStashPath() { return COVERAGE_STASH_PATH } + /** + * Возвращает имя stash для сохранения данных покрытия + * @return Имя stash + */ @Override String getCoverageStashName() { return COVERAGE_STASH_NAME } + /** + * Возвращает путь к файлу с идентификаторами процессов покрытия + * @return Путь к файлу с PID + */ @Override String getCoveragePidsPath() { return COVERAGE_PIDS_PATH }
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
⛔ Files ignored due to path filters (2)
resources/schema.json
is excluded by!**/*.json
test/unit/resources/jobConfiguration.json
is excluded by!**/*.json
📒 Files selected for processing (7)
.gitattributes
(1 hunks)src/JobConfigurationSchemaGenerator.java
(1 hunks)src/ru/pulsar/jenkins/library/steps/Bdd.groovy
(2 hunks)src/ru/pulsar/jenkins/library/steps/SmokeTest.groovy
(2 hunks)src/ru/pulsar/jenkins/library/steps/Yaxunit.groovy
(3 hunks)test/unit/groovy/ru/pulsar/jenkins/library/configuration/ConfigurationReaderTest.java
(3 hunks)test/unit/groovy/ru/pulsar/jenkins/library/utils/EnvUtils.java
(1 hunks)
🚧 Files skipped from review as they are similar to previous changes (3)
- .gitattributes
- test/unit/groovy/ru/pulsar/jenkins/library/configuration/ConfigurationReaderTest.java
- src/ru/pulsar/jenkins/library/steps/Bdd.groovy
🔇 Additional comments (7)
src/JobConfigurationSchemaGenerator.java (2)
Line range hint 31-34
: Укажите кодировку при записи файла
FileWriter
использует системную кодировку по умолчанию, что может привести к некорректному отображению символов на разных системах.
Line range hint 20-29
: Проверьте генерацию полей покрытия в схеме
Убедитесь, что новые поля для измерения покрытия кода корректно отражены в генерируемой JSON-схеме.
✅ Verification successful
Поля покрытия корректно отражены в JSON-схеме
Проверка показала, что:
- В
JobConfiguration
присутствует полеcoverageOptions
с аннотацией@JsonProperty("coverage")
- В сгенерированной схеме корректно определены все необходимые поля для настройки покрытия:
coverage41CPath
с описанием и типомdbgsPath
с описанием и типом
- Иерархия классов покрытия (
GlobalCoverageOptions
,StepCoverageOptions
) правильно отражена в схеме
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# Проверяем наличие полей покрытия в JobConfiguration
ast-grep --pattern 'class JobConfiguration {
$$$
@JsonProperty("coverage")
$$$
}'
# Проверяем сгенерированную схему на наличие определений для покрытия
if [ -f "./resources/schema.json" ]; then
cat "./resources/schema.json" | jq '.definitions | keys[] | select(contains("Coverage"))'
fi
Length of output: 216
Script:
#!/bin/bash
# Поиск класса JobConfiguration и его полей
rg -A 20 "class JobConfiguration"
# Поиск всех файлов schema.json в проекте
fd "schema.json"
# Поиск упоминаний coverage в контексте конфигурации
rg -i "coverage" --type java
Length of output: 5066
Script:
#!/bin/bash
# Поиск определений классов с полями coverage
rg -A 10 "class.*Coverage" --type groovy
# Поиск полей coverage в JobConfiguration
rg -B 5 -A 2 "@JsonProperty.*coverage" src/ru/pulsar/jenkins/library/configuration/JobConfiguration.groovy
# Проверка содержимого schema.json
cat resources/schema.json | jq '.properties.coverage, .properties.coverageOptions'
Length of output: 8835
src/ru/pulsar/jenkins/library/steps/SmokeTest.groovy (3)
12-17
: Реализация интерфейса Coverable и константы выглядят корректно
Добавление интерфейса Coverable и связанных констант соответствует общей архитектуре проекта. Константы следуют единому стилю именования, используемому в других классах (Bdd, Yaxunit).
108-110
: Проверьте корректное завершение процессов покрытия
Хотя использование withCoverage
корректно, убедитесь, что метод правильно завершает процессы покрытия в случае исключений.
#!/bin/bash
# Проверка обработки исключений в withCoverage
ast-grep --pattern 'withCoverage($_, $_, $_) {
$$$
finally {
$$$
}
}'
124-141
: Корректная реализация методов интерфейса Coverable
Методы реализованы правильно, возвращаемые значения соответствуют константам класса. Значение "smoke" в getStageSlug() корректно для данного класса.
src/ru/pulsar/jenkins/library/steps/Yaxunit.groovy (2)
84-92
: 🛠️ Refactor suggestion
Улучшите обработку Allure отчетов
Необходимо создать директорию перед копированием файла и проверить успешность операции.
if (options.publishToAllureReport) {
String allureReport = "./build/out/allure/yaxunit/junit.xml"
FilePath pathToAllureReport = FileUtils.getFilePath("$env.WORKSPACE/$allureReport")
String allureReportDir = FileUtils.getLocalPath(pathToAllureReport.getParent())
+ steps.dir(allureReportDir) {
+ steps.sh "mkdir -p ."
+ }
pathToJUnitReport.copyTo(pathToAllureReport)
+ if (!steps.fileExists(allureReport)) {
+ throw new Exception("Не удалось скопировать файл отчета в $allureReport")
+ }
steps.stash(YAXUNIT_ALLURE_STASH, "$allureReportDir/**", true)
}
Likely invalid or redundant comment.
74-82
:
Добавьте проверку существования файлов перед обработкой
Необходимо проверять наличие файлов отчетов перед их обработкой.
// Сохраняем результаты
String junitReport = "./build/out/yaxunit/junit.xml"
+ if (!steps.fileExists(junitReport)) {
+ throw new Exception("Не найден файл с результатами тестирования: $junitReport")
+ }
FilePath pathToJUnitReport = FileUtils.getFilePath("$env.WORKSPACE/$junitReport")
String junitReportDir = FileUtils.getLocalPath(pathToJUnitReport.getParent())
if (options.publishToJUnitReport) {
steps.junit("$junitReportDir/*.xml", true)
- steps.archiveArtifacts("$junitReportDir/**")
+ if (steps.findFiles(glob: "$junitReportDir/**").length > 0) {
+ steps.archiveArtifacts("$junitReportDir/**")
+ } else {
+ Logger.println("Предупреждение: Не найдены артефакты для архивации в $junitReportDir")
+ }
}
Likely invalid or redundant comment.
No description provided.