Skip to content

Documentation · Runners

The runner image

Ubuntu 24.04 with what GitHub's own ubuntu-24.04 image carries: Docker, the language runtimes, cloud CLIs, passwordless sudo and the tool cache.

Every job runs on Ubuntu 24.04 on x64, with Docker, the common language runtimes, cloud and cluster CLIs and build tools already installed. The set was chosen from what GitHub's own ubuntu-24.04 image carries, and anything else is one step away.

yaml
jobs:
  build:
    runs-on: ghwarp-2vcpu-ubuntu-2404
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: 22
      - run: sudo apt-get update && sudo apt-get install -y tree
systemUbuntu 24.04 on x64, with git, git-lfs, gh, curl, wget, jq, zip, unzip, rsync and build-essential
containersDocker with Buildx and Compose, and podman, buildah and skopeo
languagesNode.js with npm, Yarn and Corepack; Python 3 with pip and venv; Go; Java 21 with Maven and Gradle; Ruby with Bundler; .NET SDK 8; PHP with Composer; Rust, with clippy and rustfmt, through rustup
build toolscmake, ninja, autoconf, automake and libtool
cloud and clusterkubectl, helm, the AWS CLI, the Google Cloud CLI and the Azure CLI
databasesthe PostgreSQL, MySQL, SQLite and Redis clients
checksshellcheck and GNU parallel

The languages Ubuntu packages come at the version Ubuntu 24.04 ships, so node on the path is Ubuntu's Node.js; use actions/setup-node and the other setup actions for a particular version. The tools Ubuntu does not package, such as kubectl, helm and the cloud CLIs, are pinned and updated with the image.

What is not installed. GitHub's image carries a long tail that this one leaves out on purpose: browsers and their drivers, the Android SDK, PowerShell, Homebrew, Miniconda, and version managers such as nvm and pyenv. pnpm is not installed either, as on GitHub's image; corepack enable pnpm gets it. Nor is Terraform, which GitHub's ubuntu-24.04 image does not carry; add hashicorp/setup-terraform to a job that needs it, as you would on GitHub.

The job runs as the runner user, which has passwordless sudo, so sudo apt-get install works in any step.

actions/setup-node, actions/setup-python, actions/setup-java, actions/setup-go and the other setup actions work as they do on GitHub. They install into the tool cache at /opt/hostedtoolcache, which the runner user owns, and Node.js and Go are already in it.

Anything you add lasts for the one job. The next job starts from the image again. For a tool that is slow to install, see the Actions cache.