CI/CD runners with comprehensive Node & Python coverage - LTS to latest https://github.com/tcpipuk/act-runner
  • Dockerfile 100%
Find a file
Tom Foster 66df492026
All checks were successful
Build Runner Images / Prepare Build (push) Successful in 3m7s
Build Runner Images / Build Ubuntu Previous (push) Successful in 1m2s
Build Runner Images / Build Ubuntu Latest (push) Successful in 1m3s
Build Runner Images / Build Ubuntu Rolling (push) Successful in 1m5s
Build Runner Images / Build Fedora Latest (push) Successful in 1m4s
Build Runner Images / Build Fedora Rawhide (push) Successful in 1m3s
Build Runner Images / Build Fedora Previous (push) Successful in 1m4s
Build Runner Images / Build Debian Oldstable (push) Successful in 50s
Build Runner Images / Build Debian Sid/Unstable (push) Successful in 1m5s
Build Runner Images / Build Debian Stable (push) Successful in 53s
Build Runner Images / Build Ubuntu Latest Python 3.13 (push) Successful in 2m59s
Build Runner Images / Update README if needed (push) Successful in 14s
Build Runner Images / Build Ubuntu Previous Python 3.13 (push) Successful in 3m4s
Build Runner Images / Mirror Images to GHCR (push) Successful in 15m25s
fix(ci): query Launchpad packages directly for deadsnakes versions
Deadsnakes changed their PPA description format from explicit ranges
("Python3.7 - Python3.9, Python3.11 - Python3.13") to a "Python3.7+
(NOT Python3.10)" notation that the old parser couldn't interpret.
The regex extracted both the inclusive base and the excluded version
as if both were supported, so the intersection across Ubuntu series
collapsed to {3.7} - producing a build that tried to install
python3.7-dev on Ubuntu 26.04 and failed against modern setuptools.

Switch to querying Launchpad's getPublishedSources API directly,
filtering on source_name=python3. per Ubuntu codename. This reads
what deadsnakes actually publishes rather than parsing free-text
prose, so the action is robust to any future description changes.

Input renamed from ubuntu-versions to ubuntu-codenames since
Launchpad's series endpoint requires codenames; build.yml updated
to pass previous-codename/latest-codename which prepare-build-inputs
already exposes.
2026-05-12 11:48:38 +01:00
.forgejo fix(ci): query Launchpad packages directly for deadsnakes versions 2026-05-12 11:48:38 +01:00
docker fix(docker): remove apt.llvm.org from Ubuntu images 2026-05-11 18:36:18 +01:00
docs chore(ci): update pre-commit hooks and reformat markdown 2026-03-10 14:31:38 +00:00
.gitignore feat(build): add multi-architecture support for all images 2025-08-28 17:10:03 +01:00
.markdownlint.yaml ci(config): add markdown linting and enforce conventional commits 2025-08-28 10:20:40 +01:00
.pre-commit-config.yaml chore(repo): apply prettier formatting and bump markdownlint-cli2 2026-05-11 18:18:22 +01:00
LICENCE Initial commit: ACT runner images for Forgejo Actions 2025-08-21 22:03:02 +01:00
README.md chore: update Ubuntu and Fedora images in README 2026-05-12 04:09:33 +00:00

ACT Runner Images

Production-ready runner images for Forgejo Actions and ACT with comprehensive language support and nightly updates.

[!NOTE] Images are built nightly on my Forgejo instance and automatically mirrored to GitHub Container Registry for optimal CDN performance.

Usage examples

GitHub Actions:

jobs:
  test:
    runs-on: ubuntu-latest
    container: ghcr.io/tcpipuk/act-runner:ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - run: python --version
      - run: node --version

ACT:

act -P ubuntu-latest=ghcr.io/tcpipuk/act-runner:ubuntu-latest

Ubuntu images

View all available tags and versions →

Ubuntu Version Alias Tag Node.js Python Versions Available
26.04 (Development) ubuntu-rolling 26 3.14
26.04 LTS (Current) ubuntu-latest 24 3.14, 3.13
22.04 LTS (Previous) ubuntu-previous 22 3.10, 3.13

Note: Italicised versions are the native Python for each Ubuntu release. Non-native versions use the latest stable Python (3.13) from deadsnakes PPA.

Fedora images

View all available tags and versions →

Fedora Version Alias Tag Node.js Python Versions Available
Rawhide (Development) fedora-rawhide 26 3.14
44 (Current) fedora-latest 24 3.14
41 (Previous) fedora-previous 22 3.13

Debian images

View all available tags and versions →

Debian Version Alias Tag Node.js Python Versions Available
sid (Forky - Sid/Unstable) debian-sid 26 3.13
13 (Trixie - Stable) debian-latest 24 3.13
12 (Bookworm - Oldstable) debian-oldstable 22 3.11

Note: Debian images use only the native Python version for each release, providing better system integration than external PPAs.

Why these images?

  • Wide compatibility - Works with Forgejo Actions, Gitea Actions, and ACT
  • amd64 support - Multi-arch builds incompatible with current build environment
  • Always current - Automatically tracks all supported Node.js and Python versions
  • Nightly updates with intelligent layering - only download what's changed
  • Pre-configured tools - Docker, build-essential, gh CLI, and development libraries ready to go
  • Smart caching - Layered architecture means updates are incremental, not full re-downloads

What's included

All images include:

  • Build essentials (gcc, g++, make, cmake, pkg-config)
  • Full Docker stack including daemon, CLI and Compose (via docker.io package on Ubuntu/Debian, moby-engine on Fedora, all with multi-architecture support and Docker-in-Docker capabilities)
  • GitHub CLI (gh)
  • Git and Git LFS
  • Common utilities (curl, wget, jq, tar, zip)
  • Pre-configured package repositories (LLVM*, Kubernetes, HashiCorp**, Microsoft)
  • Deadsnakes PPA repository (non-rolling Ubuntu releases only)

Note

* LLVM apt repo is available on Fedora only. Excluded from Ubuntu (lags new releases) and Debian (SHA1 signing key, rejected since 2026-02-01). Use the distro clang package or LLVM's install script.

** HashiCorp repository is available on Fedora and Debian (excluding sid/unstable). Excluded from Ubuntu images because HashiCorp is consistently slow to publish apt repos for new Ubuntu releases; install terraform/vault/consul via direct download, tfenv, or asdf.

Runtime languages:

  • Node.js with npm/npx (single version per image: oldest supported LTS for 'previous/oldstable' releases, newest LTS for 'latest/stable' releases, newest stable for 'rolling/rawhide/sid' releases)
  • Go (latest stable release across all images)
  • Java (default JDK for each distro release) with Gradle (Ubuntu only - not available in Fedora or Debian's package repositories)
  • Python (native OS version, plus optionally latest stable Python from deadsnakes PPA for non-rolling Ubuntu releases)
  • uv package manager
  • Rust toolchain manager (rustup) with minimal profile (stable toolchain for stable distros, nightly toolchain for rolling/rawhide/sid releases)
  • Pre-installed Python development tools (ruff, mypy, pytest, black, isort, prek)
  • Compatible with actions/setup-node
  • See docs/python.md for full details

Building your own

Need to customise these images? See docs/self-build.md for detailed build instructions.

Credits

Inspired by catthehacker/docker_images. This project provides automated builds with wider version coverage and optimised layer caching.

License

MIT - See LICENSE file for details.