Skip to content

Conversation

@ovcharenko-di
Copy link
Contributor

closes #52

Статус обработчиков обновления проверяется через файл с кодом возврата, а статус доп. шагов проверяется по коду возврата выполняемой команды (vrunner run, vrunner vanessa и тд).

В случае, когда не все шаги инициализации вернули 0, весь stage помечается как UNSTABLE, но сборка продолжается. При этом выполняются только те стейджи, которые не требуют корректно инициализированной ИБ (синт. контроль, валидация EDT, сонар).

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Apr 13, 2025

Walkthrough

Добавлена сборка статусов и обработка ошибок при инициализации инфобазы: введены флаг isInfobaseInitialized, мапа exitStatuses, метод readExitStatusFromFile, агрегация и проверка exit-кодов с логированием и выбросом ошибки при провале; обёрнут вызов в initInfobase и защищены последующие этапы в pipeline.

Changes

Cohort / File(s) Изменения
InitInfoBase core
src/ru/pulsar/jenkins/library/steps/InitInfoBase.groovy
Добавлена логика агрегирования exit-кодов: isInfobaseInitialized, exitStatuses, чтение статусов из файлов, метод static Integer readExitStatusFromFile(String path), импорт NoSuchFileException, логирование итогов и выброс ошибки при неуспехе.
Unit tests & resources
test/unit/groovy/.../InitInfoBaseTest.java, test/unit/resources/exitStatus0, test/unit/resources/exitStatus1
Добавлены юнит-тесты для readExitStatusFromFile и тестовые ресурсы с содержимым exit-кодов (0, 1) и сценарий отсутствующего файла.
Init wrapper
vars/initInfobase.groovy
Вызов initInfobase.run() обёрнут в try-catch; возвращается true при успехе, при исключении вызывается unstable с логом и возвращается false.
Pipeline gating
vars/pipeline1C.groovy
Добавлено публичное поле Boolean isInfobaseInitialized (по умолчанию true), результат initInfobase записывается в флаг; условия выполнения стадий (BDD, Smoke, YAXUnit и др.) дополнены проверкой флага; переименованы/реорганизованы стадии подготовки ИБ.

Sequence Diagram(s)

sequenceDiagram
    participant Init as InitInfoBase
    participant FS as FileSystem
    participant Log as Logger
    Init->>FS: readExitStatusFromFile(path)
    FS-->>Init: файл с кодом / ошибка (NoSuchFileException)
    Init->>Init: нормализует, парсит, возвращает Integer (0/1/>=2 или 1 по умолчанию)
    Init->>Init: сохраняет в exitStatuses
    Init->>Log: логирует индивидуальные статусы
    alt Любой статус == 1 или максимальный статус >= 2
        Init->>Log: лог итоговой ошибки
        Init->>Init: isInfobaseInitialized = false
        Init->>Pipeline: throw error
    else
        Init->>Log: лог успешной инициализации
        Init->>Pipeline: продолжает успешно
    end
Loading
sequenceDiagram
    participant Pipeline as Pipeline1C
    participant InitVar as initInfobase
    participant Stages as Последующие этапы
    Pipeline->>InitVar: initInfobase.run() (в try)
    alt Исключение / неуспех
        InitVar-->>Pipeline: возвращает false (unstable logged)
        Pipeline->>Stages: пропускает зависимые стадии (when проверяет isInfobaseInitialized)
    else Успех
        InitVar-->>Pipeline: возвращает true
        Pipeline->>Stages: выполняет все стадии
    end
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Suggested reviewers

  • nixel2007

Poem

"Я зайчик в коде — хвостик пушист,
Статусы ношу в кармашке бисерный;
Если файл пропал — не плачь, друг мой, лист,
Я верну единицу, чтоб сборка помнила печалью.
Прыг — и тесты поют, лог светит надеждой!" 🐇

Pre-merge checks and finishing touches

