• Stars
    star
    8,720
  • Rank 3,964 (Top 0.09 %)
  • Language
    PowerShell
  • License
    MIT License
  • Created almost 5 years ago
  • Updated 3 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

GitHub Actions runner images

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

Image YAML Label Included Software Rollout Progress of Latest Image Release
Ubuntu 22.04 ubuntu-latest or ubuntu-22.04 ubuntu-22.04 status22
Ubuntu 20.04 ubuntu-20.04 ubuntu-20.04 status20
macOS 13 [beta] macos-13 or macos-13-xl macOS-13 statusumac13
macOS 12 macos-latest, macos-latest-xl, macos-12, or macos-12-xl macOS-12 statusumac12
macOS 11 macos-11 macOS-11 statusmac11
Windows Server 2022 windows-latest or windows-2022 windows-2022 statuswin22
Windows Server 2019 windows-2019 windows-2019 statuswin19

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 name Installation strategy
Docker images not more than 3 latest LTS OS\tool versions. New images or new versions of current images are added using the standard tool request process
Java all LTS versions
Node.js 3 latest LTS versions
Go 3 latest minor versions
Python
Ruby
5 most popular major.minor versions
PyPy 3 most popular major.minor versions
.NET Core 2 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 NDK 1 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 system Package manager Third-party repos and packages
Ubuntu APT Eclipse-Temurin (Adoptium)
Erlang
Firefox
gcc, gfortran
git
HHvm
PHP (Ubuntu 20 only)
Mono
PostgreSQL
R
pipx ansible-core
yamllint
Windows Chocolatey No third-party repos installed
macOS Homebrew aws-cli v2
azure/bicep
mongodb/brew
pipx yamllint

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.

More Repositories

1

starter-workflows

Accelerating new GitHub Actions workflows
TypeScript
8,367
star
2

toolkit

The GitHub ToolKit for developing GitHub Actions.
TypeScript
4,677
star
3

checkout

Action for checking out a repo
TypeScript
4,634
star
4

runner

The Runner for GitHub Actions 🚀
C#
4,498
star
5

cache

Cache dependencies and build outputs in GitHub Actions
TypeScript
4,263
star
6

actions-runner-controller

Kubernetes controller for GitHub Actions self-hosted runners
Go
4,156
star
7

github-script

Write workflows scripting the GitHub API in JavaScript
TypeScript
3,938
star
8

setup-node

Set up your GitHub Actions workflow with a specific version of node.js
TypeScript
3,610
star
9

upload-artifact

TypeScript
2,871
star
10

typescript-action

Create a TypeScript Action with tests, linting, workflow, publishing, and versioning
TypeScript
1,774
star
11

labeler

An action for automatically labelling pull requests
TypeScript
1,752
star
12

setup-python

Set up your GitHub Actions workflow with a specific version of Python
TypeScript
1,538
star
13

setup-java

Set up your GitHub Actions workflow with a specific version of Java
TypeScript
1,408
star
14

create-release

An Action to create releases via the GitHub Release API
JavaScript
1,315
star
15

setup-go

Set up your GitHub Actions workflow with a specific version of Go
TypeScript
1,295
star
16

stale

Marks issues and pull requests that have not had recent interaction
TypeScript
1,254
star
17

download-artifact

TypeScript
1,208
star
18

setup-dotnet

Set up your GitHub Actions workflow with a specific version of the .NET core sdk
TypeScript
905
star
19

javascript-action

Create a JavaScript Action with tests, linting, workflow, publishing, and versioning
JavaScript
901
star
20

upload-release-asset

An Action to upload a release asset via the GitHub Release API
JavaScript
660
star
21

first-interaction

An action for filtering pull requests and issues from first-time contributors
JavaScript
648
star
22

deploy-pages

GitHub Action to publish artifacts to GitHub Pages for deployments
JavaScript
555
star
23

dependency-review-action

