name: Build Aurora (arm64) # Builds Aurora for arm64 from this tree and pushes it as # forge.quinefoundation.com/quine-global-labs/aurora:stable-arm64 (plus # stable-arm64-). quine-global-labs/quine-linux's arm64 build is FROM # it. A separate tag, not part of `stable`: build.yml pushes `stable` (amd64) # daily and would drop an arm64 half each time. # # Upstream doesn't ship arm64 Aurora yet, and has no arm64 akmods, which is # also where Aurora's kernel comes from. So this build uses Fedora's own # aarch64 kernel, the one Kinoite ships, from a stand-in akmods image # (.forgejo/akmods-arm64.sh), with no extra kmods. # # There's no arm64 runner: runner-x86-linux runs it under QEMU user # emulation (petersweb-infra, hosts/runner-x86-linux), many times slower # than native, hence weekly and a long timeout. It builds this repo's main # as build.yml last merged it, without merging upstream itself. # # Secret: REGISTRY_TOKEN, as build.yml. Variable (optional): REGISTRY_USER. on: schedule: - cron: '0 8 * * 6' workflow_dispatch: concurrency: group: aurora-arm64-${{ github.ref }} cancel-in-progress: true env: REGISTRY: forge.quinefoundation.com MIRRORS: https://forge.quinefoundation.com/quine-global-labs IMAGE: forge.quinefoundation.com/quine-global-labs/aurora TAG: stable jobs: build: runs-on: runner-x86-linux timeout-minutes: 1440 steps: - uses: https://forge.quinefoundation.com/quine-global-labs/mirror-actions-checkout@v4 with: fetch-depth: 0 - name: Build main as it is now # A scheduled run checks out the commit its schedule was registered # at, which can be behind main (see build.yml). if: github.event_name == 'schedule' run: | git fetch --no-tags origin main git checkout -B main FETCH_HEAD - name: Point downloads at our mirrors # As build.yml. run: | files=$(grep -rlE 'github(usercontent)?\.com/(ublue-os/(akmods|countme)|rcaloras/bash-preexec|coreos/fedora-coreos-config)/' build_scripts) sed -i -E \ -e "s#https://github\.com/ublue-os/akmods/raw/refs/heads/([^/]+)/#$MIRRORS/mirror-ublue-os-akmods/raw/branch/\1/#g" \ -e "s#https://raw\.githubusercontent\.com/ublue-os/countme/([^/]+)/#$MIRRORS/mirror-ublue-os-countme/raw/branch/\1/#g" \ -e "s#https://raw\.githubusercontent\.com/rcaloras/bash-preexec/([0-9a-f]{40})/#$MIRRORS/mirror-rcaloras-bash-preexec/raw/commit/\1/#g" \ -e "s#https://raw\.githubusercontent\.com/coreos/fedora-coreos-config/refs/heads/([^/]+)/#$MIRRORS/mirror-coreos-fedora-coreos-config/raw/branch/\1/#g" \ $files git update-index --skip-worktree $files - name: Log in to the registry env: REGISTRY_USER: ${{ vars.REGISTRY_USER || github.actor }} REGISTRY_TOKEN: ${{ secrets.REGISTRY_TOKEN }} run: printf %s "$REGISTRY_TOKEN" | podman login "$REGISTRY" -u "$REGISTRY_USER" --password-stdin - name: Vendor upstream images, and the arm64 akmods stand-in run: | org=$(just --evaluate base_image_org) name=$(just --evaluate base_image_name) ver=$(just fedora_version --image aurora --tag "$TAG" --flavor main) flavor=$(just akmods_flavor --tag "$TAG") mapfile -t pinned < <(yq -r '.images[] | select(.name != "kinoite") | "\(.image):\(.tag)@\(.digest)"' image-versions.yml) .forgejo/vendor-images.sh "$org/$name:$ver" "${pinned[@]}" # The kernel Kinoite's arm64 image ships. kernel=$(skopeo --registries-conf /dev/null inspect --override-arch arm64 --override-os linux \ --no-tags --retry-times 3 "docker://$org/$name:$ver" | jq -er '.Labels["ostree.linux"]') echo "kernel: $kernel" # Quay's tag has been single-arch (amd64) for a while mid-publish. [[ $kernel == *.aarch64 ]] || { echo "::error::$org/$name:$ver has no arm64 image right now (kernel $kernel); try again later"; exit 1; } echo "KERNEL=$kernel" >>"$GITHUB_ENV" .forgejo/akmods-arm64.sh "$flavor" "$ver" "$kernel" - name: Build # As build.yml, through a buildah that builds for linux/arm64, with # the kernel pinned to the stand-in's. run: >- env -u GITHUB_TOKEN GITHUB_REPOSITORY_OWNER=ublue-os GIT_CONFIG_COUNT=1 GIT_CONFIG_KEY_0=safe.directory GIT_CONFIG_VALUE_0='*' just BUILDAH="$PWD/.forgejo/buildah-arm64" build --image aurora --tag "$TAG" --flavor main --kernel-pin "$KERNEL" - name: Push run: | podman image inspect --format '{{.Architecture}}' "localhost/aurora:$TAG" for t in "$TAG-arm64" "$TAG-arm64-$(date -u +%Y%m%d)"; do podman tag "localhost/aurora:$TAG" "$IMAGE:$t" podman push --retry 5 "$IMAGE:$t" done - name: Clean up if: always() # The runner's hourly sweep keeps a day of images; this build's are # done with now. run: | podman logout "$REGISTRY" || true podman image prune -af >/dev/null || true