❌ Failed checks (1 warning)
Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. You can run @coderabbitai generate docstrings to improve docstring coverage.
✅ Passed checks (4 passed)
Check name Status Explanation
Linked Issues Check ✅ Passed Изменения полностью соответствуют задаче #52: неудачи инициализации фиксируются и сигнализируются, сборка переходит в состояние UNSTABLE, а независимые шаги продолжаются.
Out of Scope Changes Check ✅ Passed Все правки посвящены реализации проверки статуса инициализации ИБ и контролю выполнения стадий в конвейере, посторонних изменений нет.
Description Check ✅ Passed Описание объясняет, как статус шагов инициализации проверяется через коды возврата и какие действия выполняются при ошибках, что соответствует фактическим изменениям.
Title Check ✅ Passed Название pull request ёмко и точно отражает основную цель изменений – добавление проверки статуса инициализации информационной базы – без лишних деталей или отвлекающих элементов.
✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@ovcharenko-di
Copy link
Contributor Author

Иллюстрация

image

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 (6)
test/unit/resources/exitStatus1 (1)

1-2: Обратите внимание на символ BOM в начале файла

В данном файле присутствует маркер последовательности байтов (BOM) перед цифрой "1". При использовании этого файла в тестах убедитесь, что метод readExitStatusFromFile корректно обрабатывает BOM и правильно считывает значение.

Рекомендую удалить BOM для предотвращения потенциальных проблем при чтении файла:

-1
+1
test/unit/resources/exitStatus0 (1)

1-2: Обратите внимание на символ BOM в начале файла

В данном файле присутствует маркер последовательности байтов (BOM) перед цифрой "0". При использовании этого файла в тестах убедитесь, что метод readExitStatusFromFile корректно обрабатывает BOM и правильно считывает значение.

Рекомендую удалить BOM для предотвращения потенциальных проблем при чтении файла:

-0
+0
vars/initInfobase.groovy (1)

9-15: Реализация механизма обработки ошибок инициализации выглядит хорошо

Добавление блока try-catch улучшает надежность процесса инициализации и позволяет продолжить выполнение пайплайна даже при ошибках инициализации ИБ.

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

 try {
     initInfobase.run()
     return true
 } catch (Exception e) {
+    echo "Стек вызовов: ${e.getStackTrace().join('\n')}"
     unstable("Инициализация ИБ не выполнена: ${e.getMessage()}")
     return false
 }
vars/pipeline1C.groovy (2)

18-19: Добавьте описание переменной isInfobaseInitialized

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

@Field
+// Флаг, указывающий на успешность инициализации информационной базы
Boolean isInfobaseInitialized = true

139-141: Корректная обработка результата инициализации ИБ

Хорошее решение: результат выполнения функции initInfobase теперь сохраняется в переменную isInfobaseInitialized, что позволяет контролировать дальнейшее выполнение пайплайна.

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

script {
    isInfobaseInitialized = initInfobase config
+   echo "Статус инициализации ИБ: ${isInfobaseInitialized ? 'успешно' : 'с ошибками'}"
}
test/unit/groovy/ru/pulsar/jenkins/library/steps/InitInfoBaseTest.java (1)

34-48: Рекомендуется унифицировать наименования переменных.

Имя переменной exitStatus_1 использует подчеркивание, что не соответствует стилю именования в других тестах. Также есть проблема с отступами в строке 41.

-        Integer exitStatus_1 = InitInfoBase.readExitStatusFromFile(resource);
+        Integer exitStatus = InitInfoBase.readExitStatusFromFile(resource);
-                        .getClassLoader()
-                        .getResource("exitStatus1"))
+                .getClassLoader()
+                .getResource("exitStatus1"))
📜 Review details

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

📥 Commits

Reviewing files that changed from the base of the PR and between 2c511c6 and e9d94ba.

