the project needs a proper release pipeline for the cli and tui #67

Closed
opened 2026-08-13 20:42:50 +00:00 by hugo · 1 comment
Owner

This project should have a release workflow modeled after the released workflow of the project IronStorage (hosted on the same gitea server and available in ../IronStorage on the dev machine). The targets are the same as in that project, so linux and darwin in both arm64 and x64 architecture and windows. It should trigger on new tags and create a proper releas with downloadable files.

The iPhone app is not handled in this workflow, as that requires more steps and is always run on the dev machine. This is mainly for distribution of the cli and tui components, as they are cross-plattform and can be built on the gitea runner.

The project RuDS (hosted on the same gitea instance and available in ../RuDS on the machine) also has a writeup RELEASEBUILD.md that gives hints on things that can go wrong, for example for gui builds and cross-compiling, as our gitea runner is running on arm64 but has to create packages for different operating systems and architectures. the spread is similar here, so we should learn from that document and follow its guidance.

Keep in mind we don't have a desktop app here, so that part can be ignored. We only handle the cli and tui distribution, but might still run into issues with the linux x64 distributables.

This project should have a release workflow modeled after the released workflow of the project IronStorage (hosted on the same gitea server and available in ../IronStorage on the dev machine). The targets are the same as in that project, so linux and darwin in both arm64 and x64 architecture and windows. It should trigger on new tags and create a proper releas with downloadable files. The iPhone app is not handled in this workflow, as that requires more steps and is always run on the dev machine. This is mainly for distribution of the cli and tui components, as they are cross-plattform and can be built on the gitea runner. The project RuDS (hosted on the same gitea instance and available in ../RuDS on the machine) also has a writeup RELEASEBUILD.md that gives hints on things that can go wrong, for example for gui builds and cross-compiling, as our gitea runner is running on arm64 but has to create packages for different operating systems and architectures. the spread is similar here, so we should learn from that document and follow its guidance. Keep in mind we don't have a desktop app here, so that part can be ignored. We only handle the cli and tui distribution, but might still run into issues with the linux x64 distributables.
hugo added this to the first public update release milestone 2026-08-13 20:42:50 +00:00
hugo added the enhancement label 2026-08-13 20:42:50 +00:00
Author
Owner

Implemented in bac15ab.

  • Added a tag-triggered, draft-first Gitea Actions release workflow modeled on IronStorage's proven pipeline.
  • Cross-builds gotcha and gotcha-tui for Darwin arm64/x64, Linux arm64/x64 (glibc 2.28 baseline), and Windows x64 from the ARM64 runner using digest-pinned cargo-zigbuild and cargo-xwin containers.
  • Fetches the exact tag inside build containers, builds with Rust 1.92 and --locked, verifies Mach-O/ELF/PE magic and non-empty binaries, and packages both executables under one top-level directory per target.
  • Creates release notes from closed issues referenced by commits, uploads all target archives into a draft, and publishes only after the exact five-asset manifest exists once with non-zero sizes.
  • Deliberately excludes the iPhone app and all desktop-specific packaging.

Verification:

  • Release-helper unit tests: 2 passed.
  • Workflow YAML parsed successfully with the host Ruby YAML parser.
  • Host cargo build --release --locked --package gotcha-cli --package gotcha-tui succeeded.
  • The host archive contained exactly one directory plus the two executable arm64 Mach-O binaries.
  • cargo fmt --all -- --check
  • RUSTFLAGS="-D warnings" cargo check --workspace --all-targets
  • cargo clippy --workspace --all-targets -- -D warnings
  • cargo test --workspace (all tests passed)

No release tag was created as part of issue verification, so this implementation did not publish an unrequested product release.

Implemented in `bac15ab`. - Added a tag-triggered, draft-first Gitea Actions release workflow modeled on IronStorage's proven pipeline. - Cross-builds `gotcha` and `gotcha-tui` for Darwin arm64/x64, Linux arm64/x64 (glibc 2.28 baseline), and Windows x64 from the ARM64 runner using digest-pinned `cargo-zigbuild` and `cargo-xwin` containers. - Fetches the exact tag inside build containers, builds with Rust 1.92 and `--locked`, verifies Mach-O/ELF/PE magic and non-empty binaries, and packages both executables under one top-level directory per target. - Creates release notes from closed issues referenced by commits, uploads all target archives into a draft, and publishes only after the exact five-asset manifest exists once with non-zero sizes. - Deliberately excludes the iPhone app and all desktop-specific packaging. Verification: - Release-helper unit tests: 2 passed. - Workflow YAML parsed successfully with the host Ruby YAML parser. - Host `cargo build --release --locked --package gotcha-cli --package gotcha-tui` succeeded. - The host archive contained exactly one directory plus the two executable arm64 Mach-O binaries. - `cargo fmt --all -- --check` - `RUSTFLAGS="-D warnings" cargo check --workspace --all-targets` - `cargo clippy --workspace --all-targets -- -D warnings` - `cargo test --workspace` (all tests passed) No release tag was created as part of issue verification, so this implementation did not publish an unrequested product release.
hugo closed this issue 2026-08-15 12:30:22 +00:00
Sign in to join this conversation.