From e7e935395243ff41c8529f1d0c6a4574214b4125 Mon Sep 17 00:00:00 2001 From: Harry Beckwith Date: Sun, 26 Jul 2026 22:33:24 -0700 Subject: [PATCH] Every release carries the app; stop the alias branch drifting MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Two things the last release exposed. 1. The README offers 'download the app' from /releases/latest, but v31.99-3 shipped node tarballs only — so that link is a 404 right now, and the double-click path for non-technical Mac users is the most visible thing on the site. The macOS job now builds and attaches BitcoinVibes.dmg to every release, verified building from a clean clone of origin/master exactly as CI will. 2. The vibes alias has silently fallen behind master three times, because syncing it was a step somebody had to remember. It is now a workflow that fast-forwards on every push to master, and refuses -- loudly -- if it ever isn't a fast-forward, rather than forcing. Also strips the binaries before packaging: the Linux artifact was 132MB of largely debug symbols, which is a long download for something handed to beginners. Co-Authored-By: Claude Opus 5 --- .github/workflows/release.yml | 18 +++++++++++++++ .github/workflows/sync-alias.yml | 38 ++++++++++++++++++++++++++++++++ 2 files changed, 56 insertions(+) create mode 100644 .github/workflows/sync-alias.yml diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 396acc811c5a..92d2808a7cc3 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -87,6 +87,23 @@ jobs: test "$(./build/bin/bitcoin-cli -datadir="$DD" -chain=regtest getblockcount)" = "101" ./build/bin/bitcoin-cli -datadir="$DD" -chain=regtest stop + # Strip before packaging: the Linux artifact was 132MB of mostly debug + # symbols, which is a long download for something we hand to beginners. + - name: Strip + run: | + strip build/bin/bitcoind build/bin/bitcoin-cli 2>/dev/null || \ + strip -S build/bin/bitcoind build/bin/bitcoin-cli 2>/dev/null || true + ls -lh build/bin/bitcoind + + # The README offers "download the app" from /releases/latest, so every + # release has to carry it — otherwise that link 404s the moment a + # node-only release becomes the latest one. + - name: Build the Mac app + if: runner.os == 'macOS' + run: | + sh contrib/vibes/macos/build-app.sh --dmg + ls -lh dist/BitcoinVibes.dmg + - name: Package run: | SHA=$(git rev-parse HEAD) @@ -105,4 +122,5 @@ jobs: files: | vibes-node-${{ matrix.slug }}.tar.gz vibes-node-${{ matrix.slug }}.tar.gz.sha256 + ${{ runner.os == 'macOS' && 'dist/BitcoinVibes.dmg' || '' }} fail_on_unmatched_files: true diff --git a/.github/workflows/sync-alias.yml b/.github/workflows/sync-alias.yml new file mode 100644 index 000000000000..a547c1d41ad0 --- /dev/null +++ b/.github/workflows/sync-alias.yml @@ -0,0 +1,38 @@ +# Keep the legacy `vibes` branch pointing at `master`. +# +# `vibes` exists only so install links published before the rename keep +# resolving. It has drifted behind master three times because syncing it was a +# manual step somebody had to remember, so it is a manual step no longer. +# +# Fast-forward only: master always contains vibes, so this can never rewrite +# history or lose a commit. If it ever isn't a fast-forward, that means +# something unexpected happened and the job fails loudly rather than forcing. +name: Sync alias branch + +on: + push: + branches: [master] + workflow_dispatch: + +permissions: + contents: write + +jobs: + sync: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Fast-forward vibes to master + run: | + set -e + git fetch origin master vibes + if git merge-base --is-ancestor origin/vibes origin/master; then + git push origin origin/master:refs/heads/vibes + echo "vibes fast-forwarded to $(git rev-parse --short=10 origin/master)" + else + echo "::error::vibes is not an ancestor of master — refusing to force. Resolve by hand." + exit 1 + fi