📒 Files selected for processing (6)
  • src/ru/pulsar/jenkins/library/steps/InitInfoBase.groovy (4 hunks)
  • test/unit/groovy/ru/pulsar/jenkins/library/steps/InitInfoBaseTest.java (1 hunks)
  • test/unit/resources/exitStatus0 (1 hunks)
  • test/unit/resources/exitStatus1 (1 hunks)
  • vars/initInfobase.groovy (1 hunks)
  • vars/pipeline1C.groovy (8 hunks)
🧰 Additional context used
🧬 Code Graph Analysis (1)
test/unit/groovy/ru/pulsar/jenkins/library/steps/InitInfoBaseTest.java (1)
test/unit/groovy/ru/pulsar/jenkins/library/utils/TestUtils.java (1)
  • TestUtils (16-64)
⏰ Context from checks skipped due to timeout of 90000ms (1)
  • GitHub Check: build
🔇 Additional comments (19)
vars/pipeline1C.groovy (6)

54-54: Исправление названия стадии на кириллические символы

Хорошее изменение: замена латинской "C" на кириллическую "С" в названии стадии.


76-76: Улучшение наименования стадии

Переименование стадии с "Подготовка 1С базы" на "Подготовка ИБ" делает наименование более лаконичным и соответствующим принятым в проекте сокращениям.


217-217: Добавление проверки инициализации ИБ для стадии BDD сценариев

Правильное решение: стадия BDD сценариев теперь будет выполняться только при успешной инициализации ИБ, что предотвратит выполнение тестов на некорректно инициализированной базе.


289-289: Добавление проверки инициализации ИБ для стадии дымовых тестов

Корректное изменение: стадия дымовых тестов теперь будет выполняться только при успешной инициализации ИБ, что предотвратит ложные ошибки тестирования.


326-326: Добавление проверки инициализации ИБ для стадии YAXUnit тестов

Правильное решение: стадия YAXUnit тестов теперь будет выполняться только при успешной инициализации ИБ, что позволит избежать запуска тестов на некорректно подготовленной базе.


18-19: Рассмотрите более безопасное начальное значение для isInfobaseInitialized

Сейчас переменная изначально устанавливается в true, а затем может быть изменена на false при ошибке инициализации. Возможно, более безопасным подходом было бы начальное значение false с установкой в true только после успешной инициализации.

@Field
-Boolean isInfobaseInitialized = true
+Boolean isInfobaseInitialized = false

Затем в разделе pre-stage:

script {
    config = jobConfiguration() as JobConfiguration
    agent1C = config.v8AgentLabel()
    agentEdt = config.edtAgentLabel()
    RepoUtils.computeRepoSlug(env.GIT_URL)
+   // Устанавливаем значение по умолчанию для случаев, когда инициализация ИБ не требуется
+   isInfobaseInitialized = !config.stageFlags.needInfoBase()
}
test/unit/groovy/ru/pulsar/jenkins/library/steps/InitInfoBaseTest.java (4)

1-10: Хорошая организация импортов и структура класса.

Класс корректно импортирует необходимые пакеты для JUnit 5 и утилиты тестирования, а также правильно использует статические импорты для assertions.


11-17: Корректная настройка тестового окружения.

Метод setUp правильно инициализирует тестовый контекст, используя TestUtils.setupMockedContext(). Это хорошая практика для подготовки тестового окружения перед каждым тестом.


18-32: Тест успешного сценария корректно структурирован.

Тест readExitStatusFromFile_success следует паттерну "given-when-then", что делает его легко читаемым. Хорошее использование Objects.requireNonNull для обработки возможных null-значений.


50-61: Тест отсутствия файла корректно реализован.

Тест readExitStatusFromFile_does_not_exist проверяет важный сценарий, когда файл не существует. Хорошо, что метод возвращает значение 1 в этом случае, что позволяет обрабатывать ошибку корректно.

src/ru/pulsar/jenkins/library/steps/InitInfoBase.groovy (9)

10-11: Корректное добавление импорта для обработки исключений.

Импорт NoSuchFileException необходим для обработки случаев отсутствия файла в новом методе readExitStatusFromFile.