A GitHub Action for detecting vulnerable dependencies and invalid licenses in your PRs
TypeScript
528
star
24

add-to-project

Automate adding issues and pull requests to GitHub projects
TypeScript
455
star
25

delete-package-versions

TypeScript
313
star
26

gh-actions-cache

A GitHub (gh) CLI extension to manage the GitHub Actions caches being used in a GitHub repository.
Go
257
star
27

example-services

Example workflows using service containers
JavaScript
244
star
28

hello-world-javascript-action

A template to demonstrate how to build a JavaScript action.
JavaScript
198
star
29

heroku

GitHub Action for interacting with Heroku
HCL
179
star
30

container-action

Shell
178
star
31

upload-pages-artifact

A composite action for packaging and uploading an artifact that can be deployed to GitHub Pages.
Shell
171
star
32

setup-ruby

Set up your GitHub Actions workflow with a specific version of Ruby
TypeScript
169
star
33

hello-world-docker-action

A template to demonstrate how to build a Docker action.
Shell
154
star
34

setup-elixir

Set up your GitHub Actions workflow with OTP and Elixir
JavaScript
153
star
35

python-versions

Python builds for Actions Runner Images
PowerShell
148
star
36

github

Wraps actions-toolkit into an Action for common GitHub automations.
JavaScript
103
star
37

container-toolkit-action

Template repo for creating container actions using https://github.com/actions/toolkit/
TypeScript
101
star
38

actions-sync

This tool allows GHES administrators to sync Actions to their instances
Go
93
star
39

configure-pages

An action to enable Pages and extract various metadata about a site. It can also be used to configure various static site generators we support as starter workflows.
JavaScript
91
star
40

create-github-app-token

GitHub Action for creating a GitHub App Installation Access Token
JavaScript
86
star
41

setup-haskell

Set up your GitHub Actions workflow with a specific version of Haskell (GHC and Cabal)
TypeScript
69
star
42

node-versions

Node builds for Actions Runner Images
PowerShell
69
star
43

http-client

A lightweight HTTP client optimized for use with actions, TypeScript with generics and async await.
TypeScript
69
star
44

jekyll-build-pages

A simple GitHub Action for producing Jekyll build artifacts compatible with GitHub Pages.
HTML
66
star
45

importer-labs

GitHub Actions Importer helps you plan and automate the migration of Azure DevOps, Bamboo, CircleCI, GitLab, Jenkins, and Travis CI pipelines to GitHub Actions.
Ruby
59
star
46

runner-container-hooks

Runner Container Hooks for GitHub Actions
TypeScript
58
star
47

languageservices

Language services for GitHub Actions workflows and expressions.
TypeScript
50
star
48

go-dependency-submission

Calculates dependencies for a Go build-target and submits the list to the Dependency Submission API
TypeScript
48
star
49

importer-issue-ops

GitHub Actions Importer helps you plan and automate the migration of Azure DevOps, Bamboo, CircleCI, GitLab, Jenkins, and Travis CI pipelines to GitHub Actions.
Ruby
43
star
50

go-versions

Go releases for Actions Runner Images
PowerShell
39
star
51

reusable-workflows

Reusable workflows for developing actions
JavaScript
38
star
52

publish-action

TypeScript
33
star
53

.github

30
star
54

humans.txt

An Action to list out the humans who help feed and tend the robots of GitHub Actions.
JavaScript
27
star
55

versions-package-tools

Libs and tools used to build all *-version tools for GitHub Actions
PowerShell
20
star
56

virtual-environments-packages

Code and scripts used to automate delivery of tool packages used in virtual-environments.
17
star
57

partner-runner-images

About GitHub Actions runner images provided by 3rd parties
7
star
58

boost-versions

Boost builds for Actions Virtual Environments
PowerShell
6
star
59

action-versions

Shell
6
star
60

anno-test

1
star
61

alpine_nodejs

Workflow for redistribution of Node.JS for actions/runner
Dockerfile
1
star