Skip to content

feat(release): publish Linux CLI and relay binaries#1752

Merged
bobleer merged 3 commits into
GCWing:mainfrom
bobleer:bob/release-linux-cli-relay
Jul 25, 2026
Merged

feat(release): publish Linux CLI and relay binaries#1752
bobleer merged 3 commits into
GCWing:mainfrom
bobleer:bob/release-linux-cli-relay

Conversation

@bobleer

@bobleer bobleer commented Jul 25, 2026

Copy link
Copy Markdown
Collaborator

Summary

  • build and publish Linux x86_64/ARM64 archives for BitFun CLI and Relay Server in both stable and nightly Desktop releases
  • gate Release creation on all Desktop and Linux binary jobs, and publish a shared linux-binaries.json manifest with SHA256 files
  • add CLI stable self-update with GitHub-first and openbitfun.com fallback sources
  • make Desktop one-click Relay deployment prefer the checksum-verified release binary, then openbitfun.com, and finally the existing source build with rollback
  • extend the openbitfun.com release mirror script to sync the four Linux archives, checksums, and manifest; document the 10-minute cron schedule

Release behavior

Stable and nightly publishing jobs now depend on the reusable Linux binary workflow. The release is created only after every required Desktop and Linux binary artifact has been built successfully.

Published Linux archives:

  • BitFun CLI: x86_64-unknown-linux-gnu and aarch64-unknown-linux-gnu
  • Relay Server: x86_64-unknown-linux-gnu and aarch64-unknown-linux-gnu

Verification

  • cargo check --workspace
  • cargo check -p bitfun-desktop
  • cargo test -p bitfun-cli
  • cargo test -p bitfun-services-integrations --features remote-ssh-concrete remote_ssh::relay_deploy::tests
  • pnpm run check:github-config
  • pnpm run check:repo-hygiene
  • node --test scripts/linux-binaries-manifest.test.mjs scripts/relay/package-contract.test.mjs scripts/cli/package-contract.test.mjs
  • bash syntax checks and release packaging smoke checks

bobleer and others added 3 commits July 24, 2026 19:00
- `bitfun update --check` printed "is up to date" right after announcing an
  available version; add a distinct `Available` outcome.
- Bound the startup auto-update check with a 90s budget so a stalled mirror
  cannot wedge interactive TUI launch behind a 120s-per-request client.
- Resolve the auto-check stamp through `CliConfig::config_dir()` instead of a
  hardcoded `~/.config/bitfun`.
- Strip SemVer build metadata from Linux asset names: GitHub rewrites `+` in
  uploaded release asset filenames, which made every nightly URL in
  linux-binaries.json a 404. Guard it in the manifest generator too.
- openbitfun-release-sync.sh no longer deletes the published
  linux-binaries.json on a transient fetch failure; retry, and only remove it
  on a definitive 404.
- Relay release deploy: trap INT/TERM so a cancelled wizard restores the
  renamed backup container instead of leaving the relay down, sweep orphaned
  backups, and honor RELAY_HOST_BIND_IP like docker-compose.yml does.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
cli-package.yml and desktop-package.yml both run on `release: published`, and
both built the Linux CLI with the same version derivation, so both uploaded
byte-identical asset names to the same release. softprops/action-gh-release
deletes a same-named asset before writing, so the two runs could destroy each
other's upload — on top of two redundant full Rust builds per release.

Ownership is forced by two constraints: cli-package.yml never runs for nightly
(a GITHUB_TOKEN-created release does not trigger workflows), and
linux-binaries.json must be written by a job that physically holds all four
archives. Both point at linux-binaries.yml, so drop the Linux targets from
cli-package.yml's matrix.

SHA256SUMS now covers the macOS and Windows archives only; the per-archive
.sha256 sidecar remains the complete surface on every platform and channel.
Documented in the CLI README and locked with contract tests.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@bobleer
bobleer merged commit 02722af into GCWing:main Jul 25, 2026
5 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.

1 participant