Skip to content

Publish a reusable aarch64 repository artifact - #223

Open
birkskyum wants to merge 10 commits into
omacom:masterfrom
birkskyum:upstream/aarch64-reusable-repo
Open

Publish a reusable aarch64 repository artifact#223
birkskyum wants to merge 10 commits into
omacom:masterfrom
birkskyum:upstream/aarch64-reusable-repo

Conversation

@birkskyum

@birkskyum birkskyum commented Aug 27, 2026

Copy link
Copy Markdown

Summary

  • Exposes a native ARM64 package build as a reusable workflow with an explicit repository, ref, channel and package set.
  • Publishes a complete omarchy.db repository artifact for Boot and install Omarchy on Snapdragon X ARM64 systems omarchy-iso#129.
  • Validates recipe-directory inputs, including the documented empty set, and resolves their actual pkgbases before verifying the repository, so differing names and split packages work.
  • Keys the repository cache on package selection, recipe sources and build tooling, without stale fallback restores.

Dependencies and provenance

Carries Scott Jones's CI prerequisite from #171 and Jimmy Van Veen's reusable repository work from JimmayVV/omarchy-pkgs@snapdragon, preserving both authors. Remove the carried prerequisite after #171 merges.

Uses upstream master's ARM/Podman build pipeline without duplicating it. Package selection belongs to the caller. The Snapdragon ISO still needs #221 and #222; ARM 1Password and the Omarchy package pair are already on master.

Validation

  • Six workflow regression tests pass in a native ARM container, including a real makepkg / repo-add split-package database, differing directory/base/package names, exact matching and architecture-aware pkgname fallback. The existing CI job runs them as a non-root user; tests select workflow snippets by stable step IDs.
  • The four package-pipeline self-test commands from current master pass on ARM64, along with actionlint and whitespace checks.
  • The September 6 pinned integration run, at 3f3457e513322074aa9e263d2caeb20bd2f55edc, built the firmware extractor and kernel shim, published the repository, verified both pkgbases and uploaded its artifacts.
  • The September 6 full integration run consumed the verified 31-recipe ARM repository and produced an ISO that booted on the physical Yoga. This used packages commit d049fb66c50c02a2dcf92dd51289261d35e22dec, including the recipe-directory/pkgbase correction now carried in 7e4926d. Source pins and limits: no fresh installation was performed, and live USB/power issues remain unresolved.

@birkskyum

Copy link
Copy Markdown
Author

Native ARM64 end-to-end validation passed after making repository database creation use the target architecture: package build, omarchy.db publication, verification, and artifact upload all succeeded. Evidence: https://github.com/birkskyum/omarchy-pkgs/actions/runs/33119644049

@JimmayVV

JimmayVV commented Aug 27, 2026

Copy link
Copy Markdown

Confirming provenance. The reusable repository workflow is mine, from JimmayVV/omarchy-pkgs@snapdragon. Making it branch-neutral is the right call.

@scottjones

Copy link
Copy Markdown
Contributor

Small thing: the body says "The consuming ISO work is #129", which GitHub resolves to #129 ("Update omasnap to 1.0.6") since bare numbers link within the current repo. I think you mean omacom/omarchy-iso#129, "Boot and install Omarchy on Snapdragon X ARM64 systems" — worth spelling out in full so the dependency chain is followable.

Also flagging that I've narrowed #171 to CI only: the tensaku and tzupdate changes are out, so it's now just .github/workflows/build-aarch64.yml plus a README note. Nothing there conflicts with #195 or #240 any more, which should make it easier to land ahead of this and let you rebase down to your own commits.

scottjones and others added 7 commits September 6, 2026 00:48
The build system already supports aarch64 end to end -- bin/build,
bin/sign, bin/update-repo and bin/sync-repo all take --arch, the
Dockerfile bootstraps an Arch Linux ARM rootfs, and omarchy-keyring is
published for aarch64 so that image can bootstrap -- but nothing runs
it, so pkgs.omarchy.org serves no aarch64 tree.

GitHub's ARM64 runners are free for public repositories, so the build
needs no QEMU. The workflow is dispatch-only and takes an optional
package list, and it stops at uploading artifacts: signing and syncing
need credentials only a maintainer has.
The builder container works as its own uid 1000 user, while a GitHub
runner is uid 1001, and make_dir_writable() chowns the mounted output
directories to the host user. The container then cannot write its
incremental omarchy-build database, pacman -Sy fails to open it, and no
makedepends resolve -- the build dies on the first package.

This is invisible on a workstation, where the developer is uid 1000 too.
The maintainer recipe in the header comment published packages without a
database. bin/promote-build skips omarchy-build.db* when it moves packages
into the published tree, and bin/repo update is the only thing that runs the
repo-add that produces omarchy.db, so sign -> promote -> sync uploaded package
files that no pacman client could resolve. Add the update step, and thread
--mirror through all four: helpers/paths.sh defaults MIRROR to edge, so the
recipe as written would have read the wrong tree for a stable artifact.

The batching suggestion on timeout-minutes was not dependency-complete either.
build/build.sh builds only the named packages and counts a dependency only
when it is also in the selected set, and it configures the production
[omarchy] repo only when a database already exists, which is never true on a
clean runner. A batch containing omarchy without omarchy-settings fails at
makepkg -s on its pinned omarchy-settings=${pkgver}. Say what the input is
actually for rather than offering it as a way to split a full build.

The log upload could never match. LOG_DIR is logs/, written only by bin/repo,
and this workflow calls bin/build directly; build/build.sh writes no log files
at all. With if-no-files-found: ignore the step was silent about it, implying
a diagnostic artifact that never existed. The job log is the diagnostic.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Extend the native ARM package build so an ISO workflow can call it, receive a complete omarchy.db repository artifact, and verify the requested package set.
@birkskyum
birkskyum force-pushed the upstream/aarch64-reusable-repo branch from bd75175 to eb27276 Compare September 5, 2026 23:24
@birkskyum

birkskyum commented Sep 6, 2026

Copy link
Copy Markdown
Author

The full ISO integration test exposed one reusable-workflow correction worth carrying into this PR: a recipe directory is not necessarily its pkgbase. In the selected set, pkgbuilds/yaru-icon-theme produces base yaru.

Candidate fix d049fb6 resolves the base through the existing metadata helper. The six workflow tests pass in a native ARM container, including real makepkg/repo-add output where the directory, pkgbase and package name differ, plus a negative exact-match check. This correction is now in this PR as 7e4926d, with clearer recipe naming and added coverage for architecture-aware pkgname fallback. All six workflow tests and four package-pipeline self-test suites passed again on native ARM.

The native GitHub ARM package job built all 31 selected recipes, producing 40 ARM64/any archives, and verified the repository. The successful ISO run then reused that cache, verified and consumed the artifact, and built the image. The image subsequently booted on the physical Yoga Slim 7x.

Two consumer-side findings belong in omacom/omarchy-iso#129: include upstream's existing ARM display-stack rebuild recipes in the caller's selection, and give those local packages repository precedence over incompatible distribution binaries. Neither needs a second package-build pipeline.

Full source pins, build corrections and physical results. This advances validation beyond the previous two-package smoke test, but it is not a completed installation test or validation of all Snapdragon hardware.

Use the existing architecture-aware metadata helper instead of treating recipe directories as pkgbases. Clarify input names and extend the existing regression cases for differing names, pkgname fallback, and target-architecture metadata.
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.

3 participants