Skip to content

Fix v4.0.0 release fallout: install.sh assets, AUR key fail-fast, docs - #194

Merged
jeremy merged 6 commits into
masterfrom
v4-release-followups
Jul 27, 2026
Merged

Fix v4.0.0 release fallout: install.sh assets, AUR key fail-fast, docs#194
jeremy merged 6 commits into
masterfrom
v4-release-followups

Conversation

@jeremy

@jeremy jeremy commented Jul 27, 2026

Copy link
Copy Markdown
Member

Follow-ups from the v4.0.0 stable release (run 30305193571).

What broke

  • scripts/install.sh is broken in production. v4.0.0 became latest, and the installer still fetches the v3 asset scheme (fizzy-<os>-<arch> bare binaries + SHA256SUMS-<os>-<arch>.txt), which GoReleaser no longer publishes. Every curl | bash install currently 404s.
  • The aur-publish job failed with Load key "/home/runner/.ssh/aur": invalid format — the stored AUR_KEY secret content is not a parseable OpenSSH key (likely flattened newlines). This was the first run to ever exercise it.

Changes

  • install.sh: rewritten for the GoReleaser layout — downloads fizzy_<ver>_<os>_<arch>.tar.gz (.zip on Windows), verifies against the single checksums.txt, extracts the binary. Fixed as soon as this merges, since the installer is served from the repo.
  • publish-aur.sh: writes the key with printf | tr -d '\r' and validates it with ssh-keygen -y immediately, failing with a clear remediation message (gh secret set AUR_KEY --env release < keyfile) instead of dying mid-clone.
  • README: Homebrew install is now brew install --cask basecamp/tap/fizzy (cask is live in basecamp/homebrew-tap); dropped the robzolkos tap instructions and the stale "not yet released" warning.
  • RELEASING.md: corrected the secret inventory (RELEASE_CLIENT_ID/RELEASE_APP_PRIVATE_KEY/AUR_KEY live in the release environment, not repository level; HOMEBREW_TAP_TOKEN is minted per-run by the cli-release-bot App), documented the multi-line secret pitfall, fixed the AUR setup steps to include local key validation, and added a tap-migration ordering runbook.

Verification

  • install.sh run live against v4.0.0 on darwin-arm64 (this Mac), linux-amd64 (Debian container), and native Arch x86_64 — all install and report fizzy version 4.0.0.
  • The generated PKGBUILD/.SRCINFO were build-tested in an Arch container: makepkg builds 4.0.0 from the source tarball, .SRCINFO matches makepkg --printsrcinfo, the installed package runs and ships completions + license. (The PKGBUILD had never been exercised — the AUR job always died at SSH.)
  • The fail-fast path was tested with a garbage AUR_KEY: PKGBUILD generation completes, then the script exits with the clear error.

Not in this PR (pending @robzolkos)

  • Re-store AUR_KEY from a validated key file and gh run rerun 30305193571 --failed.
  • Merge the tap migration on robzolkos/homebrew-fizzy-cli.

Summary by cubic

Fixes v4.0.0 installs by switching the installer to GoReleaser archives with exact filename checksum matching and safer extraction. Hardens AUR publishing with fail-fast, non-interactive key checks; updates Homebrew docs and release secret setup.

  • Bug Fixes

    • Rewrites scripts/install.sh to download fizzy_<ver>_<os>_<arch>.tar.gz (Windows .zip), verify against checksums.txt by exact archive name (tolerates leading *), extract with unzip or zip-capable tar, and error clearly if neither is available.
    • Updates scripts/publish-aur.sh to preserve newlines and strip CRs when writing AUR_KEY, validate non-interactively with ssh-keygen -y (stdin from /dev/null) to fail fast on invalid or passphrase-protected keys, and guard missing AUR_KEY with a copy-pasteable remediation (gh secret set AUR_KEY --env release -R basecamp/fizzy-cli < keyfile).
  • Docs

    • README: Homebrew install is now brew install --cask basecamp/tap/fizzy; prereleases are available from Releases.
    • RELEASING.md: all release credentials live in the release environment; adds exact gh commands with -R basecamp/fizzy-cli (multi-line secret example included), notes RELEASE_CLIENT_ID uses gh variable set, documents multi-line secret pitfalls and AUR key validation, and adds tap migration ordering.

