Running GitHub Actions Locally

You can locally test the GitHub Actions defined in this your project using nektos act.

Setup

Simply run:

act

Rancher Desktop on Mac

If you are using Rancher Desktop on Mac, you may see errors like this:

%  act -j build
INFO[0000] Using docker host 'unix:///var/run/docker.sock', and daemon socket 'unix:///var/run/docker.sock' 
[Continuous Integration/build] 🚀  Start image=ghcr.io/catthehacker/ubuntu:act-latest
[Continuous Integration/build]   🐳  docker pull image=ghcr.io/catthehacker/ubuntu:act-latest platform= username= forcePull=true
Error: Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?

You can print out your Docker contexts with the following command:

% docker context ls
NAME                DESCRIPTION                               DOCKER ENDPOINT                         ERROR
default             Current DOCKER_HOST based configuration   unix:///var/run/docker.sock             
rancher-desktop *   Rancher Desktop moby context              unix:///Users/bhamail/.rd/docker.sock   

You can set the DOCKER_HOST environment variable as shown below which will allow act to use the correct Docker context:

export DOCKER_HOST=$(docker context inspect | jq -r '.[0].Endpoints.docker.Host')

See: slight modification that helps for rancher desktop

Apple Silcon

If running on Apple Silicon (ARM), launch act with this flag:

   act --container-architecture linux/amd64

Without this flag, I saw this warning:

WARN  ⚠ You are using Apple M-series chip and you have not specified container architecture, you might encounter issues while running act. If so, try running it with '--container-architecture linux/amd64'. ⚠

and this error:

...   🐳  docker exec cmd=[bash --noprofile --norc -e -o pipefail /var/run/act/workflow/1] user= workdir=
| docker compose build
[+] Building 0.0s (0/0)                                                         
| permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get "http://%2Fvar%2Frun%2Fdocker.sock/_ping": dial unix /var/run/docker.sock: connect: permission denied
...

Usage

To get a list of available jobs, run:

    $ act -l

To run a specific job, use the -j flag:

    $ act -j <job-name>

For example, to run the build job from the ci.yml file, use this command:

    $ act --workflows .github/workflows/ci.yml -j build