The AUR recipe ships itself - #389
Conversation
|
@claude review |
|
Claude finished @ghackett's task in 2m 53s —— View job Review complete ✅
This is a well-engineered job that mirrors the Strengths
Minor, non-blocking observations
Neither of these blocks merging — both are edge cases outside what this PR needs to handle today. |
|
🤖 Addressed both observations in 5c36797:
|
0fe45a5 to
ca4ca4c
Compare
Add an aur job to release.yml: on every v* tag it publishes the PKGBUILD + .SRCINFO to the AUR package repo (the AUR hosts recipes, not binaries, so the whole publish is a git push of two files). ship-release.py creates the GitHub release before the tag reaches CI, so the tag tarball exists by the time the job hashes it. The job runs in an archlinux container and refuses rather than guesses, like the ppa job: pkgver must equal the tag, and the package must actually build (pacman resolving every declared dependency catches a typo'd name; makepkg re-verifies the tarball hash) before anything is pushed. sha256sums stays SKIP in git by design -- the hash cannot exist before the tag does -- and gets filled in at publish time. .SRCINFO is regenerated with makepkg --printsrcinfo; drift in the committed mirror warns instead of blocking the release. Re-running a published tag's workflow finds nothing to commit and skips. The AUR's ed25519 host key is pinned in the workflow, and the push authenticates with a new AUR_SSH_PRIVATE_KEY secret. Also fix the committed .SRCINFO, which had drifted from the PKGBUILD (missing gtksourceview5 in depends and the libspelling optdepends line), and document the automated flow in packaging/aur/README.md and RELEASE_CHECKLIST.md, keeping the manual steps as a recovery/bootstrap path. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EzNYMuC323PTuXJceq1KVN
pacman -S takes bare package names, so the test-build dep install now strips any version comparator from the PKGBUILD arrays (makepkg still enforces the constraint itself), and the secret table warns that AUR_SSH_PRIVATE_KEY must be pasted with real newlines. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EzNYMuC323PTuXJceq1KVN
Main's workflow_dispatch tag input (PR 420) re-runs the ppa job for a frozen tag; give the aur job the same TAG env and tag checkout so the checklist's recovery step applies to both. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EzNYMuC323PTuXJceq1KVN
The release workflow's build and ppa jobs moved into content-addressed CI images (PRs 423/424) after this branch was written; the aur job was still installing base-devel and the PKGBUILD's packages with pacman at run time. It now runs in a third tag from the same ci.Dockerfile: an `aur` stage on archlinux:base-devel that sources the PKGBUILD and installs its depends/makedepends, plus git, openssh and curl. That tag hashes the Dockerfile and the PKGBUILD together, so a PR that edits the recipe rebuilds just that image -- and a typo'd package name fails the image build on the PR, before any release. The image runs as uid 1001 like the Ubuntu stages, which also retires the useradd/runuser dance (makepkg refuses root). ci.yml gains an `aur-build` job in the spirit of ppa-source: everything the release job does short of pushing, in the same image, from a git archive of HEAD placed under the name the source array expects (the tag the PKGBUILD names need not exist yet on a PR). It fails on .SRCINFO drift, which the release job only warns about, and checks the built package carries the launcher, desktop entry, icon and metainfo. Docs follow: the AUR README describes the image and the rehearsal, the checklist and packaging table name the new job, and the ship-release / release-branch skills stop describing a manual post-ship AUR push. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017ZX48sPJZy3W23YWnw4nQn
ca4ca4c to
b34f62c
Compare
…th bsdtar git archive roots the archive at the working directory, so run from packaging/aur the stand-in tarball held only that subdirectory and the build() step found no pyproject.toml. bsdtar (libarchive's, what makepkg itself packs with) lists the .pkg.tar.zst without GNU tar needing to find a zstd binary. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017ZX48sPJZy3W23YWnw4nQn
|
@claude review |
|
Claude finished @ghackett's task in 1m 30s —— View job Review complete ✅
Re-reviewed against Both prior findings are resolved correctly
Everything else checks out
No further issues found — this is ready to merge once the AUR account registration and |
BLOCKED
https://aur.archlinux.org/register was not accepting new registrations when this was written, so this PR is blocked on that coming back and setting the account up. The SSH key secret for it also hasn't been set up. (The register page now sits behind an anti-bot challenge, so whether it has reopened needs a browser to check.)
What
Adds an
aurjob torelease.yml: everyv*tag now publishes the updatedPKGBUILD+.SRCINFOto the AUR package repo (ssh://aur@aur.archlinux.org/collins.git). The AUR hosts recipes, not binaries — the whole publish is a git push of two files, and each Arch user's machine fetches the tag tarball from GitHub and builds locally.ship-release.pycreates the GitHub release before the tag ever reaches CI, so the tarball the job hashes always exists by the time it runs.The Arch CI image
Since this branch was first written,
release.yml'sbuildandppajobs moved into prebuilt, content-addressed CI images (PRs 423 and 424). Theaurjob follows suit rather thanpacman -S-ing its toolchain at run time:ci.Dockerfile. A newaurstage — a separateFROM archlinux:base-devel, unrelated to the Ubuntu stages — installsgit,openssh,curl, and every package the PKGBUILD'sdepends/makedependsarrays name. ItCOPYs and sources the PKGBUILD for that list instead of mirroring it: on Arch the PKGBUILD is the canonical dependency list, the one every AUR user'smakepkginstalls from. It runs as uid 1001 like the Ubuntu stages, which also retires theuseradd builder/runuserdance (makepkg refuses root).ci-image.ymlnow emitsimage_auras<hash2>-aur; the other two tags are unchanged). A PR that edits the recipe rebuilds just this image, ~1–2 min — and a typo'd package name fails the image build on that PR, with pacman's "target not found", rather than at release time. The former run-timepacman -Stypo check is therefore gone; makepkg's own dependency check still guards the release job (relevant for a manual dispatch, whose image comes from the dispatching branch's PKGBUILD, not the tag's).ppa-source-style rehearsal on every PR.ci.ymlgainsaur-build: everything the release job does short of pushing, in the same image. The tag the PKGBUILD names need not exist on a PR (pkgveris bumped ahead of the ship), so it builds from agit archiveofHEADplaced under the name thesourcearray expects — makepkg skips its download when the file is already there, and it is the same archive GitHub serves once the tag exists. It fails on.SRCINFOdrift (the release job only warns, since a stale mirror should not stop a release) and checks the built package carries the launcher, desktop entry, icon and metainfo.How the release job works
Runs in the Arch image and, in the spirit of the
ppajob, refuses rather than guesses:PKGBUILD'spkgverdisagrees with the tag (the bump lands in the release version-bump PRs, so a mismatch means something got skipped).AUR_SSH_PRIVATE_KEYsecret is missing.sha256sums— which staysSKIPin git by design, since the hash cannot exist before the tag does..SRCINFOwithmakepkg --printsrcinfoand warns (without blocking the release) if the committed mirror has drifted from the PKGBUILD; the generated copy is what gets pushed, so the AUR is always consistent.ssh-keyscan; thecollinsname is currently unclaimed, and the first push simply creates the package — no registration step exists). Re-running an already-published tag's workflow finds nothing to commit and skips, mirroring theppajob's idempotence.Also in here
.SRCINFO: PR 386 moved libspelling tooptdependsand the earlier PKGBUILD gainedgtksourceview5, but.SRCINFOnever followed. (Exactly the failure mode the newaur-buildcheck now fails a PR for.)packaging/aur/README.mdaround the automated flow (the image, the rehearsal, the one required secret), keeping the manual steps as a recovery/bootstrap path, and updatesRELEASE_CHECKLIST.md, the packaging table, and theship-release/release-branchskills — which stopped describing a manual post-ship AUR push.Setup needed before the next release
One repo secret:
AUR_SSH_PRIVATE_KEY— an OpenSSH private key whose public half is registered on the episode6 AUR account (My Account → SSH Public Key). Without it the job fails with a pointer to the docs; every other release channel is unaffected.🤖 Generated with Claude Code
https://claude.ai/code/session_01EzNYMuC323PTuXJceq1KVN