feat(repos): add manifest parser and validation for repos.yaml - #3002
Conversation
|
🤖 Finished Review · ✅ Success · Started 12:01 AM UTC · Completed 12:14 AM UTC |
PR Summary by QodoAdd repos.yaml manifest parsing, validation, and glob expansion
AI Description
Diagram
High-Level Assessment
Files changed (2)
|
Site previewPreview: https://ab458940-site.fullsend-ai.workers.dev Commit: |
Code Review by Qodo
1.
|
Codecov Report❌ Patch coverage is
📢 Thoughts on this report? Let us know! |
ReviewFindingsLow
Previous runReviewFindingsLow
Previous run (2)ReviewFindingsLow
Previous run (3)ReviewFindingsMedium
Low
Previous run (4)ReviewFindingsMedium
Low
Previous run (5)ReviewFindingsMedium
Low
Previous run (6)ReviewFindingsMedium
Low
Labels: New Go package implementing repos manifest feature (ADR 0057). Previous run (7)ReviewFindingsMedium
Low
Previous run (8)ReviewFindingsMedium
Low
Previous run (9)ReviewFindingsMedium
Low
Labels: New Go package implementing repos manifest feature (ADR 0057). |
e62477c to
3c23433
Compare
|
🤖 Finished Review · ✅ Success · Started 12:33 AM UTC · Completed 12:46 AM UTC |
3c23433 to
9da84af
Compare
|
🤖 Finished Review · ✅ Success · Started 12:55 AM UTC · Completed 1:08 AM UTC |
9da84af to
3bfad51
Compare
|
🤖 Finished Review · ✅ Success · Started 1:11 AM UTC · Completed 1:23 AM UTC |
3bfad51 to
f95df1d
Compare
|
🤖 Finished Review · ✅ Success · Started 1:36 AM UTC · Completed 1:48 AM UTC |
|
🤖 Finished Retro · ✅ Success · Started 4:48 PM UTC · Completed 4:55 PM UTC |
|
PR #3002 added a manifest parser for repos.yaml (567 lines Go + 1053 lines tests). Agent review was highly effective: qodo found 4 correctness/security bugs and fullsend-ai-review found 10 additional issues including a medium-severity SSRF vulnerability across 4 iterative review rounds. The PR author fixed or acknowledged all 14 findings. The sole human reviewer (ifireball) approved with zero comments after all agent-driven fixes were already applied, adding no incremental review value. The initial code was co-authored with Claude but contained SSRF vulnerabilities and correctness bugs, suggesting the code agent could benefit from security-hardening guidance for HTTP client code. Proposals filed
|
Implements PR 4 from the repos management plan (ADR 0057): - internal/repos/status.go: Status() compares manifest desired state against actual forge state with parallel API calls, drift detection for FULLSEND_MINT_URL, FULLSEND_GCP_REGION, and fullsend_ref, and extractWorkflowRef() for reading @ref from shim workflows. - internal/cli/repos.go: Wires the `fullsend repos` subcommand group with `repos status` supporting --manifest, --json, --repo, and --concurrency flags. - internal/repos/status_test.go: 23 tests covering installed/not installed, single and multi-field drift, glob expansion, repo filtering, API errors, .yml/.yaml fallback, per-repo overrides, multi-org, and concurrency. - internal/cli/repos_test.go: 17 tests covering command wiring, flag defaults, JSON and table rendering, exit codes, and column alignment. Depends on PRs fullsend-ai#3002 (manifest parser) and fullsend-ai#3001 (forge interface). Signed-off-by: Greg Allen <greg@fullsend.ai> Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> Signed-off-by: Greg Allen <gallen@redhat.com>
Implements PR 4 from the repos management plan (ADR 0057): - internal/repos/status.go: Status() compares manifest desired state against actual forge state with parallel API calls, drift detection for FULLSEND_MINT_URL, FULLSEND_GCP_REGION, and fullsend_ref, and extractWorkflowRef() for reading @ref from shim workflows. - internal/cli/repos.go: Wires the `fullsend repos` subcommand group with `repos status` supporting --manifest, --json, --repo, and --concurrency flags. - internal/repos/status_test.go: 23 tests covering installed/not installed, single and multi-field drift, glob expansion, repo filtering, API errors, .yml/.yaml fallback, per-repo overrides, multi-org, and concurrency. - internal/cli/repos_test.go: 17 tests covering command wiring, flag defaults, JSON and table rendering, exit codes, and column alignment. Depends on PRs fullsend-ai#3002 (manifest parser) and fullsend-ai#3001 (forge interface). Signed-off-by: Greg Allen <greg@fullsend.ai> Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> Signed-off-by: Greg Allen <gallen@redhat.com>
Add a "Secure HTTP clients" section to the Go contributing guide covering the SSRF protections any code that fetches config/user-supplied URLs must apply: prefer the shared internal/fetch.FetchURL helper, and if a custom client is unavoidable, enforce HTTPS-only (incl. redirects), internal-IP rejection via netutil, disabled proxies, timeouts, and size limits. Points to internal/fetch/fetch.go as the canonical reusable helper and internal/repos/manifest.go's fetchManifestURL/safeDialContext as a worked example (from PR fullsend-ai#3002). Also surfaces the topic in the AGENTS.md Go Code row so it is discoverable. Closes fullsend-ai#3024 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Signed-off-by: Shai Revivo <srevivo@redhat.com>
Summary
internal/repos/manifest.gowith full manifest schema types (Manifest,MintConfig,DefaultsConfig,RepoEntry,NullableString,ResolvedConfig)LoadManifestsupports local file and HTTPS URL sourcesValidateenforces schema rules (version, mint URL, repo format, duplicates, glob patterns)ExpandGlobsresolves wildcard repo patterns via forge APIResolveConfigimplements three-level field resolution (per-repo override > defaults > built-in)NullableStringdistinguishes omitted/null/set YAML states for correct fallback chain behaviorfullsend repossubcommands (ADR 0057, PR 2 of 8)Test plan
🤖 Generated with Claude Code