Skip to content

Running Github Actions Locally

The Github Actions workflows can be tested locally using nektos/act without pushing changes to the remote. The local repository state will be used in the executed workflow.

Prerequisites

  1. A docker installation without sudo prefix requirement (see also dockerdocs):

    sudo usermod -aG docker $USER
    
  2. Install the Github CLI (gh): linux, macos.

  3. Authenticate your Github account with the Github CLI:

    gh auth login
    

    This is required to set GITHUB_TOKEN to the output of gh auth token when running the workflows.

  4. Install the act tool as a Github extension (nektos/act docs):

    gh extension install https://github.com/nektos/gh-act
    

    or use one of the other available methods.

Updating nektos/act to the latest version via the Github CLI

The act tool can be updated via the Github CLI:

gh extension upgrade nektos/act

Listing the Available Workflows

gh act --list

will output something similar to:

INFO[0000] Using docker host 'unix:///var/run/docker.sock', and daemon socket 'unix:///var/run/docker.sock'
Stage  Job ID                Job name                                                      Workflow name                             Workflow file          Events
0      evmone-coverage-diff  evmone-coverage-diff                                          Evmone Coverage Report                    coverage.yaml          pull_request
0      deploy                deploy                                                        Deploy Docs Main                          docs_main.yaml         push
0      deploy                deploy                                                        Deploy Docs Tags                          docs_tags.yaml         push
0      features              features                                                      Build and Package Fixtures                fixtures.yaml          push,workflow_dispatch
0      feature-names         feature-names                                                 Build and Package Fixtures for a feature  fixtures_feature.yaml  push,workflow_dispatch
0      static                Run static checks                                             Test                                      test.yaml              push,pull_request,workflow_dispatch
0      py3                   Fill tests (Python)                                           Test                                      test.yaml              push,pull_request,workflow_dispatch
0      docs                  Build html documentation with mkdocs                          Test Docs                                 test-docs.yaml         push,pull_request,workflow_dispatch
1      build                 build                                                         Build and Package Fixtures                fixtures.yaml          push,workflow_dispatch
1      build                 build                                                         Build and Package Fixtures for a feature  fixtures_feature.yaml  push,workflow_dispatch
2      release               release                                                       Build and Package Fixtures                fixtures.yaml          push,workflow_dispatch
2      release               release                                                       Build and Package Fixtures for a feature  fixtures_feature.yaml  push,workflow_dispatch

The Job ID is required to run a specific workflow and is provided to the -j option of gh act.

Running Workflows that require Github Vars

Create a text file containing the required variables and variables, e.g., .act_github_vars (this is in .gitignore):

UV_VERSION=0.5.15
DEFAULT_PYTHON_VERSION=3.12

and use the --var-file option to specify the file:

gh act --workflows .github/workflows/test.yaml -s GITHUB_TOKEN=$(gh auth token) --var-file=gh_vars.txt -j static

Running Workflows that use a Matrix Strategy

This is optional, recent versions will automatically detect the matrix strategy and run supported values. To run a specific matrix value, use the --matrix option:

gh act --workflows .github/workflows/test.yaml -s GITHUB_TOKEN=$(gh auth token) --matrix python:3.12 -j test-tests

Running Release Workflows

Release builds require the ref input to be specified. To test a release build locally:

  1. Create a JSON file specifying the input data required for a release build (the release tag), e.g, event.json:

    {
        "ref": "refs/tags/stable@v4.2.0"
    }
    
  2. Run act and specify the workflow file, the Github token, and the event file:

    gh act -j build --workflows .github/workflows/fixtures_feature.yaml -s GITHUB_TOKEN=$(gh auth token) -e event.json
    

Manually Specifying the Docker Image

It's possible to specify the Docker image used by the act tool for a specific platform defined in a workflow using the -P (--platform) option. For example, use map ubuntu-latest in the workflow to use ubuntu-24.04:

-P ubuntu-latest=ubuntu:24.04

This can be added to any gh act command.