Add Scoop bucket manual-update Justfile recipe#16
Closed
johnpmitsch wants to merge 0 commit into
Closed
Conversation
6 tasks
johnpmitsch
added a commit
that referenced
this pull request
Jun 11, 2026
`release-prepare` ships the automated half of a release end-to-end: bump, PR, merge, tag, CI runs all the in-CI publish jobs. The other half (Homebrew, Scoop, AUR — currently maintainer-driven because we don't yet have the credentials to automate the pushes) was three separate `just release-update-*` invocations with three local clone paths to remember and three push commands to type. Easy to forget, easy to skip a channel. This commit collapses that to one wrapper: just release-sync-manual-channels Auto-detects the just-released version from the latest git tag, expects three sibling clones under ~/qn/ (the established convention across this repo's recipes), runs the three release-update-* recipes in sequence, then prints the three `git -C ... push` commands the maintainer reviews and runs to publish. Both arguments are optional and overridable: just release-sync-manual-channels ~/work/quicknode # alt root just release-sync-manual-channels ~/qn 0.1.4 # backfill Also folds in the `release-update-scoop-bucket` recipe (previously in PR #16, which is now redundant — close it after this lands). Scrubbed the invented secret-name reference from its comment per CLAUDE.md. Adds a "Quick release" section at the top of RELEASING.md showing the happy-path two-command flow: just release-prepare X.Y.Z # … wait for CI … just release-sync-manual-channels The detailed per-channel sections stay below it as reference for when something fails or the maintainer needs to drive a single channel manually.
johnpmitsch
added a commit
that referenced
this pull request
Jun 11, 2026
…install docs (#18) * Document Scoop and AUR install paths in README Scoop bucket has been seeded for v0.1.4 and the AUR qn-bin package is registered + installable via yay. Two new install snippets so users on Windows + Arch don't have to know about the GitHub Releases page. Homebrew was already in the install matrix. * Wire COPR publish into the release pipeline (Phase 7) Adds COPR (Fedora + EPEL) to the cargo-dist user_publish_jobs pipeline. Same shape as the existing crates.io / Docker / .deb publish jobs. Why the spec-file approach: copr-cli's only build entrypoint accepts SRPMs or spec files — it doesn't import prebuilt binary RPMs. So the binary-everywhere property we have for crates.io, GHCR, .deb, and AUR needed a thin spec whose %prep downloads the SLSA-attested upstream tarball cargo-dist already published, verifies it against the .sha256 sidecar, and then %install just lays the binary into the buildroot. COPR's mock chroot does this on each Fedora + EPEL chroot in ~30 seconds — no Rust toolchain involved, single trust chain. Why four secrets instead of one combined config blob: copr-cli only reads credentials from ~/.config/copr (no env-var fallback per copr/v3/helpers.py's config_from_file). The workflow has to assemble that file at runtime regardless. Splitting the four fields (login, username, token, copr_url) into separate repo secrets makes each one safe to paste as a single line (no multiline blob to get malformed) and lets the token be rotated without touching the other three. Changes: * packaging/qn-bin.spec — the thin spec. ExclusiveArch: x86_64 aarch64. Per-arch Source URL via ifarch, sha256 verification in %prep before %setup. * .github/workflows/publish-copr.yml — reusable workflow invoked by cargo-dist. Builds the SRPM from the spec (with QN_VERSION passed in from the dist manifest), assembles ~/.config/copr from the four COPR_* secrets, then dispatches via `copr-cli build --enable-net=on quicknode/qn <srpm>`. --enable-net=on is required because %prep curls the tarball; COPR's default mock has network disabled. * dist-workspace.toml — adds ./publish-copr to publish-jobs and grants `contents: read` via github-custom-job-permissions. * RELEASING.md — documents the COPR channel under CI publish channels and the four-secret provisioning flow. * release.yml — regenerated to include custom-publish-copr. The job is gated by cargo-dist on `!is_prerelease`, same as the others. Until all four COPR_* secrets are set on the repo, the job will fail loudly at the "Configure copr-cli" step with a clear error listing which fields are missing — the rest of the release continues to succeed. Earlier in this branch I went down a wrong path: a `release-build-copr-rpms` Justfile recipe + [package.metadata.generate-rpm] block that produced binary RPMs locally with cargo-generate-rpm. `copr-cli build` doesn't accept binary RPMs, so that path was a dead-end. Reset and rewrote before opening the PR for review. * Add release-sync-manual-channels + bring Scoop recipe into this PR `release-prepare` ships the automated half of a release end-to-end: bump, PR, merge, tag, CI runs all the in-CI publish jobs. The other half (Homebrew, Scoop, AUR — currently maintainer-driven because we don't yet have the credentials to automate the pushes) was three separate `just release-update-*` invocations with three local clone paths to remember and three push commands to type. Easy to forget, easy to skip a channel. This commit collapses that to one wrapper: just release-sync-manual-channels Auto-detects the just-released version from the latest git tag, expects three sibling clones under ~/qn/ (the established convention across this repo's recipes), runs the three release-update-* recipes in sequence, then prints the three `git -C ... push` commands the maintainer reviews and runs to publish. Both arguments are optional and overridable: just release-sync-manual-channels ~/work/quicknode # alt root just release-sync-manual-channels ~/qn 0.1.4 # backfill Also folds in the `release-update-scoop-bucket` recipe (previously in PR #16, which is now redundant — close it after this lands). Scrubbed the invented secret-name reference from its comment per CLAUDE.md. Adds a "Quick release" section at the top of RELEASING.md showing the happy-path two-command flow: just release-prepare X.Y.Z # … wait for CI … just release-sync-manual-channels The detailed per-channel sections stay below it as reference for when something fails or the maintainer needs to drive a single channel manually.
4f168ec to
15f22a1
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Adds
release-update-scoop-bucket— the Scoop equivalent ofrelease-update-homebrew-tapwe shipped with Phase 3. A maintainer-run command that downloads the Windows zip's sha256 from a release and writes a Scoop manifest (bucket/qn.json) into a local clone ofquicknode/scoop-bucket, then prints the git push command.The manifest includes
checkver = \"github\"and anautoupdateblock, so once a user has tapped the bucket,scoop updatefinds new versions on its own — we only need to run this recipe to keep the canonicalversionfield honest forscoop search.Usage
just release-update-scoop-bucket 0.1.4 ~/qn/scoop-bucketTest plan
just --listshows it).autoupdateblock whose$versionplaceholder is preserved unexpanded.quicknode/scoop-bucket(empty public repo), clone it, run the recipe against v0.1.4, push.scoop install quicknode/qn(orquicknode-cli) entry once the bucket is populated.