No description
  • Go Template 62.7%
  • Dockerfile 37.3%
Find a file
Kristoffer Opsahl aef96ece97 runner: keep template header-comment var names unbraced
The doc comment listed the per-host vars in envsubst's brace form, so
render-time substitution copied the single-use registration token into a
comment line of every rendered user-data, and a placeholder render produced
two placeholders where replacing the wrong one silently breaks runner
registration. The names are now unbraced in the comment so envsubst leaves
them; the real substitution points are unchanged.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-26 19:52:06 +02:00
.forgejo/workflows ci(test): Remove throwaway label test workflow 2026-05-07 13:29:56 +02:00
debian-trixie-base base: add nodejs so JS-based actions work in every derived image 2026-05-11 11:55:19 +02:00
debian-trixie-elixir refactor: Migrate elixir image to extend debian-trixie-base 2026-05-07 12:26:34 +02:00
debian-trixie-go feat: Add debian-trixie-go image 2026-05-07 12:36:35 +02:00
debian-trixie-java feat: Add debian-trixie-java image 2026-05-07 12:29:26 +02:00
debian-trixie-node feat: Add debian-trixie-node image 2026-05-07 12:33:44 +02:00
debian-trixie-php feat: Add debian-trixie-php image 2026-05-07 12:35:08 +02:00
debian-trixie-python feat: Add debian-trixie-python image 2026-05-07 12:31:33 +02:00
debian-trixie-rust feat: Add debian-trixie-rust image 2026-05-07 12:38:03 +02:00
debian-trixie-sukker feat: Add debian-trixie-sukker image (Sury PHP 7.4 + Composer 2.2 LTS) 2026-05-07 12:54:58 +02:00
docs/superpowers docs: Fix stale uv/bun references and runner-config description 2026-05-07 13:10:29 +02:00
runner runner: keep template header-comment var names unbraced 2026-05-26 19:52:06 +02:00
README.md base: add nodejs so JS-based actions work in every derived image 2026-05-11 11:55:19 +02:00

CI Images

Debian-slim-based CI runner images for cross-company use. One Containerfile per stack.

Available images

All images live in git.kristofferopsahl.com/kristofferopsahl/, tag :latest. All extend debian-trixie-base (which is FROM debian:trixie-slim).

  • debian-trixie-base — common build deps: ca-certificates, curl, git, build-essential, locales, nodejs (Node 20 from apt — needed by JS-based actions like actions/checkout; no npm), pkg-config, xz-utils, zstd, unzip, zip, jq. Use this as a runs-on: target when no language image fits, or as the base when extending in a downstream Containerfile.
  • debian-trixie-elixir — Elixir 1.18 + Erlang/OTP 27 + Node 20 + postgres-client + inotify-tools.
  • debian-trixie-java — Java 21 (default-jdk) + Maven.
  • debian-trixie-python — Python 3.13 + venv + pip. python symlinked to python3.
  • debian-trixie-node — Node 20 + npm.
  • debian-trixie-php — PHP 8.4 + Composer + common extensions (mbstring, xml, curl, mysql, pgsql, zip, intl, bcmath, gd, sqlite3).
  • debian-trixie-go — Go 1.24.
  • debian-trixie-rust — Rust + Cargo (trixie default ~1.85).
  • debian-trixie-sukker — legacy umbrella for the sukker stack: Sury PHP 7.4 + extensions + Composer 2.2 LTS (upstream phar) + Node 20.

Two upstream Debian images are also available as runs-on: labels (configured in the runner, not built here):

  • debian-trixiedocker.io/library/debian:trixie
  • debian-trixie-slimdocker.io/library/debian:trixie-slim

Usage in downstream workflows

jobs:
  test:
    runs-on: debian-trixie-elixir   # runner label, mapped to the image in runner config
    steps:
      - uses: actions/checkout@v4   # works because image has git
      - run: mix test

Adding a new image

  1. Create <stack-name>/Containerfile. If the stack should extend the common base, start it with FROM git.kristofferopsahl.com/kristofferopsahl/debian-trixie-base:latest.
  2. Add a job for it in .forgejo/workflows/build.yml — copy any existing child job, change IMAGE_NAME and name:. Keep needs: base if extending base.
  3. Add a label mapping in runner/userdata.yaml.tmpl so new runners pick it up.
  4. Commit and push to main. New runners get the mapping at provision time; existing runners need their ~forgerunner/.local/share/forgejo-runner/config.yaml updated by hand (then systemctl --user restart forgejo-runner.service).

Provisioning a runner host

See runner/README.md — pure cloud-init bootstrap from a fresh Debian 13 cloud image, no snapshot needed.

Versioning

Versions follow Debian trixie's apt cadence. Weekly cron rebuild picks up Debian security updates. Only :latest is published. If a build breaks, fix it ad hoc — there's no immutable tag to roll back to. Reproducibility for project code is handled by actions/cache@v4 keyed on mix.lock in downstream workflows.

Image build cycle

  • On push when any */Containerfile changes.
  • Weekly Monday 04:00 UTC.
  • Manual via Forgejo workflow dispatch.