You've already forked .autoupdate
ci: prebuild the Arch environment as a container image
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.
This commit is contained in:
@@ -37,8 +37,14 @@ jobs:
|
||||
# emits an empty .SRCINFO, which the AUR then rejects -- that is what broke
|
||||
# reflex-appimage, nethlink-appimage and pman-helper. regen_srcinfo() in
|
||||
# common.sh fails loudly if this ever regresses.
|
||||
#
|
||||
# Prebuilt by build-image.yaml (see dockerfile) so the toolchain is not
|
||||
# reinstalled in all six jobs every night.
|
||||
container:
|
||||
image: archlinux:base-devel
|
||||
image: git.bjphoster.com/aur/autoupdate:latest
|
||||
credentials:
|
||||
username: ${{ vars.REGISTRY_USER }}
|
||||
password: ${{ secrets.GIT_TOKEN }}
|
||||
|
||||
strategy:
|
||||
# One broken package must not cancel the rest of the matrix.
|
||||
@@ -53,15 +59,10 @@ jobs:
|
||||
- tsparams
|
||||
|
||||
steps:
|
||||
# Must come BEFORE actions/checkout. That action is JavaScript, and the
|
||||
# archlinux image ships no node, so checkout dies with
|
||||
# `exec: "node": executable file not found in $PATH`. A `run:` step needs
|
||||
# no checkout, so the toolchain can be installed first.
|
||||
- name: Bootstrap container
|
||||
run: |
|
||||
pacman -Syu --noconfirm --needed \
|
||||
nodejs git openssh jq curl pacman-contrib namcap fuse2 python
|
||||
|
||||
# No bootstrap step: node, git, openssh, jq, curl and the makepkg
|
||||
# toolchain all come from the prebuilt image above. node in particular
|
||||
# has to be present before this action runs, since actions/checkout is
|
||||
# JavaScript and the runner executes it with `node` from the image.
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- name: Configure git and SSH
|
||||
@@ -91,11 +92,11 @@ jobs:
|
||||
EOF
|
||||
chmod 600 ~/.ssh/config
|
||||
|
||||
# makepkg refuses to run as root, and CI containers are root by default.
|
||||
- name: Create build user
|
||||
# The `builder` user is baked into the image; this only hands it the
|
||||
# workspace and the credentials written by the previous step.
|
||||
- name: Hand over to the build user
|
||||
run: |
|
||||
set -euo pipefail
|
||||
useradd --create-home --shell /bin/bash builder
|
||||
chown -R builder:builder "${GITHUB_WORKSPACE}"
|
||||
cp -r /root/.ssh /root/.gitconfig /root/.git-credentials /home/builder/ 2>/dev/null || true
|
||||
chown -R builder:builder /home/builder
|
||||
|
||||
Reference in New Issue
Block a user