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

Исправление логики загрузки расширений, уточнение README #147

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -259,8 +259,8 @@ pipeline1C()
* [Coverage41C](https://github.com/1c-syntax/Coverage41C), его необходимо установить на агент отдельно
* EDT нужной версии или отдельные jar-файлы из его каталога установки, подробнее см. в [Coverage41C/README.md](https://github.com/1c-syntax/Coverage41C)
* Если на агенте Coverage41C не включен в PATH, необходимо указать полный путь к нему в параметре `coverage41CPath`
* Сбор замеров покрытия активируется для каждого стейджа отдельно с помощью установки параметра `"coverage": true`
* поддерживаются `bdd` и `yaxunit`, для использования замеров на стейже `smoke` ожидается исправление vanessa-add в этом [PR](https://github.com/vanessa-opensource/add/pull/1153)
* Сбор замеров покрытия активируется для каждого этапа отдельно с помощью установки параметра `"coverage": true`
* поддерживаются `bdd` и `yaxunit`, для использования замеров на этапе `smoke` ожидается исправление vanessa-add в этом [PR](https://github.com/vanessa-opensource/add/pull/1153)
* Чтобы замеры в `bdd`, `yaxunit`, `smoke` могли выполняться параллельно **на одном агенте**, необходимо указывать для них разные порты отладки в параметре `dbgsPort`.
* Не забудьте настроить подключение клиентов тестирования к серверу отладки.

Expand Down
22 changes: 14 additions & 8 deletions src/ru/pulsar/jenkins/library/steps/LoadExtensions.groovy
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ class LoadExtensions implements Serializable {

private Extension[] extensionsFiltered

LoadExtensions(JobConfiguration config, String stageName = "") {
LoadExtensions(JobConfiguration config, String stageName) {
this.config = config
this.stageName = stageName
}
Expand All @@ -33,13 +33,19 @@ class LoadExtensions implements Serializable {

def extensions = this.config.initInfoBaseOptions.extensions

if (this.stageName) {
this.extensionsFiltered = extensions.findAll { extension ->
extension.stages.contains(this.stageName)
}
}
else {
this.extensionsFiltered = extensions.findAll { extension -> extension.stages.length == 0 || extension.stages.contains("initInfoBase") }
// NB: расширения, подключаемые на этапе initInfoBase, остаются подключенными на всех остальных этапах
if (this.stageName == "initInfoBase") {
// подключаются все расширения, у которых явно указано подключение на текущем этапе
// и те расширения, в которых этапы подключения не указаны вообще
this.extensionsFiltered = extensions.findAll({ extension ->
extension.stages.contains(this.stageName) || extension.stages.length == 0
})
} else {
// на остальных этапах подключаются расширения, которые не были подключены на этапе initInfoBase
// и у которых явно указано подключение на текущем этапе
this.extensionsFiltered = extensions.findAll({ extension ->
!extension.stages.contains("initInfoBase") && extension.stages.contains(this.stageName)
})
Comment on lines +36 to +48
Copy link
Contributor

@coderabbitai coderabbitai bot Jan 17, 2025

Choose a reason for hiding this comment

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

💡 Codebase verification

Обнаружено несоответствие между документацией и реализацией

Согласно документации в InitInfoBaseOptions.groovy, расширения без указанных этапов должны подключаться при инициализации базы и оставаться подключенными на всех последующих этапах. Текущая реализация некорректно отфильтровывает эти расширения на этапах после initInfoBase.

Предлагаемое в комментарии изменение не соответствует требованиям. Вместо этого, для корректной работы необходимо изменить условие следующим образом:

- !extension.stages.contains("initInfoBase") && extension.stages.contains(this.stageName)
+ (extension.stages.length == 0 && extension.stages.contains("initInfoBase")) || 
+ (!extension.stages.contains("initInfoBase") && extension.stages.contains(this.stageName))
🔗 Analysis chain

Убедитесь, что расширения без указанных этапов обрабатываются корректно

В текущей логике метода run, расширения без указанных этапов (extension.stages.length == 0) подключаются только на этапе initInfoBase и не подключаются на других этапах. Пожалуйста, подтвердите, что такое поведение соответствует требованиям. Если расширения без заданных этапов должны подключаться на всех этапах, необходимо скорректировать условие фильтрации.

Если требуется, чтобы такие расширения подключались на всех этапах, кроме initInfoBase, предложите изменить условие следующим образом:

- !extension.stages.contains("initInfoBase") && extension.stages.contains(this.stageName)
+ !extension.stages.contains("initInfoBase") && (extension.stages.contains(this.stageName) || extension.stages.length == 0)
🏁 Scripts executed

The following scripts were executed for the analysis:

Error: No shell scripts found


Script:

#!/bin/bash
# Search for test files related to LoadExtensions
fd LoadExtensions.*test.*

# Search for documentation files
fd -e md -e txt

# Look for extension configuration examples
rg -A 5 -B 5 "stages.*=" 

Length of output: 3992

Copy link
Contributor Author

Choose a reason for hiding this comment

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

подтверждаю, что расширения, у которых не указаны этапы, должны подключаться только на этапе initInfoBase

Copy link
Contributor

Choose a reason for hiding this comment

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

@ovcharenko-di Спасибо за уточнение. Приношу извинения за некорректное предложение в предыдущем комментарии. Текущая реализация действительно корректна и соответствует требованиям.


✏️ Learnings added
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:09.944Z
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.

Note: Learnings are effective only in the context of similar code segments. To apply general coding guidelines, please configure review instructions. You can manage existing learnings in the app.


If you found this review helpful, would you consider giving us a shout-out on X?
Thank you for using CodeRabbit!

}

def env = steps.env()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ void runYaxunit() throws IOException {
.thenReturn(new FilePath(new File("/")));

// given
// файл содержит 4 расширения для разных стейджей
// файл содержит 4 расширения для разных этапов
String config = IOUtils.resourceToString(
"jobConfiguration.json",
StandardCharsets.UTF_8,
Expand All @@ -44,11 +44,11 @@ void runYaxunit() throws IOException {
JobConfiguration jobConfiguration = ConfigurationReader.create(config);

// when
LoadExtensions loadExtensions = new LoadExtensions(jobConfiguration);
loadExtensions.run();
LoadExtensions loadExtensionsInit = new LoadExtensions(jobConfiguration, "initInfoBase");
loadExtensionsInit.run();

// then
InitInfoBaseOptions.Extension[] extensions = loadExtensions.getExtensionsFiltered();
InitInfoBaseOptions.Extension[] extensions = loadExtensionsInit.getExtensionsFiltered();
assertThat(extensions.length).isEqualTo(2);
assertThat(extensions[0].getName()).isEqualTo("mods");
assertThat(extensions[1].getName()).isEqualTo("mods2");
Expand Down
Loading