32-33: Добавлен флаг для отслеживания статуса инициализации.

Переменная isInfobaseInitialized позволяет отслеживать общий статус инициализации информационной базы и принимать решение о дальнейшем выполнении пайплайна.


47-48: Хорошая идея использования LinkedHashMap для сохранения порядка команд.

Использование LinkedHashMap для exitStatuses позволяет сохранить порядок выполнения команд, что важно для логирования и отладки.


61-67: Улучшенное отслеживание статуса миграции.

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


72-88: Улучшенная обработка дополнительных шагов инициализации.

Код теперь сохраняет статусы выполнения всех команд инициализации и обрабатывает как случай с явно указанными шагами, так и с автоматическим поиском файлов vrunner.init*.json.


90-99: Логика определения общего статуса инициализации.

Хорошо реализована логика проверки статусов выполнения команд с разделением на критические ошибки (status >= 2) и некритические (status = 1).


100-105: Подробное логирование статусов команд.

Вывод детальной информации о статусах выполнения каждой команды позволяет быстро локализовать проблему при возникновении ошибок.


110-114: Корректная обработка ошибок инициализации.

В случае неуспешной инициализации вызывается error, что пометит сборку как UNSTABLE и позволит продолжить выполнение этапов, не требующих инициализированной ИБ.


116-142: Комплексная обработка исключений в методе readExitStatusFromFile.

Метод содержит обработку различных сценариев ошибок:

  • Пустой файл
  • Отсутствие файла (NoSuchFileException)
  • Некорректный формат числа (NumberFormatException)
  • Другие исключения

Также реализована обработка BOM-символа, который может добавляться платформой 1С. Это демонстрирует тщательный подход к обработке ошибок.

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)
test/unit/groovy/ru/pulsar/jenkins/library/steps/InitInfoBaseTest.java (3)

18-32: Тест для успешного сценария реализован корректно.

Тест проверяет, что метод readExitStatusFromFile правильно читает статус выхода 0 из файла ресурса. Хорошо, что используется паттерн "given-when-then" для ясной структуры теста.

Обратите внимание на небольшую проблему с отступом в строке 32.

-        }
+    }

11-62: Рекомендация: добавьте комментарий, описывающий назначение тестируемого метода.

Было бы полезно добавить комментарий на уровне класса, объясняющий, что делает метод InitInfoBase.readExitStatusFromFile, чтобы улучшить понимание тестов для других разработчиков.

