Convert Figma logo to code with AI

actions logorunner-images

GitHub Actions runner images

9,799
3,003
9,799
74

Top Related Projects

26,246

Vagrant is a tool for building and distributing development environments.

4,238

Packer templates for building minimal Vagrant baseboxes for multiple platforms

Quick Overview

The actions/runner-images repository contains the source code used to create the GitHub-hosted runner images for GitHub Actions. These images are pre-configured virtual machine environments that include commonly used tools and software for CI/CD workflows. The repository provides Packer templates and scripts to build and maintain these images for various operating systems.

Pros

  • Comprehensive set of pre-installed tools and software for CI/CD workflows
  • Regular updates to keep software versions current
  • Detailed documentation of installed software versions
  • Open-source, allowing for community contributions and customizations

Cons

  • Large image sizes due to the extensive set of pre-installed software
  • May include unnecessary tools for specific workflows, potentially impacting performance
  • Limited customization options for users who need specific configurations
  • Potential security risks if vulnerabilities are discovered in pre-installed software

Getting Started

As this is not a code library but a repository for building runner images, there's no traditional "getting started" section. However, if you want to contribute or build custom images:

  1. Fork the repository
  2. Clone your fork: git clone https://github.com/your-username/runner-images.git
  3. Follow the contribution guidelines in the repository's README
  4. To build images locally, refer to the "Building Images Locally" section in the documentation

Note: Building images requires significant system resources and time. It's recommended to review the documentation thoroughly before attempting to build images locally.

Competitor Comparisons

26,246

Vagrant is a tool for building and distributing development environments.

Pros of Vagrant

  • Provides a more flexible and customizable environment for local development
  • Supports multiple providers (VirtualBox, VMware, Docker) for creating virtual machines
  • Allows for easy sharing and versioning of development environments

Cons of Vagrant

  • Requires more setup and configuration compared to pre-built runner images
  • May have higher resource overhead for running full virtual machines
  • Less optimized for CI/CD workflows compared to purpose-built runner images

Code Comparison

Vagrant (Vagrantfile):

Vagrant.configure("2") do |config|
  config.vm.box = "ubuntu/bionic64"
  config.vm.provision "shell", inline: "apt-get update && apt-get install -y nginx"
end

Runner Images (workflow.yml):

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - run: sudo apt-get update && sudo apt-get install -y nginx

While Vagrant focuses on creating and managing development environments, Runner Images provides pre-configured environments optimized for CI/CD workflows. Vagrant offers more flexibility and control over the environment setup, but requires more configuration. Runner Images, on the other hand, provides a simpler setup process with pre-installed tools and dependencies, making it easier to get started with CI/CD pipelines.

4,238

Packer templates for building minimal Vagrant baseboxes for multiple platforms

Pros of Bento

  • Focuses on creating minimal, lightweight base images for various platforms
  • Supports a wider range of operating systems and virtualization platforms
  • Highly customizable and extensible for specific use cases

Cons of Bento

  • Less frequent updates compared to Runner Images
  • May require more manual configuration for specific CI/CD workflows
  • Limited pre-installed software and tools compared to Runner Images

Code Comparison

Runner Images (Ubuntu 20.04):

steps:
- uses: actions/checkout@v3
- name: Set up Python
  uses: actions/setup-python@v4
  with:
    python-version: '3.x'
- name: Install dependencies
  run: |
    python -m pip install --upgrade pip
    pip install -r requirements.txt

Bento (Ubuntu 20.04):

Vagrant.configure("2") do |config|
  config.vm.box = "bento/ubuntu-20.04"
  config.vm.provision "shell", inline: <<-SHELL
    apt-get update
    apt-get install -y python3 python3-pip
    pip3 install -r /vagrant/requirements.txt
  SHELL
end

Both repositories provide base images for various platforms, but Runner Images is specifically tailored for GitHub Actions workflows, while Bento offers more flexibility for different virtualization environments. Runner Images comes with a wide range of pre-installed software, making it more convenient for CI/CD pipelines, whereas Bento focuses on providing minimal base images that can be customized as needed.

Convert Figma logo designs to code with AI

Visual Copilot

Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.

Try Visual Copilot

README

GitHub Actions Runner Images

Table of Contents

About