Written for commit 6d7268c. Summary will update on new commits.

Review in cubic

The v4.0.0 stable release exposed three issues:

- scripts/install.sh still fetched the v3 asset scheme (bare
  fizzy-<os>-<arch> binaries + per-platform SHA256SUMS files), which no
  longer exists. Rewrite for the GoReleaser layout: download
  fizzy_<ver>_<os>_<arch>.tar.gz (.zip on Windows), verify against the
  single checksums.txt, extract the binary. Verified live against
  v4.0.0 on darwin-arm64, linux-amd64 (container + native Arch).

- The aur-publish job failed with SSH "invalid format" because the
  stored AUR_KEY secret content isn't a parseable key. Harden
  publish-aur.sh: strip CRs when writing the key and fail fast with
  ssh-keygen -y and a clear remediation message instead of dying
  mid-clone. The generated PKGBUILD/.SRCINFO were build-tested with
  makepkg in an Arch container (package installs, binary and
  completions land correctly).

- Docs: README now points Homebrew installs at the published
  basecamp/tap/fizzy cask (the robzolkos tap instructions and stale
  "not yet released" warning are gone). RELEASING.md corrects the
  secret inventory — all release credentials live in the release
  environment, not repository level — documents the multi-line secret
  pitfall that broke AUR_KEY, and adds the stable-release-before-
  tap-migration ordering runbook.
Copilot AI review requested due to automatic review settings July 27, 2026 21:22
@github-actions

Copy link
Copy Markdown

Sensitive Change Detection (shadow mode)

This PR modifies control-plane files:

  • scripts/publish-aur.sh

Shadow mode — this check is informational only. When activated, changes to these paths will require approval from a maintainer.

@github-actions github-actions Bot added the bug Something isn't working label Jul 27, 2026

Copilot AI 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.

Pull request overview

This PR addresses v4.0.0 release follow-ups by fixing the curl | bash installer to match the new GoReleaser asset layout, making AUR publishing fail fast with a clear SSH key validation error, and updating release/docs guidance to reflect the current distribution setup.

Tip

If you aren't ready for review, convert to a draft PR.
Click "Convert to draft" or run gh pr ready --undo.
Click "Ready for review" or run gh pr ready to reengage.

Changes:

  • Update scripts/install.sh to download versioned archives, verify against checksums.txt, and extract/install the binary.
  • Add early AUR_KEY normalization + validation to scripts/publish-aur.sh to avoid mid-job failures.
  • Refresh release/docs guidance (RELEASING.md, README.md) for the current Homebrew/AUR secrets and install paths.

Reviewed changes

Copilot reviewed 4 out of 4 changed files in this pull request and generated 2 comments.

File Description
scripts/publish-aur.sh Normalizes and validates AUR_KEY before attempting AUR git operations.
scripts/install.sh Switches installer to GoReleaser archive assets + checksums.txt verification and extraction.
RELEASING.md Updates secret inventory guidance and documents AUR/tap migration steps.
README.md Updates Homebrew install instructions and clarifies RC distribution.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread scripts/install.sh Outdated
Comment thread scripts/install.sh
Match the archive name as an exact awk field (tolerating the optional
binary-mode "*" prefix) instead of an unanchored regex grep, and fail
zip extraction with a clear message when neither unzip nor a
zip-capable tar is available rather than letting GNU tar error
obscurely.
Copilot AI review requested due to automatic review settings July 27, 2026 21:30

Copilot AI 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.

Pull request overview

Copilot reviewed 4 out of 4 changed files in this pull request and generated 1 comment.

