Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Add Homebrew tap recipe and Debian .deb packaging#5

Merged
johnpmitsch merged 4 commits into
mainquicknode/cli:mainfrom
package_managementquicknode/cli:package_managementCopy head branch name to clipboard
Jun 5, 2026
Merged

Add Homebrew tap recipe and Debian .deb packaging#5
johnpmitsch merged 4 commits into
mainquicknode/cli:mainfrom
package_managementquicknode/cli:package_managementCopy head branch name to clipboard

Conversation

@johnpmitsch
Copy link
Copy Markdown
Collaborator

@johnpmitsch johnpmitsch commented Jun 5, 2026

Summary

Builds on the cargo-dist release pipeline merged via #1, adding two more channels for the next release:

  • Homebrew (manual): a Justfile recipe (release-update-homebrew-tap) downloads the cargo-dist-generated formula from a release and stages it in a local clone of quicknode/homebrew-tap. README documents brew install quicknode/tap/qn.

  • Debian .deb: a new reusable workflow (publish-deb.yml) is wired into the cargo-dist publish pipeline. On each release it downloads the prebuilt linux-gnu binary per arch, packages it with cargo-deb --no-build, and uploads qn_X.Y.Z_amd64.deb and qn_X.Y.Z_arm64.deb back to the GitHub Release as assets. Users install with dpkg -i ./qn_X.Y.Z_amd64.deb or apt install ./qn_X.Y.Z_amd64.deb. A hosted apt repo is out of scope for v1.

Also brings this branch's two publish workflows (publish-crates.yml, publish-docker.yml) in line with the post-v0.1.0 fixes that landed on main separately — the contents: read grant on publish-crates and the trimmed attestations: write on publish-docker that fixed the original startup_failure.

What ships at the next release

  • All of v0.1.0's outputs (crates.io publish, GHCR multi-arch image, GitHub Release archives + SLSA attestations).
  • Plus: qn_X.Y.Z_amd64.deb and qn_X.Y.Z_arm64.deb attached to the Release page.
  • Homebrew formula generated as a release artifact (still requires the maintainer-run Justfile recipe to land in the tap repo).

Test plan

  • cargo fmt --check, cargo clippy -D warnings, cargo test --all all green locally on this branch.
  • dist plan exits 0 (the cargo-dist "is the workflow up to date?" check passes).
  • cargo deb --no-build --no-strip validated locally: produces a structurally valid .deb with the right control metadata (Package: qn, Version: 0.1.0-1) and file layout (/usr/bin/qn, /usr/share/doc/qn/{README,LICENSE,copyright}).
  • Homebrew Justfile recipe exercised against quicknode/homebrew-tap v0.1.0 — formula landed cleanly.
  • PR's release.yml plan job runs green (verifies dist plan in CI as well as locally).
  • After merge, cut a tag and confirm the custom-publish-deb job succeeds in CI and the .deb files appear on the release page.

🤖 Generated with Claude Code

cargo-dist generates qn.rb as a release artifact regardless of whether
the "homebrew" entry is in publish-jobs. Until we have a
HOMEBREW_TAP_TOKEN secret (which needs a Quicknode-owned PAT we don't
yet have), the auto-push step stays disabled and this Justfile recipe
lets a maintainer manually sync the formula to a local clone of
quicknode/homebrew-tap.

Usage:

  just release-update-homebrew-tap 0.1.0 ~/qn/homebrew-tap

The recipe downloads qn.rb from the release, drops it at
Formula/qn.rb in the tap clone, commits with a clean message, and
prints the git push command (it does not push automatically — the
maintainer reviews and pushes themselves).

When HOMEBREW_TAP_TOKEN exists we'll add "homebrew" back to
publish-jobs in dist-workspace.toml, the cargo-dist publish-homebrew
job takes over, and this recipe becomes a fallback for manual recovery.
The Quicknode tap at quicknode/homebrew-tap is populated with the v0.1.0
formula (via release-update-homebrew-tap), so `brew install
quicknode/tap/qn` works for anyone with access to the tap repo. Also
add the crates.io path and fix the source-build remote (which still
pointed at the never-created quicknode/qn instead of quicknode/cli).

Drop the trailing "after pushing, paste this README snippet" hint from
the release-update-homebrew-tap recipe — the README is now updated and
the hint would just rot.
Adds Debian package builds to the cargo-dist release pipeline:

* [package.metadata.deb] in Cargo.toml configures cargo-deb to produce
  qn_X.Y.Z_<arch>.deb files (using the binary name in the filename,
  not the crate name).
* .github/workflows/publish-deb.yml is a reusable workflow that, per
  arch (amd64/arm64), downloads the prebuilt linux-gnu archive from
  the GitHub release, stages the binary where cargo-deb expects it,
  packages with --no-build --no-strip, and uploads the .deb back to
  the release as an asset.
* dist-workspace.toml gets ./publish-deb in publish-jobs and
  contents: write in github-custom-job-permissions (needed for `gh
  release upload`).

Hosted apt repo (aptly/reprepro + GPG signing) is out of scope for v1.
Users install via `dpkg -i ./qn_X.Y.Z_amd64.deb` or `apt install
./qn_X.Y.Z_amd64.deb` after downloading from the release page.

Also brings this branch's publish-crates.yml and publish-docker.yml
in line with the post-v0.1.0 fixes that landed on main:

* publish-crates.yml gains `permissions: contents: read` so its
  reusable-workflow GITHUB_TOKEN can actually checkout this internal
  repo (without it, actions/checkout gets a 404).
* publish-docker.yml drops `attestations: write` from its top-level
  permissions — that grant exceeded what the caller offered and was
  the original cause of the v0.1.0 startup_failure.
* The release.yml regeneration also drops the homebrew publish job
  (no HOMEBREW_TAP_TOKEN yet — we publish manually via
  `just release-update-homebrew-tap`).

Validated locally: cargo deb produced a structurally valid .deb with
the right control metadata and /usr/bin/qn + /usr/share/doc/qn/ layout.
# Conflicts:
#	.github/workflows/publish-docker.yml
#	.github/workflows/release.yml
#	README.md
#	dist-workspace.toml
@johnpmitsch johnpmitsch merged commit a0a3052 into main Jun 5, 2026
12 checks passed
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.

2 participants

Morty Proxy This is a proxified and sanitized view of the page, visit original site.