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.
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| system | Ubuntu 24.04 on x64, with git, git-lfs, gh, curl, wget, jq, zip, unzip, rsync and build-essential |
| containers | Docker with Buildx and Compose, and podman, buildah and skopeo |
| languages | Node.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 tools | cmake, ninja, autoconf, automake and libtool |
| cloud and cluster | kubectl, helm, the AWS CLI, the Google Cloud CLI and the Azure CLI |
| databases | the PostgreSQL, MySQL, SQLite and Redis clients |
| checks | shellcheck 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.