+/**
+ * Тесты для метода readExitStatusFromFile класса InitInfoBase.
+ * Метод используется для чтения статуса выполнения обработчиков обновления из файла.
+ * Возвращает 0 при успешном выполнении, 1 - при ошибке или если файл не существует.
+ */
 class InitInfoBaseTest {

54-55: Предлагаю добавить проверку для краевого случая.

В текущем тесте для несуществующего файла используется просто строка. Стоит также проверить случай с null значением пути, чтобы убедиться, что метод корректно обрабатывает этот сценарий.

@Test
void readExitStatusFromFile_does_not_exist() {

    // given
    String resource = "exitStatusDoesNotExist";

    // when
    Integer exitStatus = InitInfoBase.readExitStatusFromFile(resource);
    // then
    assertThat(exitStatus).isEqualTo(1);

}

+@Test
+void readExitStatusFromFile_null_path() {
+
+    // given
+    String resource = null;
+
+    // when
+    Integer exitStatus = InitInfoBase.readExitStatusFromFile(resource);
+    // then
+    assertThat(exitStatus).isEqualTo(1);
+
+}
📜 Review details

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

📥 Commits

Reviewing files that changed from the base of the PR and between e9d94ba and 8104b71.

📒 Files selected for processing (2)
  • test/unit/groovy/ru/pulsar/jenkins/library/steps/InitInfoBaseTest.java (1 hunks)
  • vars/pipeline1C.groovy (8 hunks)
🚧 Files skipped from review as they are similar to previous changes (1)
  • vars/pipeline1C.groovy
🧰 Additional context used
🧬 Code Graph Analysis (1)
test/unit/groovy/ru/pulsar/jenkins/library/steps/InitInfoBaseTest.java (1)
test/unit/groovy/ru/pulsar/jenkins/library/utils/TestUtils.java (1)
  • TestUtils (16-64)
⏰ Context from checks skipped due to timeout of 90000ms (1)
  • GitHub Check: build
🔇 Additional comments (4)
test/unit/groovy/ru/pulsar/jenkins/library/steps/InitInfoBaseTest.java (4)

1-11: Хорошая структура тестового класса.

Класс имеет правильную организацию с импортами JUnit 5 и AssertJ для утверждений. Тесты следуют паттерну "given-when-then", что делает их понятными и легко поддерживаемыми.


13-16: LGTM: Корректная настройка тестового окружения.

Метод setUp правильно использует TestUtils.setupMockedContext() для инициализации мокированного контекста перед каждым тестом.


34-48: LGTM: Корректная проверка сценария с ошибкой.

Тест правильно проверяет, что метод возвращает статус 1 при чтении из файла exitStatus1.


50-61: LGTM: Корректная обработка отсутствующего файла.

Тест правильно проверяет, что метод возвращает статус 1, когда файл не существует. Это хорошая практика - проверять граничные случаи.

@nixel2007 nixel2007 self-assigned this Apr 27, 2025
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 (1)
test/unit/groovy/ru/pulsar/jenkins/library/steps/InitInfoBaseTest.java (1)

50-61: Рассмотрите добавление тестов для граничных случаев.

Текущие тесты покрывают основные сценарии (успех, ошибка, отсутствующий файл). Для более полного покрытия рекомендуется добавить тесты для:

  • Пустого файла (согласно коду, должен возвращать 1)
  • Файла с нечисловым содержимым (должен возвращать 1)
  • Файла с BOM (должен корректно обрабатываться)
  • Файла с пробельными символами до/после числа

Пример дополнительных тестов:

@Test
void readExitStatusFromFile_empty() {
    // Test for empty file - should return 1
}

@Test
void readExitStatusFromFile_nonNumeric() {
    // Test for non-numeric content - should return 1
}
📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 8104b71 and aebb872.

📒 Files selected for processing (6)
  • src/ru/pulsar/jenkins/library/steps/InitInfoBase.groovy (4 hunks)
  • test/unit/groovy/ru/pulsar/jenkins/library/steps/InitInfoBaseTest.java (1 hunks)
  • test/unit/resources/exitStatus0 (1 hunks)
  • test/unit/resources/exitStatus1 (1 hunks)
  • vars/initInfobase.groovy (1 hunks)
  • vars/pipeline1C.groovy (8 hunks)
✅ Files skipped from review due to trivial changes (1)
  • test/unit/resources/exitStatus1
🚧 Files skipped from review as they are similar to previous changes (1)
  • test/unit/resources/exitStatus0
🧰 Additional context used
📓 Path-based instructions (2)
vars/*.groovy

📄 CodeRabbit inference engine (.github/copilot-instructions.md)

vars/*.groovy: Pipeline step Groovy files in vars/ must have correct Groovy syntax
Ensure proper error handling in pipeline steps (use try/catch and cleanup in finally where appropriate)
Validate stage conditional logic (when clauses) and agent label assignments in pipeline steps

Files:

  • vars/initInfobase.groovy
  • vars/pipeline1C.groovy
vars/pipeline1C.groovy

📄 CodeRabbit inference engine (.github/copilot-instructions.md)

Review and update the main pipeline flow in vars/pipeline1C.groovy when modifying overall pipeline logic

Files:

  • vars/pipeline1C.groovy
🧠 Learnings (3)
📚 Learning: 2025-08-27T05:31:27.548Z
Learnt from: CR
PR: firstBitMarksistskaya/jenkins-lib#0
File: .github/copilot-instructions.md:0-0
Timestamp: 2025-08-27T05:31:27.548Z
Learning: Applies to vars/pipeline1C.groovy : Review and update the main pipeline flow in vars/pipeline1C.groovy when modifying overall pipeline logic

Applied to files:

  • vars/pipeline1C.groovy
📚 Learning: 2025-01-17T15:14:10.474Z
Learnt from: ovcharenko-di
PR: firstBitMarksistskaya/jenkins-lib#147
File: src/ru/pulsar/jenkins/library/steps/LoadExtensions.groovy:36-48
Timestamp: 2025-01-17T15:14:10.474Z
Learning: In LoadExtensions.groovy, extensions without specified stages (extension.stages.length == 0) should only be loaded during the initInfoBase stage. They should not be loaded in subsequent stages.

Applied to files:

  • vars/pipeline1C.groovy
📚 Learning: 2025-08-27T05:31:27.548Z
Learnt from: CR
PR: firstBitMarksistskaya/jenkins-lib#0
File: .github/copilot-instructions.md:0-0
Timestamp: 2025-08-27T05:31:27.548Z
Learning: Applies to test/unit/groovy/ru/pulsar/jenkins/library/**/*.groovy : Add or update unit tests for support code when adding new pipeline steps

Applied to files:

  • test/unit/groovy/ru/pulsar/jenkins/library/steps/InitInfoBaseTest.java
🧬 Code graph analysis (1)
test/unit/groovy/ru/pulsar/jenkins/library/steps/InitInfoBaseTest.java (1)
test/unit/groovy/ru/pulsar/jenkins/library/utils/TestUtils.java (1)
  • TestUtils (16-64)
🔇 Additional comments (13)
vars/initInfobase.groovy (1)

9-15: Корректная обработка ошибок инициализации.

Обёртка try-catch правильно обрабатывает исключения при инициализации ИБ, возвращая булево значение для использования в pipeline. Метод unstable() корректно сигнализирует о проблеме, не останавливая сборку полностью.

vars/pipeline1C.groovy (2)

18-20: LGTM: Флаг инициализации добавлен корректно.

Новый флаг isInfobaseInitialized с дефолтным значением true правильно отслеживает статус инициализации ИБ. Значение по умолчанию соответствует случаю, когда стадия инициализации отключена или пропущена.


140-142: Корректное присвоение результата инициализации.

Результат вызова initInfobase правильно сохраняется в флаг isInfobaseInitialized для последующего использования в условиях выполнения стадий.

test/unit/groovy/ru/pulsar/jenkins/library/steps/InitInfoBaseTest.java (2)

18-32: Тест успешного чтения статуса выглядит корректно.

Тест правильно проверяет чтение exit-кода 0 из файла ресурсов.


34-48: Тест неуспешного статуса выглядит корректно.

Тест правильно проверяет чтение exit-кода 1 из файла ресурсов.

src/ru/pulsar/jenkins/library/steps/InitInfoBase.groovy (8)

10-10: LGTM: Импорт добавлен корректно.

Импорт java.nio.file.NoSuchFileException необходим для обработки отсутствующих файлов в методе readExitStatusFromFile.


32-32: LGTM: Локальный флаг инициализации.

Локальная переменная isInfobaseInitialized правильно используется для отслеживания статуса инициализации внутри метода.


47-47: LGTM: Карта статусов для отслеживания.

Использование LinkedHashMap для хранения статусов команд сохраняет порядок выполнения, что полезно для логирования.


61-67: LGTM: Корректное чтение статуса миграции.

Статус миграции правильно читается из файла после выполнения команды. Использование catchError предотвращает остановку pipeline при ошибке миграции.


72-88: LGTM: Отслеживание статусов инициализации.

Логика правильно обрабатывает оба случая:

  • Файлы vrunner.init*.json (если additionalInitializationSteps пуст)
  • Кастомные команды из additionalInitializationSteps

Статусы всех команд корректно записываются в карту exitStatuses.


110-113: LGTM: Выброс ошибки при неуспешной инициализации.

Выброс ошибки через steps.error() корректно останавливает выполнение и сигнализирует о проблеме, что соответствует целям PR.


116-142: Корректная реализация readExitStatusFromFile.

Метод правильно обрабатывает все граничные случаи:

  • Отсутствующий файл (NoSuchFileException)
  • Пустое содержимое
  • Нечисловое значение (NumberFormatException)
  • BOM (через replaceAll)
  • Общие исключения

Все ошибочные случаи возвращают 1, что соответствует конвенции "ошибка при отсутствии статуса".


90-104: Утвердить логику обработки кодов возврата

Логика проверки статусов соответствует практике vanessa-runner: 0 — успех, 1 — обнаружены ошибки в тестах, ≥2 — общие сбои.

when {
beforeAgent true
expression { config.stageFlags.bdd }
expression { config.stageFlags.bdd && isInfobaseInitialized }
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 | 🟠 Major

🧩 Analysis chain

Проверьте, что все зависимые от ИБ стадии защищены флагом.

Стадии BDD, Smoke и YAXUnit теперь правильно проверяют isInfobaseInitialized перед выполнением. Убедитесь, что другие стадии, требующие корректно инициализированной ИБ, также имеют эту проверку.

Выполните следующий скрипт для проверки всех стадий, которые используют unzipInfobase() или loadExtensions и могут требовать проверки флага:

Also applies to: 290-290, 327-327


🏁 Script executed:

#!/bin/bash
# Поиск стадий, которые распаковывают ИБ или загружают расширения
# и могут требовать проверки isInfobaseInitialized

echo "=== Стадии с unzipInfobase() ==="
rg -n -A10 -B5 'unzipInfobase\(\)' vars/pipeline1C.groovy | grep -E '(stage\(|when \{|expression \{)'

echo ""
echo "=== Стадии с loadExtensions (не initInfoBase) ==="
rg -n -A10 -B5 "loadExtensions.*'(?!initInfoBase)" vars/pipeline1C.groovy | grep -E '(stage\(|when \{|expression \{)'

Length of output: 1496


🏁 Script executed:

#!/bin/bash
echo "=== Все вхождения loadExtensions ==="
rg -n -C5 "loadExtensions" vars/pipeline1C.groovy

Length of output: 2735


Добавить проверку isInfobaseInitialized для syntaxCheck-стадии
В выражении when для стадии «Выполнение синтаксического контроля» (около строки 265) заменить

expression { config.stageFlags.syntaxCheck }

на

expression { config.stageFlags.syntaxCheck && isInfobaseInitialized }
🤖 Prompt for AI Agents
In vars/pipeline1C.groovy around lines 218 to 218, the when expression for the
syntaxCheck stage should also verify that the infobase is initialized; change
the existing expression to include the isInfobaseInitialized check so it reads
as config.stageFlags.syntaxCheck && isInfobaseInitialized, ensuring the variable
is in scope where the when is evaluated.

@ovcharenko-di ovcharenko-di changed the title Draft: Проверка статуса инициализации ИБ Проверка статуса инициализации ИБ Oct 7, 2025
@ovcharenko-di
Copy link
Contributor Author

closes #131

@nixel2007 PR "отлежался", в нем все сделано так, как я задумывал

}
}

static Integer readExitStatusFromFile(String path) {
Copy link
Member

Choose a reason for hiding this comment

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

ребейзни от мастера, плз, этот метод уже влит


@Field
// Флаг, указывающий на успешность инициализации информационной базы
Boolean isInfobaseInitialized = true
Copy link
Member

Choose a reason for hiding this comment

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

может быть в jobConfiguration сделать секцию с out-параметрами? или отдельную сериализуемую ДТОху подо все.

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.

Сигнализировать об ошибках на шаге initSteps

2 participants