Releases cleanup #92

Merged
albert merged 6 commits from u/albert/82/binary-releases into main 2026-07-12 02:02:51 +00:00
Owner

Fixes #82

Fixes #82
The dry run failed at upload-artifact: Forgejo doesn't implement the
@actions/artifact v2+ protocol that upload-artifact@v4/download-artifact@v4 use
(the runner reports as GHES, GHESNotSupportedError). No app.ini toggle adds it.

Collapse the deb/apk/publish jobs into a single `release` job that builds every
asset and uploads them straight to the Forgejo Releases API — no cross-job
artifact transfer. It runs in the Android CI image (a superset of the base:
Rust + dpkg + webui toolchain AND the Android SDK/NDK), so one container builds
both the .deb and the APKs. APKs come from a build_apk shell function called per
module (still the fan-out point for new apps). Dry-run gate and the API upload
are unchanged.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MNM2TbcjK51PR3ecyuyD86
Two changes to the release pipeline:

Parallelism (back from the single-job workaround): since Forgejo can't pass
files between jobs via upload-artifact@v4, `create-release` now makes the
Forgejo release up front and the parallel `deb` (base image) and `apk` (android
image, matrix over modules) jobs each upload their own asset straight to it via
scripts/ci/upload-release-asset.sh, which also writes a per-asset .sha256
(replacing the combined SHA256SUMS so no job needs the others' files). Dry run:
create-release no-ops, the build jobs build and skip their upload step.

cargo-ndk in the image, not the jobs: `deps install android` now also installs
cargo-ndk + the Android Rust targets (install_cargo_ndk, guarded on cargo being
present), so the android CI image bakes them in; Dockerfile.android sets
ANDROID_NDK_HOME. The release `apk` job and ci.yml's `android-media` job no
longer install a toolchain at runtime. (android-portability keeps its
`rustup target add` — it runs on the base image, which isn't the android image.)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MNM2TbcjK51PR3ecyuyD86
android-portability cargo-checked shepherd-media-core for aarch64-linux-android
with --no-default-features. shepherd-media-android depends on core with exactly
`default-features = false` (it links its own vendored libmpv instead of core's
libmpv feature), and the android-media job builds that app for the same target —
a strict superset that compiles core in the identical config and then links the
cdylib. So any Linux-specific dep added to the core fails android-media too;
the standalone check no longer adds coverage.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MNM2TbcjK51PR3ecyuyD86
`shepherd package deb` hardcoded `amd64` in both the control file's
Architecture field and the .deb filename, so on a non-amd64 host it staged
native binaries (e.g. arm64) under an amd64 label — a package apt rejects.
Derive the Debian architecture from the host at build time via
`dpkg --print-architecture` instead, and thread it through the control file
and filename. On amd64 this is a no-op; on arm64 it now emits a correct
`shepherd-launcher_<ver>_arm64.deb`.

Add a static CI guard (scripts/ci/check-arch-neutral.sh, wired as the
`arch-neutral` job) that fails if an amd64/x86 literal reappears in the
build/packaging path. It's static rather than a runtime assertion because CI
only runs on amd64, where a re-hardcoded `amd64` would still pass an
arch-equality check.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QvFLuoNnEdBLMy8sHooGkd
chore: bump minimum supported Ubuntu to 26.04
All checks were successful
CI / Version harmony (pull_request) Successful in 33s
CI / Arch neutrality (pull_request) Successful in 35s
CI / ShellCheck (pull_request) Successful in 37s
CI / CI image (pull_request) Successful in 38s
CI / CI image (Android) (pull_request) Successful in 25s
CI / CI images (pull_request) Successful in 0s
CI / Rustfmt (pull_request) Successful in 56s
CI / Clippy (pull_request) Successful in 5m50s
CI / Build (pull_request) Successful in 7m9s
CI / Test (pull_request) Successful in 8m38s
CI / Android companion (unit tests) (pull_request) Successful in 1m48s
CI / E2E (pull_request) Successful in 9m6s
CI / Firewall E2E (pull_request) Successful in 4m31s
CI / Android media (cargo-ndk build) (pull_request) Successful in 2m21s
CI / Package (.deb smoke build) (pull_request) Successful in 10m53s
0d28334b67
Development and testing have moved to Ubuntu 26.04. Update the enforced
minimum in check_ubuntu_version and the requirement stated in AGENTS.md,
CONTRIBUTING.md, and docs/INSTALL.md.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QvFLuoNnEdBLMy8sHooGkd
ci(release): mark -suffix tags as prereleases
All checks were successful
CI / Version harmony (pull_request) Successful in 35s
CI / Arch neutrality (pull_request) Successful in 38s
CI / ShellCheck (pull_request) Successful in 41s
CI / CI image (pull_request) Successful in 41s
CI / CI image (Android) (pull_request) Successful in 25s
CI / CI images (pull_request) Successful in 0s
CI / Rustfmt (pull_request) Successful in 57s
CI / Clippy (pull_request) Successful in 5m38s
CI / Build (pull_request) Successful in 7m30s
CI / E2E (pull_request) Successful in 8m56s
CI / Test (pull_request) Successful in 8m59s
CI / Android companion (unit tests) (pull_request) Successful in 1m38s
CI / Firewall E2E (pull_request) Successful in 4m34s
CI / Android media (cargo-ndk build) (pull_request) Successful in 2m20s
CI / Package (.deb smoke build) (pull_request) Successful in 10m53s
f0dd3d733c
Detect a -prerelease suffix in the tag (e.g. v0.2.0-rc1) and set the Forgejo
release's prerelease flag accordingly, so a release candidate published for
testing isn't shown as the latest release. Enables cutting an rc tag to test the
real signed .deb/.apk end-to-end, then deleting it.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MNM2TbcjK51PR3ecyuyD86
Author
Owner

Installed the deb on a fresh Ubuntu 26.04, works great

Installed the deb on a fresh Ubuntu 26.04, works great
albert merged commit 5aa67b9b9b into main 2026-07-12 02:02:51 +00:00
Sign in to join this conversation.
No reviewers
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
albert/shepherd-launcher!92
No description provided.