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

Публикация результатов синтаксического контроля в Allure #148

Conversation

ovcharenko-di
Copy link
Contributor

fixes #142

Заодно перенес код из vars в отдельный класс, + унифицировал параметры и последовательность выполнения с другими этапами.

Я решил, что для той же пресловутой унификации правильнее будет не передавать в Allure результаты jUnit , а сразу выполнять команду vrunner syntax-check с параметром --allure-results2.

Copy link
Contributor

coderabbitai bot commented Jan 17, 2025

Important

Review skipped

Review was skipped due to path filters

⛔ Files ignored due to path filters (1)
  • resources/schema.json is excluded by !**/*.json

CodeRabbit blocks several paths by default. You can override this behavior by explicitly including those paths in the path filters. For example, including **/dist/** will override the default block on the dist directory, by removing the pattern from both the lists.

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Walkthrough

В этом обновлении представлены изменения, связанные с улучшением процесса синтаксического контроля в Jenkins-библиотеке. Основные модификации включают обновление версии библиотеки jsonschema, введение новых опций для публикации отчетов, создание нового класса SyntaxCheck и реорганизацию pipeline для более четкой структуры выполнения этапов.

Changes

Файл Изменения
build.gradle.kts Обновление версии jsonschema с 4.36.0 до 4.37.0
SyntaxCheckOptions.groovy Удаление pathToJUnitReport, добавление publishToAllureReport и publishToJUnitReport
PublishAllure.groovy Добавление условной проверки для публикации Allure-отчета
SyntaxCheck.groovy Создание нового класса для выполнения синтаксического контроля
pipeline1C.groovy Реорганизация этапа синтаксического контроля с добавлением подэтапа распаковки ИБ
syntaxCheck.groovy Рефакторинг с использованием нового класса SyntaxCheck

Assessment against linked issues

Objective Addressed Explanation
Формирование отчета в Allure для синтаксического контроля [#142]

Poem

🐰 Кролик-программист в восторге скачет,
Синтаксис проверен, код не плачет!
Allure сияет, JUnit доволен,
Библиотека обновлена, код свободен!
Hop-hey, технический прогресс! 🚀


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: 1

🧹 Nitpick comments (3)
src/ru/pulsar/jenkins/library/configuration/SyntaxCheckOptions.groovy (1)

5-5: Проверка необходимости импорта JsonInclude

Импорт com.fasterxml.jackson.annotation.JsonInclude добавлен, но не используется в данном классе. Рекомендуется удалить неиспользуемый импорт для поддержания чистоты кода.

src/ru/pulsar/jenkins/library/steps/SyntaxCheck.groovy (2)

35-46: Рекомендуется упростить создание путей для отчетов

Наблюдается дублирование кода при создании путей для JUnit и Allure отчетов. Рекомендуется вынести общую логику в отдельный метод.

Предлагаемый рефакторинг:

+    private String setupReportPath(String basePath, String reportType) {
+        FilePath pathToReport = FileUtils.getFilePath("$env.WORKSPACE/$basePath")
+        return FileUtils.getLocalPath(pathToReport.getParent())
+    }
+
     def run() {
         // ... existing code ...
-        String junitReport = "build/out/jUnit/syntax-check/syntax-check.xml"
-        FilePath pathToJUnitReport = FileUtils.getFilePath("$env.WORKSPACE/$junitReport")
-        String junitReportDir = FileUtils.getLocalPath(pathToJUnitReport.getParent())
+        String junitReportDir = setupReportPath("build/out/jUnit/syntax-check/syntax-check.xml", "junit")
 
-        String allureReport = "build/out/allure/syntax-check/allure.xml"
-        FilePath pathToAllureReport = FileUtils.getFilePath("$env.WORKSPACE/$allureReport")
-        String allureReportDir = FileUtils.getLocalPath(pathToAllureReport.getParent())
+        String allureReportDir = setupReportPath("build/out/allure/syntax-check/allure.xml", "allure")

47-80: Рекомендуется улучшить построение команды

Текущая реализация построения команды через конкатенацию строк может быть улучшена использованием StringBuilder или списка параметров.

Предлагаемый рефакторинг:

+    private List<String> buildCommandParameters(String vrunnerPath) {
+        List<String> params = []
+        params.add(vrunnerPath)
+        params.add("syntax-check")
+        params.add("--ibconnection \"/F./build/ib\"")
+        
+        if (options.groupErrorsByMetadata) {
+            params.add("--groupbymetadata")
+        }
+        // ... остальные параметры
+        return params
+    }
+
     def run() {
         // ... existing code ...
-        String command = "$vrunnerPath syntax-check --ibconnection \"/F./build/ib\""
-        if (options.groupErrorsByMetadata) {
-            command += ' --groupbymetadata'
-        }
-        // ... остальные условия
+        List<String> commandParams = buildCommandParameters(vrunnerPath)
+        String command = commandParams.join(" ")
📜 Review details

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

📥 Commits

Reviewing files that changed from the base of the PR and between 89e104f and 17020ef.

⛔ Files ignored due to path filters (2)
  • resources/globalConfiguration.json is excluded by !**/*.json
  • resources/schema.json is excluded by !**/*.json
📒 Files selected for processing (6)
  • build.gradle.kts (1 hunks)
  • src/ru/pulsar/jenkins/library/configuration/SyntaxCheckOptions.groovy (2 hunks)
  • src/ru/pulsar/jenkins/library/steps/PublishAllure.groovy (1 hunks)
  • src/ru/pulsar/jenkins/library/steps/SyntaxCheck.groovy (1 hunks)
  • vars/pipeline1C.groovy (1 hunks)
  • vars/syntaxCheck.groovy (1 hunks)
⏰ Context from checks skipped due to timeout of 90000ms (1)
  • GitHub Check: build
🔇 Additional comments (10)
vars/syntaxCheck.groovy (2)

3-3: Подтверждение импорта нового класса

Импорт класса SyntaxCheck из пакета ru.pulsar.jenkins.library.steps выполнен корректно и соответствует рефакторингу кода.


9-10: Рефакторинг вызова синтаксической проверки

Использование объекта SyntaxCheck для выполнения синтаксической проверки улучшает модульность и читаемость кода.

src/ru/pulsar/jenkins/library/configuration/SyntaxCheckOptions.groovy (2)

31-41: Добавление опций для управления публикацией отчетов

Введены новые свойства publishToAllureReport и publishToJUnitReport с соответствующими аннотациями и значениями по умолчанию. Это позволяет гибко управлять публикацией результатов синтаксического контроля.


50-52: Обновление метода toString()

Метод toString() обновлен для отображения новых свойств, что обеспечивает полное представление объекта при логировании или отладке.

src/ru/pulsar/jenkins/library/steps/PublishAllure.groovy (1)

42-44: Интеграция результатов синтаксического контроля в Allure

Добавлена проверка флагов syntaxCheck и publishToAllureReport перед вызовом safeUnstash. Это гарантирует, что результаты синтаксической проверки будут включены в отчет Allure только при соответствующих настройках.

src/ru/pulsar/jenkins/library/steps/SyntaxCheck.groovy (3)

1-19: Структура класса реализована корректно!

Класс имеет четкую структуру с правильной инициализацией через конструктор и константой для Allure отчетов.


21-33: Корректная инициализация метода run!

Реализована правильная последовательность проверок и получения зависимостей. Хорошо использован паттерн раннего возврата.


50-52: Необходимо отслеживать статус issue #361

Закомментированный параметр workspace связан с открытым issue. Рекомендуется добавить ссылку на задачу в системе отслеживания для последующего возврата к этому параметру.

✅ Verification successful

Параметр --workspace временно отключен корректно

Подтверждаю, что issue #361 в репозитории vanessa-runner все еще открыт и находится в работе (milestone 3.x). Текущее решение с отключением параметра --workspace и сохранением ссылки на issue в комментарии является правильным подходом.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Проверка статуса issue
gh issue view 361 --repo vanessa-opensource/vanessa-runner

Length of output: 345

vars/pipeline1C.groovy (1)

251-263: Улучшена структура этапа синтаксического контроля!

Разделение на отдельные этапы "Распаковка ИБ" и "Выполнение синтаксического контроля" соответствует общей структуре пайплайна и улучшает читаемость кода.

build.gradle.kts (1)

39-39: Проверить совместимость новой версии jsonschema

Обновление версии jsonschema с 4.36.0 до 4.37.0 требует проверки на наличие критических изменений.

✅ Verification successful

Обновление jsonschema до версии 4.37.0 безопасно

Анализ списка изменений показывает, что обновление содержит только улучшения и исправления ошибок:

  • Добавлена новая опция для обработки null-значений
  • Исправлены ошибки при работе с enum и аннотациями
  • Улучшена поддержка Jackson аннотаций
  • Добавлены новые возможности для Maven плагина
🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Проверка списка изменений между версиями
curl -s "https://api.github.com/repos/victools/jsonschema-generator/releases/tags/v4.37.0" | jq -r '.body'

Length of output: 1245

Comment on lines +82 to +94
// Запуск синтакс-проверки
VRunner.exec(command, true)

if (options.publishToAllureReport) {
steps.stash(ALLURE_STASH, "$allureReportDir/**", true)
steps.archiveArtifacts("$allureReportDir/**")
}

if (options.publishToJUnitReport) {
steps.junit("$junitReportDir/*.xml", true)
steps.archiveArtifacts("$junitReportDir/**")
}
}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion

Рекомендуется улучшить обработку ошибок

При выполнении команды и архивации отчетов отсутствует явная обработка исключений, что может затруднить диагностику проблем.

Предлагаемый рефакторинг:

     def run() {
         // ... existing code ...
+        try {
             VRunner.exec(command, true)
 
             if (options.publishToAllureReport) {
                 steps.stash(ALLURE_STASH, "$allureReportDir/**", true)
                 steps.archiveArtifacts("$allureReportDir/**")
             }
 
             if (options.publishToJUnitReport) {
                 steps.junit("$junitReportDir/*.xml", true)
                 steps.archiveArtifacts("$junitReportDir/**")
             }
+        } catch (Exception e) {
+            Logger.println("Ошибка при выполнении синтаксической проверки: ${e.message}")
+            throw e
+        }
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
// Запуск синтакс-проверки
VRunner.exec(command, true)
if (options.publishToAllureReport) {
steps.stash(ALLURE_STASH, "$allureReportDir/**", true)
steps.archiveArtifacts("$allureReportDir/**")
}
if (options.publishToJUnitReport) {
steps.junit("$junitReportDir/*.xml", true)
steps.archiveArtifacts("$junitReportDir/**")
}
}
// Запуск синтакс-проверки
try {
VRunner.exec(command, true)
if (options.publishToAllureReport) {
steps.stash(ALLURE_STASH, "$allureReportDir/**", true)
steps.archiveArtifacts("$allureReportDir/**")
}
if (options.publishToJUnitReport) {
steps.junit("$junitReportDir/*.xml", true)
steps.archiveArtifacts("$junitReportDir/**")
}
} catch (Exception e) {
Logger.println("Ошибка при выполнении синтаксической проверки: ${e.message}")
throw e
}
}

resources/schema.json Outdated Show resolved Hide resolved
resources/schema.json Outdated Show resolved Hide resolved
resources/schema.json Outdated Show resolved Hide resolved
@nixel2007 nixel2007 merged commit 4c73fcd into firstBitMarksistskaya:develop Jan 17, 2025
2 checks passed
@ovcharenko-di
Copy link
Contributor Author

@nixel2007 в описании релиза надо будет указать, что в syntaxCheck параметр pathToJUnitReport удален, вместо него надо использовать publishToJUnitReport и\или publishToAllureReport

это не breaking change, но упомянуть об этом стоит

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.

Формировать в allure syntaxCheck проверку (синтаксис проверку)
2 participants