You've already forked .autoupdate
ci: prebuild the Arch environment as a container image
Some checks failed
Build Autoupdater Image / build (push) Failing after 6s
Some checks failed
Build Autoupdater Image / build (push) Failing after 6s
All six nightly jobs ran the same pacman transaction before doing any work. The toolchain now lives in an image published to the Gitea registry as git.bjphoster.com/aur/autoupdate:latest, rebuilt monthly since Arch is rolling and a month-old image is a month behind. The build job itself runs on plain ubuntu-latest -- it only drives docker. Only the image is Arch. Based on archlinux:base rather than base-devel: the autoupdater parses PKGBUILDs and never compiles, so the toolchain is dead weight, 822 MB against 1.48 GB. nodejs is included because actions/checkout is a JavaScript action the runner executes with node from inside the image. Slimming to base initially dropped diffutils, and apply_pkgrel_rule used diff -q. A missing binary makes the `if` fail, which reads as "changed", so pkgrel ratcheted upward on every run -- the same silent-wrong-default class as the empty .SRCINFO this rewrite was about, and invisible to the host test run. The comparison is now a shell string equality with no external dependency, and is verified against an image with no diff at all. require_tools() additionally fails on startup for any missing binary rather than midway through. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
49
dockerfile
Normal file
49
dockerfile
Normal file
@@ -0,0 +1,49 @@
|
||||
# Build environment for the AUR autoupdater.
|
||||
#
|
||||
# Rebuilt monthly by .gitea/workflows/build-image.yaml and pushed as :latest, so
|
||||
# the six nightly package jobs start with the toolchain already in place instead
|
||||
# of each running a full pacman transaction first.
|
||||
#
|
||||
# Arch specifically: makepkg --printsrcinfo must be the genuine Arch tool.
|
||||
# Ubuntu's build environment silently emits an empty .SRCINFO, which the AUR
|
||||
# then rejects -- that is what broke three packages before this was rewritten.
|
||||
|
||||
# base, not base-devel: the autoupdater only ever *parses* PKGBUILDs
|
||||
# (makepkg --printsrcinfo) and never compiles anything, so the toolchain in
|
||||
# base-devel is dead weight -- 822 MB against 1.48 GB. If a real build or
|
||||
# verify step is ever added here, this needs to go back to base-devel.
|
||||
FROM archlinux:base
|
||||
|
||||
LABEL org.opencontainers.image.title="aur-autoupdate"
|
||||
LABEL org.opencontainers.image.description="Arch build environment for the AUR package autoupdater"
|
||||
LABEL org.opencontainers.image.source="https://git.bjphoster.com/aur/.autoupdate"
|
||||
|
||||
# nodejs actions/checkout is a JavaScript action; the runner executes it
|
||||
# with `node` from inside this image, and base-devel has none.
|
||||
# pacman-contrib updpkgsums/paccache and friends
|
||||
# namcap PKGBUILD linting
|
||||
# fuse2 AppImage extraction
|
||||
# python test.sh's local HTTP server
|
||||
RUN pacman -Syu --noconfirm --needed \
|
||||
nodejs \
|
||||
git \
|
||||
openssh \
|
||||
jq \
|
||||
curl \
|
||||
pacman-contrib \
|
||||
namcap \
|
||||
fuse2 \
|
||||
python \
|
||||
diffutils \
|
||||
&& rm -rf /var/cache/pacman/pkg/*
|
||||
# NB: not `pacman -Scc` -- under --noconfirm it takes the default answer, which
|
||||
# is *no* for the cache prompt, so it drops sync databases (breaking pacman -Ss
|
||||
# for debugging) without actually reclaiming the cache. The rm does the real work.
|
||||
|
||||
# makepkg refuses to run as root and CI containers are root by default, so the
|
||||
# nightly job drops to this user. Baked in here rather than created per run.
|
||||
RUN useradd --create-home --shell /bin/bash builder
|
||||
|
||||
# Sanity check: fail the image build rather than the nightly job if makepkg
|
||||
# ever stops working in this environment.
|
||||
RUN runuser -u builder -- bash -c 'command -v makepkg && makepkg --version | head -1'
|
||||
Reference in New Issue
Block a user