UMBRA-2: ship binaries to Pandora's Box Generic Packages #9

Closed
David wants to merge 1 commit from feat/governance-binary-packages-UMBRA-2 into main
Owner

Resolves UMBRA-2.

Aligns umbra with the NiceGuyIT/governance spec: the deliverable becomes distributable binaries published to the Pandora's Box Generic Packages registry, not an OCI runtime image.

What changed

  • 3-part version stamp. crates/umbra-build now also emits UMBRA_VERSION (env override -> git describe --tags --always --dirty -> CARGO_PKG_VERSION). The banners in umbra-hid, umbra-cli, and umbra-gui switch from CARGO_PKG_VERSION to UMBRA_VERSION, so umbra version prints version + short git hash + build date.
  • Windows portability. The hidapi backend feature moves out of [workspace.dependencies] into per-target sections in each consuming crate (linux-static-hidraw on Linux, windows-native on Windows). The workspace now builds on Linux and cross-compiles cleanly to x86_64-pc-windows-gnu.
  • Build tooling. Added oci-build/Dockerfile.binary-linux (from rust-builder-glibc, no apt layer since the base bundles the eframe/HID stack), oci-build/Dockerfile.binary-windows (from rust-builder-glibc-windows), and oci-build/get-tags.nu. Removed the root runtime Dockerfile.
  • Workflows. Added build-binary-linux.yml, build-binary-windows.yml, and create-release.yml; aligned check.yml to the CI.md template (toolchain step + Swatinem/rust-cache@v2). Both umbra and umbra-gui publish to the umbra Generic Package per tag (step-scoped FORGEJO_TOKEN, PACKAGE_OWNER: github.repository_owner).
  • justfile. Replaced build-docker / build-docker-export with build-binary-linux / build-binary-windows; repointed check-docker at the binary Dockerfile; threaded UMBRA_VERSION.
  • Housekeeping. Repointed Cargo.toml repository to dev.a8n.run/pandoras-box/umbra; added GPL-2.0 LICENSE.md and a project CLAUDE.md.

Verification

  • just pre-commit (fmt + clippy --deny warnings + build + tests in the rust-builder-glibc image): all green, 19 protocol tests pass.
  • just build-binary-linux: produces both umbra and umbra-gui (ELF x86-64). umbra --version -> umbra 1632c97-dirty (1632c9720171, built 2026-06-05T17:44:10+00:00).
  • just build-binary-windows: cross-compile succeeds; produces both umbra.exe and umbra-gui.exe (PE32+). Windows is shipped, not held back.
  • Cargo.lock unchanged: the per-target feature split adds no new packages, and cargo metadata --locked passes.

🤖 Generated with Claude Code

Resolves UMBRA-2. Aligns `umbra` with the `NiceGuyIT/governance` spec: the deliverable becomes distributable binaries published to the Pandora's Box Generic Packages registry, not an OCI runtime image. ## What changed - **3-part version stamp.** `crates/umbra-build` now also emits `UMBRA_VERSION` (env override -> `git describe --tags --always --dirty` -> `CARGO_PKG_VERSION`). The banners in `umbra-hid`, `umbra-cli`, and `umbra-gui` switch from `CARGO_PKG_VERSION` to `UMBRA_VERSION`, so `umbra version` prints version + short git hash + build date. - **Windows portability.** The `hidapi` backend feature moves out of `[workspace.dependencies]` into per-target sections in each consuming crate (`linux-static-hidraw` on Linux, `windows-native` on Windows). The workspace now builds on Linux and cross-compiles cleanly to `x86_64-pc-windows-gnu`. - **Build tooling.** Added `oci-build/Dockerfile.binary-linux` (from `rust-builder-glibc`, no apt layer since the base bundles the eframe/HID stack), `oci-build/Dockerfile.binary-windows` (from `rust-builder-glibc-windows`), and `oci-build/get-tags.nu`. Removed the root runtime `Dockerfile`. - **Workflows.** Added `build-binary-linux.yml`, `build-binary-windows.yml`, and `create-release.yml`; aligned `check.yml` to the CI.md template (toolchain step + `Swatinem/rust-cache@v2`). Both `umbra` and `umbra-gui` publish to the `umbra` Generic Package per tag (step-scoped `FORGEJO_TOKEN`, `PACKAGE_OWNER: github.repository_owner`). - **justfile.** Replaced `build-docker` / `build-docker-export` with `build-binary-linux` / `build-binary-windows`; repointed `check-docker` at the binary Dockerfile; threaded `UMBRA_VERSION`. - **Housekeeping.** Repointed `Cargo.toml` `repository` to `dev.a8n.run/pandoras-box/umbra`; added GPL-2.0 `LICENSE.md` and a project `CLAUDE.md`. ## Verification - `just pre-commit` (fmt + clippy `--deny warnings` + build + tests in the `rust-builder-glibc` image): all green, 19 protocol tests pass. - `just build-binary-linux`: produces both `umbra` and `umbra-gui` (ELF x86-64). `umbra --version` -> `umbra 1632c97-dirty (1632c9720171, built 2026-06-05T17:44:10+00:00)`. - `just build-binary-windows`: cross-compile succeeds; produces both `umbra.exe` and `umbra-gui.exe` (PE32+). Windows is shipped, not held back. - `Cargo.lock` unchanged: the per-target feature split adds no new packages, and `cargo metadata --locked` passes. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
feat: ship binaries to Generic Packages per governance
Some checks failed
Check / fmt + clippy + build + tests (pull_request) Failing after 12s
Create release / Create release from merged PR (pull_request) Has been skipped
382a19c68a
Align umbra with NiceGuyIT/governance: stop building an OCI runtime image and instead build distributable glibc Linux + mingw Windows binaries via Docker, publishing both umbra and umbra-gui to the Forgejo Generic Packages registry on push/tag.