This repository contains the source code used to create the VM images for GitHub-hosted runners used for Actions, as well as for Microsoft-hosted agents used for Azure Pipelines. To build a VM machine from this repo's source, see the instructions.

Available Images

ImageYAML LabelIncluded SoftwareRollout Status of Latest Image Release
Ubuntu 24.04 betaubuntu-24.04ubuntu-24.04Endpoint Badge
Ubuntu 22.04ubuntu-latest or ubuntu-22.04ubuntu-22.04Endpoint Badge
Ubuntu 20.04ubuntu-20.04ubuntu-20.04Endpoint Badge
macOS 14macos-latest-large or macos-14-largemacOS-14Endpoint Badge
macOS 14 Arm64macos-latest, macos-14, macos-latest-xlarge or macos-14-xlargemacOS-14-arm64Endpoint Badge
macOS 13macos-13 or macos-13-largemacOS-13Endpoint Badge
macOS 13 Arm64macos-13-xlargemacOS-13-arm64Endpoint Badge
macOS 12macos-12 or macos-12-largemacOS-12Endpoint Badge
Windows Server 2022windows-latest or windows-2022windows-2022Endpoint Badge
Windows Server 2019windows-2019windows-2019Endpoint Badge

Label scheme

  • In general the -latest label is used for the latest OS image version that is GA
  • Before moving the-latest label to a new OS version we will announce the change and give sufficient lead time for users to update their workflows

Announcements

See notable upcoming changes by viewing issues with the Announcement label.

Image Definitions

Beta

The purpose of a Beta is to collect feedback on an image before it is released to GA. The goal of a Beta is to identify and fix any potential issues that exist on that image. Images are updated on a weekly cadence. Any workflows that run on a beta image do not fall under the customer SLA in place for Actions. Customers choosing to use Beta images are encouraged to provide feedback in the runner-images repo by creating an issue. A Beta may take on different availability, i.e. public vs private.

GA

A GA (General Availability) image has been through a Beta period and is deemed ready for general use. Images are updated on a weekly cadence. In order to be moved to GA the image must meet the following criteria:

  1. Has been through a Beta period (public or private)
  2. Most major software we install on the image has a compatible version for the underlying OS and
  3. All major bugs reported during the Beta period have been addressed.

This image type falls under the customer SLA for actions. GA images are eventually deprecated according to our guidelines as we only support the latest 2 versions of an OS.

Latest Migration Process

GitHub Actions and Azure DevOps use the -latest YAML label (ex: ubuntu-latest, windows-latest, and macos-latest). These labels point towards the newest stable OS version available.

The -latest migration process is gradual and happens over 1-2 months in order to allow customers to adapt their workflows to the newest OS version. During this process, any workflow using the -latest label, may see changes in the OS version in their workflows or pipelines. To avoid unwanted migration, users can specify a specific OS version in the yaml file (ex: macos-12, windows-2022, ubuntu-22.04).

Image Releases

How to best follow along with changes

  1. Find the latest releases for this repository here.

  2. Subscribe to the releases coming out of this repository, instructions here.

  3. Upcoming changes: A pre-release is created when the deployment of an image has started. As soon as the deployment is finished, the pre-release is converted to a release. If you have subscribed to releases, you will get notified of pre-releases as well.

  4. For high impact changes, we will post these in advance to the GitHub Changelog on our blog and on twitter.

    • Ex: breaking changes, GA or deprecation of images

Cadence

  • We typically deploy weekly updates to the software on the runner images.

Software and Image Support

Support Policy

  • Tools and versions will typically be removed 6 months after they are deprecated or have reached end-of-life

  • We support (at maximum) 2 GA images and 1 beta image at a time. We begin the deprecation process of the oldest image label once the newest OS image label has been released to GA.

  • The images generally contain the latest versions of packages installed except for Ubuntu LTS where we mostly rely on the Canonical-provided repositories.

  • Popular tools can have several versions installed side-by-side with the following strategy:

