feat(repos): add repos diff and repos sync CLI commands#4079
Conversation
|
🤖 Finished Review · ✅ Success · Started 9:36 PM UTC · Completed 9:45 PM UTC |
PR Summary by Qodofeat(repos): add diff/sync commands to reconcile repos.yaml drift
AI Description
Diagram
High-Level Assessment
Files changed (4)
|
Codecov Report❌ Patch coverage is 📢 Thoughts on this report? Let us know! |
Code Review by Qodo
1.
|
ReviewThis is a re-review after new commits were pushed. The prior review (SHA 94e0b1a) covered only the The implementation is well-structured across all new commands: the config-struct + FindingsMedium
Low
Previous runReviewThree prior low findings from the last review have been addressed: concurrency flag descriptions now consistently say The implementation remains well-structured: the config-struct + FindingsLow
Previous runReviewThree prior low findings from the last review have been addressed: concurrency flag descriptions now consistently say The implementation remains well-structured: the config-struct + FindingsLow
Previous run (2)ReviewAll prior medium+ findings from earlier review iterations are resolved: The implementation is well-structured: the config-struct + FindingsLow
Previous run (3)ReviewFindingsLow
Previous run (4)ReviewAll prior medium findings are resolved: The implementation is well-structured: FindingsLow
Previous run (5)ReviewAll prior high and medium findings have been addressed: glob-expanded repo config resolution now uses FindingsMedium
Low
Previous run (6)ReviewWell-structured feature PR that adds High: Wrong config resolution for glob-expanded repos in Sync
For glob-expanded repos (e.g.,
Remediation: Propagate the
Medium: Concurrency bounds not validated
Low findings
Labels: PR adds new CLI subcommands (repos diff, repos sync) in the repos package Previous run (7)ReviewWell-structured feature PR that adds High: Wrong config resolution for glob-expanded repos in Sync
For glob-expanded repos (e.g.,
Remediation: Either propagate the Medium: Partial changes applied on secret check errorIn Remediation: Either return nil changes on secret check failure (preventing partial application), or continue iterating through remaining secrets and collect all warnings. Medium: Diff always reports secret updates (noisy output)
Remediation: Consider separating the "ensure secret exists" concept from "update secret value." For Medium: CLI docs not updated
Low: Test coverage gap for glob + per-entry overrides in Sync
Low: Concurrency default inconsistency
Low: Guard variable in managedVariables is dead codeThe Low: No upper bound on --concurrencyThe Labels: PR adds new CLI commands in the repos package Previous run (8)ReviewAll prior high and medium findings have been addressed: glob-expanded repo config resolution now uses FindingsMedium
Low
Previous run (9)ReviewWell-structured feature PR that adds High: Wrong config resolution for glob-expanded repos in Sync
For glob-expanded repos (e.g.,
Remediation: Propagate the
Medium: Concurrency bounds not validated
Low findings
Labels: PR adds new CLI subcommands (repos diff, repos sync) in the repos package Previous run (10)ReviewWell-structured feature PR that adds High: Wrong config resolution for glob-expanded repos in Sync
For glob-expanded repos (e.g.,
Remediation: Either propagate the Medium: Partial changes applied on secret check errorIn Remediation: Either return nil changes on secret check failure (preventing partial application), or continue iterating through remaining secrets and collect all warnings. Medium: Diff always reports secret updates (noisy output)
Remediation: Consider separating the "ensure secret exists" concept from "update secret value." For Medium: CLI docs not updated
Low: Test coverage gap for glob + per-entry overrides in Sync
Low: Concurrency default inconsistency
Low: Guard variable in managedVariables is dead codeThe Low: No upper bound on --concurrencyThe Labels: PR adds new CLI commands in the repos package Previous run (11)ReviewFindingsLow
Previous run (12)ReviewAll prior medium findings are resolved: The implementation is well-structured: FindingsLow
Previous run (13)ReviewAll prior high and medium findings have been addressed: glob-expanded repo config resolution now uses FindingsMedium
Low
Previous run (14)ReviewWell-structured feature PR that adds High: Wrong config resolution for glob-expanded repos in Sync
For glob-expanded repos (e.g.,
Remediation: Propagate the
Medium: Concurrency bounds not validated
Low findings
Labels: PR adds new CLI subcommands (repos diff, repos sync) in the repos package Previous run (15)ReviewWell-structured feature PR that adds High: Wrong config resolution for glob-expanded repos in Sync
For glob-expanded repos (e.g.,
Remediation: Either propagate the Medium: Partial changes applied on secret check errorIn Remediation: Either return nil changes on secret check failure (preventing partial application), or continue iterating through remaining secrets and collect all warnings. Medium: Diff always reports secret updates (noisy output)
Remediation: Consider separating the "ensure secret exists" concept from "update secret value." For Medium: CLI docs not updated
Low: Test coverage gap for glob + per-entry overrides in Sync
Low: Concurrency default inconsistency
Low: Guard variable in managedVariables is dead codeThe Low: No upper bound on --concurrencyThe Labels: PR adds new CLI commands in the repos package Previous run (16)ReviewAll prior high and medium findings have been addressed: glob-expanded repo config resolution now uses FindingsMedium
Low
Previous run (17)ReviewWell-structured feature PR that adds High: Wrong config resolution for glob-expanded repos in Sync
For glob-expanded repos (e.g.,
Remediation: Propagate the
Medium: Concurrency bounds not validated
Low findings
Labels: PR adds new CLI subcommands (repos diff, repos sync) in the repos package |
1dcb8e3 to
e8e581b
Compare
|
🤖 Finished Review · ✅ Success · Started 12:55 AM UTC · Completed 1:06 AM UTC |
e8e581b to
f71d575
Compare
|
🤖 Finished Review · ✅ Success · Started 1:54 AM UTC · Completed 2:10 AM UTC |
Superseded by updated review
f71d575 to
466a3e0
Compare
|
🤖 Finished Review · ✅ Success · Started 2:17 AM UTC · Completed 2:30 AM UTC |
466a3e0 to
77aa6e4
Compare
|
🤖 Finished Review · ✅ Success · Started 2:34 AM UTC · Completed 2:47 AM UTC |
77aa6e4 to
bc53dd5
Compare
|
🤖 Review · |
bc53dd5 to
92ee627
Compare
|
🤖 Finished Review · ❌ Failure · Started 2:59 AM UTC · Completed 3:09 AM UTC |
Implements ADR-0057 PR 8: three new repos subcommands for managing per-repo installations via the repos.yaml manifest. - repos add: add repo entries to the manifest (with optional --install) - repos remove: remove entries from manifest (with optional --uninstall) - repos uninstall: tear down fullsend from repos without modifying manifest Key fixes from review: - Fix glob-matched repos WIF cleanup via resolveConfigWithGlobs helper - Fix silent WIF provider deletion skip (now returns error) - Add repoNamePattern validation in AddToManifest - Add confirmGlobAction for destructive glob operations - Add manifest.Validate() calls to add/remove/uninstall commands - Add concurrency validation gated on --uninstall flag Also fixes a pre-existing WIF provider leak in batch_install cleanup paths: splitProjectAdapter.DeletePerRepoWIF now deletes the WIF provider from the inference project in addition to deregistering from the mint. BREAKING CHANGE: repos install no longer accepts --repo flag; use positional arguments instead (e.g. `fullsend repos install acme/api` instead of `fullsend repos install --repo acme/api`). Signed-off-by: Greg Allen <gallen@fullsend.ai> Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> Signed-off-by: Greg Allen <gallen@redhat.com>
92ee627 to
94e0b1a
Compare
|
🤖 Finished Review · ✅ Success · Started 3:13 AM UTC · Completed 3:21 AM UTC |
Signed-off-by: Greg Allen <gallen@fullsend.ai> Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> Signed-off-by: Greg Allen <gallen@redhat.com>
94e0b1a to
3d80470
Compare
|
🤖 Finished Review · ✅ Success · Started 10:44 AM UTC · Completed 10:54 AM UTC |
Summary
fullsend repos diffcommand — read-only preview of configuration drift between therepos.yamlmanifest and actual forge state for installed reposfullsend repos synccommand — writes variables and secrets to reconcile installed repos with the manifestFULLSEND_MINT_URL,FULLSEND_GCP_REGION,FULLSEND_PER_REPO_INSTALL) and 1 secret (FULLSEND_GCP_PROJECT_ID); does not touch scaffold shim version or harness files (managed byrepos upgrade)run*()pattern from feat(repos)!: add, remove, install, uninstall subcommands #4081 withtestClientDI for integration testingImplements PR 6 from the repos management plan.
Files changed
internal/repos/sync.goDiff(),Sync(),FormatDiffTable()with semaphore-bounded concurrencyinternal/repos/sync_test.gointernal/cli/repos.goreposDiffConfig/reposSyncConfigstructs,runReposDiff()/runReposSync()functions, cobra command wiringinternal/cli/repos_test.gorun*()directly with fake clientsTest plan
go test ./internal/repos/— all 37 sync tests passgo test ./internal/cli/— all repos CLI tests pass (flag tests + integration tests)go build ./...— clean build🤖 Generated with Claude Code