Repository navigation
An aarch64 package for omarchy-aquarium, which actually compiles #18
Description
Part of #14 — Releases publish no installable package, only GitHub's source zip.
Blocked by: Prove the release-package pattern on macarchy-touchbar (#16)
Problem
omarchy-aquarium is the one repo that genuinely compiles: nine C sources under src/ behind a Makefile. Its package cannot be arch=('any') and cannot be built in the x86_64 container the other slices use — it needs a real aarch64 Arch environment, which the org has never had in CI.
Proposed solution
An arch=('aarch64') PKGBUILD with a build() that runs the existing Makefile, built on the ubuntu-24.04-arm runner (already used by macarchy-install's clean machine workflow) inside an aarch64 Arch container.
Area
ci
📋 Spec
Goal
omarchy-aquarium's releases carry an aarch64 package built from that tag.
Design
The unknown here is the container, and it is the first thing to settle: the official archlinux image is x86_64-only, so this needs an Arch ARM image (menci/archlinuxarm, lopsided/archlinux-arm or equivalent) running on ubuntu-24.04-arm. If no usable image is found, the honest fallback is makepkg on the runner's own Ubuntu with a vendored pacman — and if that is not workable either, say so and leave the aquarium out rather than shipping a package built on the wrong architecture.
build() runs the repo's Makefile; package() installs the renderer, the toggle and notify scripts, and the theme hook. The Wayland/EGL build dependencies go in makedepends, not depends.
Acceptance criteria
omarchy-aquarium's next release carries one*.pkg.tar.*whose.PKGINFOrecordsarch = aarch64.- The packaged binary runs on the target machine —
omarchy-aquarium --help(or its equivalent) exits 0. - The build happens on an aarch64 runner; no cross-compilation and no qemu emulation.
- If no usable aarch64 Arch container exists, the issue closes with that finding recorded on Releases publish no installable package, only GitHub's source zip #14 and no package shipped — never a package built on the wrong arch.
Testing decisions
Seams under test: .PKGINFO's arch field inside the built package, and the packaged binary's exit code on the target machine.
Prior art: macarchy-install/.github/workflows/clean-machine.yml — the existing ubuntu-24.04-arm job.
A good test here: assert arch = aarch64 from the built package rather than trusting the PKGBUILD's declaration.
Out of scope
- Cross-compiling, or building under qemu emulation. Both produce a package nobody verified on real hardware.
🛠️ Implementation plan
For agentic workers: execute this plan task-by-task with
implement-issue(subagent-per-task for broad plans, inline for small ones). Steps use checkbox (- [ ]) syntax for tracking.
Goal: an aarch64 package on every aquarium release, or a recorded finding that CI cannot build one.
Architecture: PKGBUILD wrapping the existing Makefile; a workflow on ubuntu-24.04-arm.
Tech stack: C, make, makepkg 7, GitHub Actions, an aarch64 Arch container.
Seams under test: .PKGINFO's arch field, and the packaged binary's exit code on the target machine.
Global constraints
- No cross-compilation, no qemu. An unverifiable package is worse than none.
- Wayland/EGL headers are
makedepends, notdepends. - Conventional Commit PR title decides the release bump; commits below use
feat. - Commit trailer:
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>.
Task 1: settle the container question before writing anything
Files: none yet — this task produces a finding, recorded on this issue.
Interfaces: a container image that runs makepkg on ubuntu-24.04-arm, or a stated conclusion that none does.
- Step 1: Try each candidate aarch64 Arch image in a scratch workflow on
ubuntu-24.04-arm; record which pull and which runmakepkg --version. - Step 2: Record the winner — or the failure — as a comment on this issue, with the run URL.
- Step 3: If none works, stop here: report on Releases publish no installable package, only GitHub's source zip #14 and close this issue as not doable in CI today, without shipping a package.
Task 2: the PKGBUILD, built and verified
Files: create PKGBUILD, .github/workflows/package.yml; test tests/test_pkgbuild.sh.
Interfaces: arch=('aarch64'); build() calls make; package() installs the renderer, bin/* and hooks/*.
- Step 1: Write the failing test (seam:
.PKGINFO'sarchinside the built package) — assertarch = aarch64. - Step 2: Run → FAIL (no PKGBUILD).
- Step 3: Write the PKGBUILD; build it locally — this machine IS aarch64 Arch, so the local build is the real thing, not an approximation.
- Step 4:
tar -tfit, install it withpacman -U, and run the packaged binary. - Step 5: Add the workflow on
ubuntu-24.04-armwith Task 1's image; assert release-only. - Step 6: Re-run the suite → PASS.
- Step 7: Commit:
feat(pkg): publish an aarch64 package on release. - Step 8: After the next release, confirm the asset's
.PKGINFOsaysaarch64and record it on Releases publish no installable package, only GitHub's source zip #14.
Activity
feat(pkg): publish an aarch64 package on every release (#10)
phmatray commentedon Sep 5, 2026
Done.
omarchy-aquariumv0.3.1 carriesomarchy-aquarium-0.3.1-1-aarch64.pkg.tar.xz, built on a real aarch64 runner.Task 1's container question, settled by a run
There is no docker access on this machine, so the image could not be tried locally — which is exactly why Task 1 existed.
menci/archlinuxarm:base-develonubuntu-24.04-armworks, after one fix:pacman 7 confines its downloader with Landlock and drops to the
alpmuser; neither is permitted in that container. v0.3.0 published with no package because of it.--disable-sandboxturns off only the downloader's confinement inside a throwaway CI container — signature checking is untouched — and the flag lives only in this repo's copy of the job, since the fourarch=('any')repos build inarchlinux:base-develand never hit it.macarchy/omarchy-aquarium#10 and #12.
Acceptance criteria
.PKGINFOrecordsarch = aarch64— asserted by the job itself, which fails the build if it says anything else. Declaring the arch is not the same as building it.filereportsELF 64-bit LSB pie executable, ARM aarch64, andomarchy-aquarium --helpexits 0 from the extracted package.ubuntu-24.04-arm, and a test asserts no qemu step exists in the workflow.One thing worth keeping
The asset is
…-aarch64.pkg.tar.**xz**, while the other five are.zst: the ARM image'sPKGEXTdiffers fromarchlinux:base-devel's. The upload globs*.pkg.tar.*rather than naming an extension, which is the only reason this landed instead of silently uploading nothing.package()reuses the repo's ownmake installrule withPREFIXpointing at the staging root, so there is no second list of files to drift from the Makefile.