-
Notifications
You must be signed in to change notification settings - Fork 70
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Исправление логики загрузки расширений, уточнение README #147
Исправление логики загрузки расширений, уточнение README #147
Conversation
WalkthroughВ этом pull request внесены изменения в три файла: Changes
Assessment against linked issues
Possibly related PRs
Poem
Finishing Touches
Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media? 🪧 TipsChatThere are 3 ways to chat with CodeRabbit:
Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments. CodeRabbit Commands (Invoked using PR comments)
Other keywords and placeholders
CodeRabbit Configuration File (
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 1
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (3)
README.md
(1 hunks)src/ru/pulsar/jenkins/library/steps/LoadExtensions.groovy
(2 hunks)test/unit/groovy/ru/pulsar/jenkins/library/steps/LoadExtensionsTest.java
(2 hunks)
✅ Files skipped from review due to trivial changes (1)
- README.md
🔇 Additional comments (3)
src/ru/pulsar/jenkins/library/steps/LoadExtensions.groovy (1)
20-22
: Проверьте обновление всех вызовов конструктораLoadExtensions
Изменение конструктора требует обязательного параметра
stageName
. Необходимо убедиться, что во всех местах создания экземпляровLoadExtensions
передается корректныйstageName
.Запустите следующий скрипт для поиска вызовов конструктора с одним аргументом:
✅ Verification successful
Конструктор
LoadExtensions
используется корректноПроверка показала, что единственный вызов конструктора в файле
vars/loadExtensions.groovy
уже использует оба требуемых параметра:config
иstageName
. Других вызовов конструктора в кодовой базе не обнаружено.🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash # Описание: Поиск вызовов конструктора LoadExtensions с одним аргументом # Ищем в файлах Groovy ast-grep --lang groovy --pattern $'new LoadExtensions($_)' --include '**/*.groovy' # Ищем в файлах Java ast-grep --lang java --pattern $'new LoadExtensions($_)' --include '**/*.java'Length of output: 479
Script:
#!/bin/bash # Search for LoadExtensions constructor calls with context rg -t groovy "new LoadExtensions\(" -B 2 -A 2Length of output: 322
test/unit/groovy/ru/pulsar/jenkins/library/steps/LoadExtensionsTest.java (2)
38-38
: Обновление терминологии в комментарииТермин "стейджей" заменен на "этапов" для унификации терминологии. Изменение корректно и улучшает читаемость комментариев.
47-48
: Адаптация тестов к обновленному конструкторуТесты обновлены с учетом нового обязательного параметра
stageName
в конструктореLoadExtensions
. Это гарантирует, что тесты отражают текущую логику класса.
// 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) | ||
}) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
💡 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
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
подтверждаю, что расширения, у которых не указаны этапы, должны подключаться только на этапе initInfoBase
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@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!
Спасибо! |
fixes #144
Также привел тест в соответствие реальности. То есть, раньше тестировалась одна ветка кода, а выполнялась всегда другая.