Skip to content

fix(release): resolve Windows assets by canonical binary name - #49

Merged
rianjs merged 2 commits into
mainfrom
fix/release-asset-binary-match
Sep 25, 2026
Merged

rianjs merged 2 commits into
mainfrom
fix/release-asset-binary-match

Conversation

@rianjs

@rianjs rianjs commented Sep 25, 2026

Copy link
Copy Markdown
Contributor

Summary

  • fix shared release asset resolution for GoReleaser Windows archives whose metadata lists cfl.exe while identity uses cfl
  • move the resolver into a tested composite action used by release.yml
  • fail loudly when an architecture asset is missing instead of allowing jq errors inside echo command substitutions to be ignored
  • add a fixture matching the cfl 1.3.97 artifact metadata and a missing-amd64 failure check

Evidence

  • Reproduced against /tmp/cfl-1397-dist/artifacts.json: resolves cfl_1.3.97_windows_amd64.zip and cfl_1.3.97_windows_arm64.zip
  • bash actions/release-assets/test_resolve.sh
  • bash -n actions/release-assets/resolve.sh actions/release-assets/test_resolve.sh
  • actionlint and YAML parsing passed locally
  • git diff --check passed

No release was triggered and the @v1 pointer was not changed.

@rianjs

rianjs commented Sep 25, 2026

Copy link
Copy Markdown
Contributor Author

TDD assessment — PR #49

Major

  • actions/release-assets/test_resolve.sh:33 runs the resolver directly with WINGET='[]', while actions/release-assets/action.yml:21-25,35-39 adds the composite action's separate WinGet input, environment wiring, and output. The CI job only invokes that script (.github/workflows/test-actions.yml:211-212), so it never proves a nonempty WinGet matrix reaches the winget-matrix output consumed by the release fan-out (.github/workflows/release.yml:405). A wrong input/output key or a regression that only affects the second matrix would still pass CI and silently leave a declared WinGet package without a submission. Add one workflow-level action invocation with both matrices populated, then assert both action outputs contain the expected two Windows archive names.

The existing direct test does cover the reported cfl fixture shape (extra.ID: default, extra.Binaries: ["cfl.exe"]) and the missing-amd64 jq failure path.

@rianjs-bot rianjs-bot Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Automated PR Review

Reviewed commit: 446715fe42b0
Profile: codex-rianjs-bot - Posting as: rianjs-bot[bot]

Summary

Reviewer Findings
automation:ci-release 0
policies:conventions 0

Reviewer Coverage

  • automation:ci-release — complete (broad); skipped: none; constraints: Review limited to the assigned CI/release workflow, composite action, resolver, and fixtures.
  • policies:conventions — complete (broad); inspected 5 assigned files (7 inspected across reviewers): .github/workflows/release.yml, .github/workflows/test-actions.yml, actions/release-assets/action.yml, actions/release-assets/resolve.sh, actions/release-assets/test_resolve.sh; skipped: none; constraints: Shared cli-common convention documents were not available locally or in the supplied review context; review is limited to repository-visible conventions and assigned changes.
Inspected files (7)
  • .github/workflows/release.yml
  • .github/workflows/test-actions.yml
  • actions/release-assets/action.yml
  • actions/release-assets/resolve.sh
  • actions/release-assets/test_resolve.sh
  • actions/release-assets/testdata/artifacts.json
  • actions/release-assets/testdata/metadata.json

0 PR discussion threads considered. 0 summarized; 0 resolved.


Completed in 1m 15s | gpt-5.6-terra | cr 0.10.314
Field Value
Model gpt-5.6-terra
Reviewers automation:ci-release, policies:conventions
Engine codex_cli · gpt-5.6-terra
Reviewed by cr · rianjs-bot[bot]
Duration 1m 15s wall · 1m 36s compute
Cost unavailable
Tokens 342.5k in / 4.2k out

Per-workstream usage

  • orchestrator-selection — gpt-5.6-terra
    • In: 33.6k
    • Out: 463
    • Cache read: 29.2k
    • Cache create: unavailable
    • Cost: unavailable
    • Duration: 12s
  • automation:ci-release — gpt-5.6-terra
    • In: 120.5k
    • Out: 1.6k
    • Cache read: 90.1k
    • Cache create: unavailable
    • Cost: unavailable
    • Duration: 35s
  • policies:conventions — gpt-5.6-terra
    • In: 135.1k
    • Out: 1.6k
    • Cache read: 108.3k
    • Cache create: unavailable
    • Cost: unavailable
    • Duration: 43s
  • orchestrator-rollup — gpt-5.6-terra
    • In: 53.3k
    • Out: 499
    • Cache read: 45.3k
    • Cache create: unavailable
    • Cost: unavailable
    • Duration: 3s

@rianjs
rianjs merged commit 776a11f into main Sep 25, 2026
23 checks passed
@rianjs
rianjs deleted the fix/release-asset-binary-match branch September 25, 2026 16:05
piekstra added a commit to open-cli-collective/codereview-cli that referenced this pull request Oct 2, 2026
## Summary

Update only the reusable release workflow pin to `776a11fe7a86dccb73bccb5dbf3824fe2ec8d4af`, which includes the merged canonical Windows archive resolver in open-cli-collective/.github#49.

The failed v0.10.320 release lists `cr.exe` in each Windows archive's `extra.Binaries`, while the identity manifest declares `cr`. The old resolver returned zero matches and emitted empty matrices, preventing the Windows package jobs from starting. The updated resolver matches both architectures and fails loudly for missing assets.

## Evidence

Using the actual `dist` artifact from [the failed release](https://github.com/open-cli-collective/codereview-cli/actions/runs/36931823778):

| Resolver | AMD64 | ARM64 |
|---|---|---|
| Old pinned workflow | zero matches | matrix not produced |
| Updated shared action | `cr_v0.10.320_windows_amd64.zip` | `cr_v0.10.320_windows_arm64.zip` |

Both Chocolatey and WinGet matrices contain those exact published asset names. The shared resolver regression also verifies missing AMD64 assets fail loudly.

Validation: consumer workflow `actionlint` passes; shared resolver, Homebrew modernization/idempotency and alias tests pass; all 28 Chocolatey-push tests pass. The Windows PowerShell renderer was inspected but has not yet run here.

The intervening shared changes were inspected: action dependency pins, Homebrew install-step modernization and staged-path correction, and backward-compatible Chocolatey rendering. Existing package templates without URL placeholders keep their legacy path; this does not apply the static-URL migration staged in #634. Package identity, secrets, triggers, production code, and CI pins remain unchanged.

The fixture/artifact replay proves matrix resolution, not live Windows package publication. A successful subsequent release is still required. No published tag or asset is changed by this PR; workflow-only changes do not automatically mint a new release.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant