From e64b678c40e20881ec8ffd3b23380e288e042312 Mon Sep 17 00:00:00 2001 From: Jeremy Daer Date: Mon, 27 Jul 2026 20:48:16 -0700 Subject: [PATCH 1/4] Build darwin binaries and tarballs in the release workflow Finishes the darwin stub that's been commented out in release-build.yml since 2023 (9e39eaa). The deb/rpm packaging steps were already gated on matrix.os == 'linux', so adding darwin to the matrix just works: every os/arch pair now also produces quickhook---.tar.gz with the binary at the archive root, where tool managers like mise's github backend expect to find it. Linux tarballs also give bare-binary installs a path that doesn't require dpkg/rpm. Also repairs the pipeline: upload-artifact@v3 was retired in January 2025, so release runs have been failing on the upload side (dependabot only bumped the download half). v4 artifacts are immutable per name, so each matrix job uploads under release-- and the two verify workflows download with pattern: release-linux-* + merge-multiple, which reproduces the old single-artifact layout they expect. README: the Linux section becomes Binary downloads, with the stale v1.5.0 pre-'linux'-naming URLs fixed and tarball + mise instructions added. --- .github/workflows/release-build.yml | 21 +++++++++++------- .../workflows/release-verify-deb-ubuntu.yml | 3 ++- .github/workflows/release-verify-rpm-rhel.yml | 3 ++- .github/workflows/release.yml | 6 ++--- README.md | 22 ++++++++++++++----- 5 files changed, 36 insertions(+), 19 deletions(-) diff --git a/.github/workflows/release-build.yml b/.github/workflows/release-build.yml index d850d17..17c9962 100644 --- a/.github/workflows/release-build.yml +++ b/.github/workflows/release-build.yml @@ -13,17 +13,19 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - os: [linux] + os: [linux, darwin] arch: [amd64, arm64] steps: - uses: actions/checkout@v4 - - uses: actions/setup-go@v3 + - uses: actions/setup-go@v7 with: go-version-file: 'go.mod' - - uses: ruby/setup-ruby@v1.146.0 + - uses: ruby/setup-ruby@v1 + if: ${{ matrix.os == 'linux' }} with: ruby-version: '3.1' - run: gem install fpm + if: ${{ matrix.os == 'linux' }} - name: Set version run: sed -i "s/VERSION = \"[^\"]*\"/VERSION = \"${{ inputs.version }}\"/" quickhook.go - name: Build @@ -54,12 +56,15 @@ jobs: --version ${{ inputs.version }} \ --architecture ${{ matrix.arch }} \ --chdir build . - # - name: Copy binaries - # if: ${{ matrix.os == 'darwin' }} - # run: | - # cp build/usr/bin/quickhook quickhook-${{ matrix.os }}-${{ matrix.arch }} - - uses: actions/upload-artifact@v3 + # Binary at the archive root so tool managers (e.g. mise's github + # backend) find the executable without path overrides. + - name: Package tarballs + run: | + tar -czf quickhook-${{ inputs.version }}-${{ matrix.os }}-${{ matrix.arch }}.tar.gz -C build/usr/bin quickhook + - uses: actions/upload-artifact@v4 with: + name: release-${{ matrix.os }}-${{ matrix.arch }} path: | *.deb *.rpm + *.tar.gz diff --git a/.github/workflows/release-verify-deb-ubuntu.yml b/.github/workflows/release-verify-deb-ubuntu.yml index 45d7a8f..7b9c03e 100644 --- a/.github/workflows/release-verify-deb-ubuntu.yml +++ b/.github/workflows/release-verify-deb-ubuntu.yml @@ -14,7 +14,8 @@ jobs: steps: - uses: actions/download-artifact@v4 with: - name: artifact + pattern: release-linux-* + merge-multiple: true - run: | dpkg --info quickhook-${{ inputs.version }}-linux-amd64.deb dpkg --contents quickhook-${{ inputs.version }}-linux-amd64.deb diff --git a/.github/workflows/release-verify-rpm-rhel.yml b/.github/workflows/release-verify-rpm-rhel.yml index 58dc333..822d368 100644 --- a/.github/workflows/release-verify-rpm-rhel.yml +++ b/.github/workflows/release-verify-rpm-rhel.yml @@ -15,7 +15,8 @@ jobs: steps: - uses: actions/download-artifact@v4 with: - name: artifact + pattern: release-linux-* + merge-multiple: true - run: | rpm --package quickhook-${{ inputs.version }}-linux-amd64.rpm --query --info rpm --package quickhook-${{ inputs.version }}-linux-amd64.rpm --query --list diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 4ddca70..a2fa997 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -20,18 +20,18 @@ jobs: - id: version run: | echo "${{ inputs.version }}" | sed -E "s/^v?/version=/" >> $GITHUB_OUTPUT - build-linux: + build: uses: ./.github/workflows/release-build.yml needs: version with: version: ${{ needs.version.outputs.version }} verify-deb-ubuntu: uses: ./.github/workflows/release-verify-deb-ubuntu.yml - needs: [version, build-linux] + needs: [version, build] with: version: ${{ needs.version.outputs.version }} verify-rpm-rhel: uses: ./.github/workflows/release-verify-rpm-rhel.yml - needs: [version, build-linux] + needs: [version, build] with: version: ${{ needs.version.outputs.version }} diff --git a/README.md b/README.md index fdc4143..dd6bc85 100644 --- a/README.md +++ b/README.md @@ -62,18 +62,28 @@ $ brew install quickhook /opt/homebrew/Cellar/quickhook/1.6.2: 6 files, 3.8MB, built in 5 seconds ``` -### Linux +### Binary downloads -Installable debs and RPMs are available for the [latest release](https://github.com/dirk/quickhook/releases/latest). +Tarballs for Linux and macOS, plus installable debs and RPMs for Linux, are available for the [latest release](https://github.com/dirk/quickhook/releases/latest). Assets are named `quickhook---` with `linux`/`darwin` and `amd64`/`arm64`. ```sh +# Installing a tarball (the binary sits at the archive root) +curl -LO https://github.com/dirk/quickhook/releases/download/v1.6.2/quickhook-1.6.2-darwin-arm64.tar.gz +tar -xzf quickhook-1.6.2-darwin-arm64.tar.gz quickhook # then move it onto your $PATH + # Installing a .deb -wget https://github.com/dirk/quickhook/releases/download/v1.5.0/quickhook-1.5.0-amd64.deb -sudo apt install ./quickhook-1.5.0-amd64.deb +curl -LO https://github.com/dirk/quickhook/releases/download/v1.6.2/quickhook-1.6.2-linux-amd64.deb +sudo apt install ./quickhook-1.6.2-linux-amd64.deb # Installing a .rpm -wget https://github.com/dirk/quickhook/releases/download/v1.5.0/quickhook-1.5.0-amd64.rpm -sudo rpm --install quickhook-1.5.0-amd64.rpm +curl -LO https://github.com/dirk/quickhook/releases/download/v1.6.2/quickhook-1.6.2-linux-amd64.rpm +sudo rpm --install quickhook-1.6.2-linux-amd64.rpm +``` + +Or let [mise](https://mise.jdx.dev) fetch the right tarball for your platform: + +```sh +$ mise use --global github:dirk/quickhook ``` ## Usage From 182ba12cd6301678172c04348daa0e80367dbb4a Mon Sep 17 00:00:00 2001 From: Jeremy Daer Date: Mon, 27 Jul 2026 20:48:34 -0700 Subject: [PATCH 2/4] Draft the release automatically once builds verify MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Assets have been uploaded to releases by hand, which is likely why darwin binaries never shipped. A publish job (gated to main so test dispatches only build and verify) downloads every release-* artifact and drafts the GitHub release with --generate-notes and all assets attached — publishing the draft stays a human step. Severable from the darwin/tarball commit if hand-rolled uploads are preferred. --- .github/workflows/release.yml | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index a2fa997..584b158 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -35,3 +35,26 @@ jobs: needs: [version, build] with: version: ${{ needs.version.outputs.version }} + # Draft a release with all verified assets attached; publishing stays a + # human step. Skipped on non-main refs so test dispatches of this workflow + # only build and verify. + publish: + runs-on: ubuntu-latest + if: github.ref_name == github.event.repository.default_branch + needs: [version, verify-deb-ubuntu, verify-rpm-rhel] + permissions: + contents: write + steps: + - uses: actions/download-artifact@v4 + with: + pattern: release-* + merge-multiple: true + - name: Draft release with assets + env: + GH_TOKEN: ${{ github.token }} + run: | + gh release create "v${{ needs.version.outputs.version }}" \ + --repo "${{ github.repository }}" \ + --draft \ + --generate-notes \ + *.deb *.rpm *.tar.gz From bd703ea0b0f1e31ec671d06cd3ec70815b777056 Mon Sep 17 00:00:00 2001 From: Jeremy Daer Date: Mon, 27 Jul 2026 22:12:24 -0700 Subject: [PATCH 3/4] README: note tarballs ship from the first post-v1.6.2 release MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The Binary downloads examples reference v1.6.2 for copy-pasteability, but that release predates tarball assets — say so instead of implying the darwin tarball URL resolves today. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index dd6bc85..56571a5 100644 --- a/README.md +++ b/README.md @@ -64,7 +64,7 @@ $ brew install quickhook ### Binary downloads -Tarballs for Linux and macOS, plus installable debs and RPMs for Linux, are available for the [latest release](https://github.com/dirk/quickhook/releases/latest). Assets are named `quickhook---` with `linux`/`darwin` and `amd64`/`arm64`. +Tarballs for Linux and macOS, plus installable debs and RPMs for Linux, are available for the [latest release](https://github.com/dirk/quickhook/releases/latest). Assets are named `quickhook---` with `linux`/`darwin` and `amd64`/`arm64`. (Tarballs ship starting with the first release after v1.6.2; debs and RPMs are already available.) ```sh # Installing a tarball (the binary sits at the archive root) From 46ae7b407142710179ef84d1d4261fc5cb01cac7 Mon Sep 17 00:00:00 2001 From: Jeremy Daer Date: Mon, 27 Jul 2026 22:37:39 -0700 Subject: [PATCH 4/4] README: version-agnostic tarball example MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Tarballs ship starting with the first release after v1.6.2, so a v1.6.2-pinned tarball URL would never resolve. The deb/rpm examples keep v1.6.2 — those assets exist today. --- README.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 56571a5..165be22 100644 --- a/README.md +++ b/README.md @@ -67,9 +67,10 @@ $ brew install quickhook Tarballs for Linux and macOS, plus installable debs and RPMs for Linux, are available for the [latest release](https://github.com/dirk/quickhook/releases/latest). Assets are named `quickhook---` with `linux`/`darwin` and `amd64`/`arm64`. (Tarballs ship starting with the first release after v1.6.2; debs and RPMs are already available.) ```sh -# Installing a tarball (the binary sits at the archive root) -curl -LO https://github.com/dirk/quickhook/releases/download/v1.6.2/quickhook-1.6.2-darwin-arm64.tar.gz -tar -xzf quickhook-1.6.2-darwin-arm64.tar.gz quickhook # then move it onto your $PATH +# Installing a tarball (the binary sits at the archive root); +# substitute the latest release's version for +curl -LO https://github.com/dirk/quickhook/releases/download/v/quickhook--darwin-arm64.tar.gz +tar -xzf quickhook--darwin-arm64.tar.gz quickhook # then move it onto your $PATH # Installing a .deb curl -LO https://github.com/dirk/quickhook/releases/download/v1.6.2/quickhook-1.6.2-linux-amd64.deb