Comment thread scripts/publish-aur.sh Outdated
Redirect stdin from /dev/null so a passphrase-protected key fails the
check immediately instead of blocking CI on a passphrase prompt.

Copilot AI 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.

Pull request overview

Copilot reviewed 4 out of 4 changed files in this pull request and generated 2 comments.

Comment thread scripts/install.sh
Comment thread scripts/publish-aur.sh Outdated
Copilot AI review requested due to automatic review settings July 27, 2026 21:40
Fail with the remediation command instead of set -u's unbound-variable
error when the secret is missing.

Copilot AI 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.

Pull request overview

Copilot reviewed 4 out of 4 changed files in this pull request and generated 1 comment.

Comments suppressed due to low confidence (1)

scripts/publish-aur.sh:90

  • With set -u, this block will exit with an unhelpful AUR_KEY: unbound variable error when the secret is missing, before the new fail-fast validation runs. Add an explicit check for an empty/unset AUR_KEY so CI fails with a clear remediation message.
	sha256sums = $SHA256

pkgname = fizzy-cli
EOF

Comment thread RELEASING.md Outdated
Copilot AI review requested due to automatic review settings July 27, 2026 21:43

Copilot AI 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.

Pull request overview

Copilot reviewed 4 out of 4 changed files in this pull request and generated 1 comment.

Comments suppressed due to low confidence (1)

scripts/publish-aur.sh:98

  • This remediation command also omits -R basecamp/fizzy-cli. Including the repo makes the guidance unambiguous and consistent with the release docs.
  echo "ERROR: AUR_KEY is not a valid unencrypted SSH private key." \
       "Re-store it with newlines intact: gh secret set AUR_KEY --env release < keyfile"

Comment thread scripts/publish-aur.sh Outdated
Include -R basecamp/fizzy-cli in the publish-aur.sh error messages and
note that RELEASE_CLIENT_ID is set with gh variable set, not gh secret
set.
Copilot AI review requested due to automatic review settings July 27, 2026 21:47

Copilot AI 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.

Pull request overview

Copilot reviewed 4 out of 4 changed files in this pull request and generated 1 comment.

Comment thread RELEASING.md Outdated
Copilot AI review requested due to automatic review settings July 27, 2026 22:00

Copilot AI 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.

Pull request overview

Copilot reviewed 4 out of 4 changed files in this pull request and generated no new comments.

@jeremy
jeremy merged commit ac3b30d into master Jul 27, 2026
21 checks passed
@jeremy
jeremy deleted the v4-release-followups branch July 27, 2026 22:04
robzolkos added a commit that referenced this pull request Jul 27, 2026
* Document the Fizzy 3.x Homebrew upgrade path

#194 replaced the stale Homebrew block but did not carry over upgrade
instructions, so there is currently no guidance in this repo for users
on the robzolkos/fizzy-cli tap.

The order matters and is not obvious. A cask will not overwrite a
bin/fizzy symlink owned by a formula, so installing the cask while the
formula is still linked silently skips the binary; uninstalling the
formula afterwards then leaves no fizzy on PATH at all. brew unlink
first avoids that, mirroring what Homebrew's own automatic migration
does (unlink, cleanup, install --cask).

Also notes that brew migrate fizzy-cli, which Homebrew prints in its
migration output, is a no-op for a formula-to-cask move.

Retitles the section macOS and Linux, since the generated cask ships
on_linux blocks for amd64 and arm64.

* Clarify that Homebrew never auto-taps third-party taps

Verified on Homebrew 6.0.13: a fully-qualified reference to an untapped
third-party tap does not tap it.

  $ brew info robzolkos/fizzy-cli/fizzy-cli
  Error: No available formula or cask with the name "...".
  This command requires the tap robzolkos/fizzy-cli.
  If you trust this tap, tap it explicitly and then try again:
    brew tap robzolkos/fizzy-cli

So the brew tap step is required, not optional. Reworded to say so
explicitly for both the migration and direct-install cases.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bug Something isn't working

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants