Skip to content

ci: adopt org-infra reusable release workflows - #61

Merged
jflowers merged 3 commits into
unbound-force:mainfrom
sonupreetam:428-adopt-org-infra-release-workflows
Aug 12, 2026
Merged

ci: adopt org-infra reusable release workflows#61
jflowers merged 3 commits into
unbound-force:mainfrom
sonupreetam:428-adopt-org-infra-release-workflows

Conversation

@sonupreetam

Copy link
Copy Markdown
Contributor

Summary

Replace inline preflight and GoReleaser jobs with org-infra reusable workflow callers (reusable_release_preflight.yml + reusable_release_goreleaser.yml @ v0.7.1).

Changes

release.yml

  • Preflight: Replaced ~130 lines of inline validation logic with a single reusable workflow call
  • GoReleaser: Replaced ~40 lines of inline GoReleaser setup with a single reusable workflow call
  • New inputs: Added skip_semver_check, skip_ci_checks, skip_unreleased_check for debugging
  • CI checks: Explicitly specified via ci_checks: '["Build and Test"]'
  • check-signing-secrets: New job since the reusable preflight doesn't output has_signing_secrets
  • sign-macos: Stays inline (unchanged), now uses needs.preflight.outputs.tag instead of inputs.tag

.goreleaser.yaml

  • Added release.extra_files to upload generated Homebrew cask as a release asset (previously done by the inline release job's gh release upload step)

Key improvements over inline implementation

Feature Inline (before) Reusable (after)
Re-run after partial failure Smart but inline Standardized smart detection from org-infra
Semver ordering sort -V (breaks on pre-releases) Python semver library (spec-compliant)
CI check names Hardcoded in bash Configurable ci_checks JSON array input
Skip controls None 3 skip inputs for debugging
Tag creation git tag -a + git push GitHub API (annotated tags)

Part of unbound-force/unbound-force#428

@sonupreetam
sonupreetam requested a review from a team as a code owner August 5, 2026 11:08
@sonupreetam
sonupreetam force-pushed the 428-adopt-org-infra-release-workflows branch from e26f824 to 9914bc4 Compare August 5, 2026 11:21
@sonupreetam
sonupreetam marked this pull request as draft August 5, 2026 11:54
@jflowers jflowers moved this to In Progress 📋 in Unbound Force Planning Aug 6, 2026
@sonupreetam
sonupreetam force-pushed the 428-adopt-org-infra-release-workflows branch 2 times, most recently from 5b60a01 to 86a762c Compare August 12, 2026 13:10
@sonupreetam
sonupreetam marked this pull request as ready for review August 12, 2026 13:12
@yvonnedevlinrh
yvonnedevlinrh force-pushed the 428-adopt-org-infra-release-workflows branch from 084ea61 to 274e749 Compare August 12, 2026 16:23
yvonnedevlinrh
yvonnedevlinrh previously approved these changes Aug 12, 2026

@yvonnedevlinrh yvonnedevlinrh left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Review Summary

Verdict: APPROVE — CI passes, SHA pin verified, permissions correctly scoped.

Findings

MEDIUM

  1. CHANGELOG Go version claim without corresponding change — The "Security" subsection states "Go bumped to 1.25.12 for crypto/tls vulnerability fix" but go.mod/go.sum are not in the changed file list for this PR. If the bump landed in a prior commit on this branch, the entry is accurate but potentially misleading about scope. Worth clarifying.

  2. Token-in-URL pattern in sign-macos (pre-existing carry-over) — The Homebrew tap clone constructs a URL embedding the token via shell expansion (https://x-access-token:${HOMEBREW_TAP_GITHUB_TOKEN}@github.com/...). If the step produces verbose output (set -x, git remote -v), the token could leak to runner logs. Consider migrating to git config url.insteadOf or gh CLI token injection. Not introduced by this PR — carried over from the previous inline implementation.

LOW

  • Deletion of .opencode/agents/reviewer-testing.md is not mentioned in the PR description or CHANGELOG.
  • Minor header comment style inconsistency between ci.yml (# --) and release.yml (# =======).
  • awk SHA-patching script in sign-macos is fragile if the cask format changes (mitigated by existing grep -q integrity check).
  • Workflow-level concurrency group was removed; concurrent workflow_dispatch invocations are guarded by the reusable preflight's tag-uniqueness check but lack admission-level deduplication.

Verified

  • Reusable workflow SHA 0c784711926c9864f027ec565fd7c06a382d80f8 confirmed against complytime/org-infra tag v0.7.1
  • Workflow-level permissions: {} enforces least privilege; per-job permissions correctly scoped
  • Three skip_* boolean inputs default to false, passed through to reusable workflow — no injection vector
  • agentkit_test.go improvements convert ignored errors to t.Fatalf and strengthen overwrite assertions
  • Spec-first, branching convention, and documentation gate requirements satisfied

Review generated by /uf.review-pr (AI-assisted).

Replace inline preflight and GoReleaser jobs with org-infra
reusable workflow callers (reusable_release_preflight.yml +
reusable_release_goreleaser.yml @ v0.7.1).

Key improvements over the inline implementation:
- Smart re-run detection (tag at HEAD = re-run, not error)
- Semver-aware Python comparator (replaces sort -V which
  breaks on pre-releases)
- Configurable CI checks via ci_checks input
- Skip inputs for debugging (skip_semver_check,
  skip_ci_checks, skip_unreleased_check)
- Tag creation via GitHub API (annotated tags)

sign-macos job stays inline — extracting that into a
reusable is a separate concern. A new check-signing-secrets
job provides the has_signing_secrets output that the
reusable preflight does not expose.

GoReleaser config gains release.extra_files to upload
generated Homebrew cask as a release asset (previously
done by the inline release job).

Ref: unbound-force/unbound-force#428

Assisted-by: OpenCode (claude-opus-4-6)
Signed-off-by: sonupreetam <spreetam@redhat.com>
- Resolve 24 stash conflict markers across 15 files
- Remove workflow-level concurrency (conflicts with reusable preflight)
- Add allow_prerelease to release preflight inputs
- Add signing credential cleanup step (if: always())
- Add Homebrew cask SHA verification after patching
- Add CI workflow header comment (CI-011)
- Expand CHANGELOG with Added/Changed/Security sections
- Update AGENTS.md convention packs and recent changes
- Align CLAUDE.md pack list with AGENTS.md
- Strengthen agentkit test assertions and error handling

Signed-off-by: sonupreetam <spreetam@redhat.com>
- Distinguish os.ErrNotExist from other os.Stat errors in Scaffold
- Wrap os.WriteFile error with context in Scaffold
- Add new commands, agents, and skills to CHANGELOG
- Broaden Security section to cover all SHA-pinned actions
- Add make coverage and make check-coverage to README and CONTRIBUTING

Signed-off-by: sonupreetam <spreetam@redhat.com>
@jflowers
jflowers force-pushed the 428-adopt-org-infra-release-workflows branch from 184dff6 to beaf60b Compare August 12, 2026 17:30
@jflowers
jflowers self-requested a review August 12, 2026 17:33
@jflowers
jflowers merged commit 581835e into unbound-force:main Aug 12, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

Status: Ready for Review 👀

Development

Successfully merging this pull request may close these issues.

4 participants