3-part version stamp: umbra-build now also emits UMBRA_VERSION (env override -> git describe --tags --always --dirty -> CARGO_PKG_VERSION). The version banners in umbra-hid, umbra-cli, and umbra-gui switch from CARGO_PKG_VERSION to UMBRA_VERSION, so `umbra version` prints the semantic version, short git hash, and build date.

Windows portability: the hidapi backend feature moves out of [workspace.dependencies] and into per-target sections in each consuming crate (linux-static-hidraw on Linux, windows-native on Windows). The whole workspace now both builds on Linux and cross-compiles cleanly to x86_64-pc-windows-gnu (verified: both .exe binaries produced).

Build + CI: add oci-build/Dockerfile.binary-linux (from rust-builder-glibc, no apt layer since the base bundles the eframe/HID stack), oci-build/Dockerfile.binary-windows (from rust-builder-glibc-windows), and oci-build/get-tags.nu. Remove the root runtime Dockerfile. Add build-binary-linux.yml, build-binary-windows.yml, and create-release.yml; align check.yml to the CI.md template (toolchain step + Swatinem/rust-cache@v2). Replace the build-docker recipes with build-binary-linux / build-binary-windows and repoint check-docker.

Housekeeping: repoint Cargo.toml repository to dev.a8n.run/pandoras-box/umbra, add GPL-2.0 LICENSE.md and a project CLAUDE.md.

#UMBRA-2

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Signed-off-by: David Randall <David@NiceGuyIT.biz>
David closed this pull request 2026-06-06 01:48:23 +02:00
Author
Owner

Closed as superseded by PR #8 (chore/governance-alignment-DEV-357, merged as bd9a271). Both PRs implement the same governance alignment; main's version additionally keeps the canonical GPLv2 text, the first-line syntax directive in the oci-build Dockerfiles, the justfile group attributes from PR #6, the nproc/2 CI concurrency cap, and the UMBRA_VERSION banner in umbra-hid. The only residual diff on this branch was a stray output/ gitignore entry and a cosmetic Cargo.toml section reorder.

Closed as superseded by PR #8 (chore/governance-alignment-DEV-357, merged as bd9a271). Both PRs implement the same governance alignment; main's version additionally keeps the canonical GPLv2 text, the first-line syntax directive in the oci-build Dockerfiles, the justfile group attributes from PR #6, the nproc/2 CI concurrency cap, and the UMBRA_VERSION banner in umbra-hid. The only residual diff on this branch was a stray output/ gitignore entry and a cosmetic Cargo.toml section reorder.
Some checks failed
Check / fmt + clippy + build + tests (pull_request) Failing after 12s
Create release / Create release from merged PR (pull_request) Has been skipped

Pull request closed

Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
pandoras-box/umbra!9
No description provided.