Tool nameInstallation strategy
Docker imagesnot more than 3 latest LTS OS\tool versions. New images or new versions of current images are added using the standard tool request process
Javaall LTS versions
Node.js3 latest LTS versions
Go3 latest minor versions
Python
Ruby
5 most popular major.minor versions
PyPy3 most popular major.minor versions
.NET Core2 latest LTS versions and 1 latest version. For each feature version only latest patch is installed
GCC
GNU Fortran
Clang
GNU C++
3 latest major versions
Android NDK1 latest non-LTS, 2 latest LTS versions
Xcode- all OS compatible versions side-by-side
- for beta, GM versions - latest beta only
- old patch versions are deprecated in 3 months

Package managers usage

We use third-party package managers to install software during the image generation process. The table below lists the package managers and the software installed.

Note: third-party repositories are re-evaluated every year to identify if they are still useful and secure.

Operating systemPackage managerThird-party repos and packages
UbuntuAPTcontainers (Ubuntu 20 only)
docker (Ubuntu20 0nly)
Eclipse-Temurin (Adoptium)
Erlang
Firefox
git-lfs
git
Google Cloud CLI
Heroku
HHvm
MongoDB
Mono
MS Edge
PostgreSQL
R
pipxansible-core
yamllint
WindowsChocolateyNo third-party repos installed
macOSHomebrewaws-cli v2
azure/bicep
mongodb/brew
pipxyamllint

Image Deprecation Policy

  • Images begin the deprecation process of the oldest image label once a new GA OS version has been released.
  • Deprecation process begins with an announcement that sets a date for deprecation
  • As it gets closer to the date, GitHub begins doing scheduled brownouts of the image
  • During this time there will be an Announcement pinned in the repo to remind users of the deprecation.
  • Finally GitHub will deprecate the image and it will no longer be available

Preinstallation Policy

In general, these are the guidelines we follow when deciding what to pre-install on our images:

  • Popularity: widely-used tools and ecosystems will be given priority.
  • Latest Technology: recent versions of tools will be given priority.
  • Deprecation: end-of-life tools and versions will not be added.
  • Licensing: MIT, Apache, or GNU licenses are allowed.
  • Time & Space on the Image: we will evaluate how much time is saved and how much space is used by having the tool pre-installed.
  • Support: If a tool requires the support of more than one version, we will consider the cost of this maintenance.

Default Version Update Policy

  • In general, once a new version is installed on the image, we announce the default version update 2 weeks prior to deploying it.
  • For potentially dangerous updates, we may extend the timeline up to 1 month between the announcement and deployment.

How to Interact with the Repo

  • Issues: To file a bug report, or request tools to be added/updated, please open an issue using the appropriate template
  • Discussions: If you want to share your thoughts about image configuration, installed software, or bring a new idea, please create a new topic in a discussion for a corresponding category. Before making a new discussion please make sure no similar topics were created earlier.
  • For general questions about using the runner images or writing your Actions workflow, please open requests in the GitHub Actions Community Forum.

FAQs

What images are available for GitHub Actions and Azure DevOps?

The availability of images for GitHub Actions and Azure DevOps is the same. However, deprecation policies may differ. See documentation for more details:

What image version is used in my build?

Usually, image deployment takes 2-3 days, and documentation in the main branch is only updated when deployment is finished. To find out which image version and what software versions are used in a specific build, see Set up job (GitHub Actions) or Initialize job (Azure DevOps) step log. actions-runner-image

Looking for other Linux distributions?

We do not plan to offer other Linux distributions. We recommend using Docker if you'd like to build using other distributions with the hosted runner images. Alternatively, you can leverage self-hosted runners and fully customize your VM image to your needs.

How do I contribute to the macOS source?

macOS source lives in this repository and is available for everyone. However, macOS image-generation CI doesn't support external contributions yet so we are not able to accept pull-requests for now.

We are in the process of preparing macOS CI to accept contributions. Until then, we appreciate your patience and ask you to continue to make tool requests by filing issues.

How does GitHub determine what tools are installed on the images?

For some tools, we always install the latest at the time of the deployment; for others, we pin the tool to specific version(s). For more details please see the Preinstallation Policy

How do I request that a new tool be pre-installed on the image? Please create an issue and get an approval from us to add this tool to the image before creating the pull request.
What branch should I use to build custom image? We strongly encourage customers to build their own images using the main branch. This repository contains multiple branches and releases that serve as document milestones to reflect what software is installed in the images at certain point of time. Current builds are not idempotent and if one tries to build a runner image using the specific tag it is not guaranteed that the build will succeed.