Skip to content
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

Merged
merged 111 commits into from
Dec 19, 2024

Conversation

ovcharenko-di
Copy link
Contributor

No description provided.

@ovcharenko-di ovcharenko-di changed the title Feature/coverage Замер покрытия Jun 3, 2023
@ovcharenko-di
Copy link
Contributor Author

closes #39

@ovcharenko-di
Copy link
Contributor Author

@nixel2007 вроде как все отработал, на своих проектах проверил

@nixel2007
Copy link
Member

Ох, до сюда бы ещё добраться...

Copy link
Contributor

coderabbitai bot commented Aug 25, 2024

Walkthrough

Этот pull request представляет собой значительное обновление библиотеки Jenkins для 1C:Enterprise 8, фокусирующееся на добавлении функциональности измерения покрытия кода. Изменения включают создание новых классов, интерфейсов и методов для поддержки измерения покрытия в различных тестовых сценариях, таких как BDD, smoke-тесты и Yaxunit. Обновлена конфигурация, добавлены новые опции для настройки покрытия и улучшена общая структура библиотеки.

Changes

Файл Изменения
.gitattributes Добавлены правила для JSON, Markdown и OS файлов с окончанием строк LF
README.md Расширена документация, добавлены требования к измерению покрытия
src/ru/pulsar/jenkins/library/configuration/* Введены новые классы и опции для управления покрытием кода
src/ru/pulsar/jenkins/library/steps/* Обновлены классы тестовых шагов с поддержкой измерения покрытия
vars/withCoverage.groovy Добавлен новый глобальный метод для работы с покрытием
vars/start.groovy Добавлен новый глобальный метод для запуска исполняемых файлов
resources/dbgs.os Добавлен вызов метода для получения пути к ресурсу DBGS
src/ru/pulsar/jenkins/library/IStepExecutor.groovy Добавлены новые методы для управления исполнением шагов
src/ru/pulsar/jenkins/library/StepExecutor.groovy Реализованы новые методы для управления исполнением шагов
src/ru/pulsar/jenkins/library/steps/Coverable.groovy Добавлен новый интерфейс для управления покрытием
src/ru/pulsar/jenkins/library/steps/WithCoverage.groovy Добавлен класс для управления шагами с покрытием
src/ru/pulsar/jenkins/library/steps/Start.groovy Добавлен класс для запуска исполняемых файлов

Possibly related PRs

Poem

🐰 Кролик-разработчик пишет оду покрытию:
В мире кода, где строки текут,
Покрытие – наш верный редут!
Тесты пляшут, метрики поют,
Качество кода бережно несут!
Jenkins, будь со мной! 🚀

Tip

CodeRabbit's docstrings feature is now available as part of our Early Access Program! Simply use the command @coderabbitai generate docstrings to have CodeRabbit automatically generate docstrings for your pull request. We would love to hear your feedback on Discord.


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?

❤️ Share
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Generate unit testing code for this file.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai generate unit testing code for this file.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read src/utils.ts and generate unit testing code.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

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)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai generate docstrings to generate docstrings for this PR. (Beta)
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

Copy link
Contributor

@coderabbitai coderabbitai bot left a 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

Commits

Files that changed from the base of the PR and between a5613f4 and ed17c4b.

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: Добавление новой функциональности замера покрытия.

Документация теперь включает информацию о возможности замера покрытия при выполнении тестов, что является значимым улучшением для отслеживания качества кода.

vars/start.groovy Outdated Show resolved Hide resolved
@ovcharenko-di
Copy link
Contributor Author

@nixel2007 сделал rebase ветки, заодно затащил замер покрытия в шаг yaxunit. У себя проверил, работает.

resources/schema.json Outdated Show resolved Hide resolved
Copy link
Contributor

@coderabbitai coderabbitai bot left a 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

Commits

Files that changed from the base of the PR and between ed17c4b and 8f948c2.

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.groovy

Length 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 указывает на возможное обсуждение сигнатуры метода, рекомендуется учесть это при дальнейшей разработке.

src/ru/pulsar/jenkins/library/steps/Yaxunit.groovy Outdated Show resolved Hide resolved
Copy link
Contributor

@coderabbitai coderabbitai bot left a 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

📥 Commits

Reviewing files that changed from the base of the PR and between 25dc5e4 and ba1dd46.

📒 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 реализованы корректно и согласованы с реализацией в других классах.

src/ru/pulsar/jenkins/library/steps/WithCoverage.groovy Outdated Show resolved Hide resolved
src/ru/pulsar/jenkins/library/steps/SmokeTest.groovy Outdated Show resolved Hide resolved
README.md Show resolved Hide resolved
Copy link
Contributor

@coderabbitai coderabbitai bot left a 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

Для улучшения читаемости и соответствия стандартам оформления:

  1. Исправьте отступы в списках (строки 242-244)
  2. Добавьте указание языка для блоков кода (строки 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: Дополните информацию о конфигурации портов для замеров покрытия

Необходимо добавить важные предупреждения:

  1. Укажите диапазон рекомендуемых портов
  2. Добавьте предупреждение о необходимости проверки доступности портов
  3. Опишите возможные проблемы при конфликте портов
 * Чтобы замеры в `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

📥 Commits

Reviewing files that changed from the base of the PR and between 28e38ba and bcc368c.

📒 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 для корректной обработки ошибок при выполнении тестов с измерением покрытия.

README.md Show resolved Hide resolved
src/ru/pulsar/jenkins/library/steps/WithCoverage.groovy Outdated Show resolved Hide resolved
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
Copy link
Contributor

@coderabbitai coderabbitai bot left a 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

📥 Commits

Reviewing files that changed from the base of the PR and between bcc368c and 92bff7a.

📒 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

Copy link
Contributor

@coderabbitai coderabbitai bot left a 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 в блоки кода:

-```
+```json

Also 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

📥 Commits

Reviewing files that changed from the base of the PR and between 92bff7a and 1650db1.

📒 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)

Copy link
Contributor

@coderabbitai coderabbitai bot left a 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: Уточните требования к версиям компонентов

В разделе о сборе замеров покрытия рекомендуется:

  1. Указать минимальную поддерживаемую версию Coverage41C
  2. Добавить информацию о совместимости с различными версиями EDT
  3. Упростить структуру предложений для улучшения читаемости

Хотите, чтобы я подготовил обновленный текст этого раздела?

🧰 Tools
🪛 LanguageTool

[uncategorized] ~257-~257: Избыточные определения. В правильно составленном предложении не должно быть больше одного придаточного определения.
Context: ...ется: * oscript с библиотекой v8find, которая по умолчанию есть в составе дистрибутива oscript * сервер отладки dbgs, который есть в составе дистрибутива платформы 1...

(OPREDELENIA)

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 1650db1 and 8d98e1d.

📒 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)

Copy link
Contributor

@coderabbitai coderabbitai bot left a 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: Улучшить структуру раздела о замерах покрытия

Рекомендуется реорганизовать раздел следующим образом:

  1. Вынести требования к агентам в отдельный подраздел
  2. Сгруппировать настройки параметров конфигурации
  3. Добавить информацию о минимальной версии Coverage41C
🧰 Tools
🪛 LanguageTool

[uncategorized] ~257-~257: Избыточные определения. В правильно составленном предложении не должно быть больше одного придаточного определения.
Context: ...ется: * oscript с библиотекой v8find, которая по умолчанию есть в составе дистрибутива oscript * сервер отладки dbgs, который есть в составе дистрибутива платформы 1...

(OPREDELENIA)


298-302: Добавить указание языка для блоков кода

Необходимо указать язык для блоков кода конфигурации:

-```
+```json

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-ссылки

Заменить "голые" 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

📥 Commits

Reviewing files that changed from the base of the PR and between 8d98e1d and fd34d56.

📒 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)

Copy link
Contributor

@coderabbitai coderabbitai bot left a 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: Рекомендации по улучшению именования констант

Для улучшения читаемости и поддерживаемости кода предлагаю:

  1. Добавить префикс DEFAULT_ к константе YAXUNIT_ALLURE_STASH для консистентности
  2. Сгруппировать связанные константы в отдельный блок с комментариями
-    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

📥 Commits

Reviewing files that changed from the base of the PR and between fd34d56 and 42bbfc7.

⛔ 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: ⚠️ Potential issue

Добавьте проверку существования файлов перед обработкой

Необходимо проверять наличие файлов отчетов перед их обработкой.

             // Сохраняем результаты
             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.

@nixel2007 nixel2007 merged commit 4f98e66 into firstBitMarksistskaya:develop Dec 19, 2024
2 checks passed
@ovcharenko-di ovcharenko-di deleted the feature/coverage branch December 21, 2024 11:03
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants