Files
LithosAnanke/.gitea/workflows/runner-image.yml
T
Claude 88d5f777bb ci: one queue for all of CI, nothing cancelled (#140)
Every workflow shared the concurrency group qemu. A group keeps one running
and one waiting run, and a run that joins cancels the one waiting: Build
runs 245 and 247 were cancelled at 0 s by PR 164's Acceptance runs.

Captain Bob, 2026-11-11: "It should be global"; the runner has capacity 1.
So the concurrency block is removed from all six workflows (a comment in
each says why): with one runner at capacity 1 every job waits its turn in
Gitea's queue and none is cancelled, and a runner-image rebuild still
blocks the rest. CLAUDE.md's CI section corrected; FABRIC-3 XLVIII.19.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017RzZgrf7V7Zk2iczBXDRbm
2026-11-11 21:12:06 +00:00

58 lines
2.4 KiB
YAML

# Builds the CI runner image (ci/runner-image/Dockerfile, #120) and publishes it to this
# repository's package registry, tagged with the commit it was built from:
#
# gitea.starshipos-f18.org/rajames/lithosananke-runner:<commit>
#
# The workflows name that tag as their container. A new tag -- after a change to init in the
# Makefile, or to the Dockerfile -- reaches them by a pull request, which acceptance runs on it.
#
# Needs the runner to give jobs its Docker daemon (act_runner config.yaml, container.docker_host:
# automount), and a secret PACKAGES_TOKEN -- a token with write:package -- unless the Actions
# token may publish packages here.
name: Runner image
on:
push:
branches: [master]
paths: ['ci/runner-image/**', 'Makefile']
workflow_dispatch:
# No concurrency group (Captain Bob, 2026-11-11, #140: "It should be global"). The one runner
# (starshipos-vps) has capacity 1, so every job of every workflow waits its turn in Gitea's queue
# and none is cancelled; a runner-image rebuild still blocks the rest (2026-11-07). A shared
# concurrency group kept only one waiting run, and each run that joined cancelled it.
jobs:
image:
name: Build and publish the runner image
runs-on: ubuntu-latest
container:
image: gitea/runner-images:ubuntu-24.04-v26.11.03
timeout-minutes: 60
steps:
- uses: actions/checkout@v4
with:
lfs: false
- name: Docker is reachable
run: |
docker info >/dev/null 2>&1 || {
echo "::error::No Docker daemon in this job. Set container.docker_host: automount in the runner's config.yaml, or build the image on the server: see this file's header."
exit 1; }
- name: Build and publish
env:
TOKEN: ${{ secrets.PACKAGES_TOKEN || secrets.GITEA_TOKEN }}
run: |
set -e
img=gitea.starshipos-f18.org/rajames/lithosananke-runner
tag=$(git rev-parse --short=12 HEAD)
ctx=$(mktemp -d) # not the repository: 7 GB of context
cp -r Makefile boards ci/runner-image/Dockerfile "$ctx/"
tok=$(mktemp); printf '%s' "$TOKEN" > "$tok" # the HOL-Library heap's download (Dockerfile)
docker build --secret id=pkgtoken,src="$tok" -t "$img:$tag" "$ctx"
rm -f "$tok"
echo "$TOKEN" | docker login gitea.starshipos-f18.org -u rajames --password-stdin
docker push "$img:$tag"
echo "Published $img:$tag"