← All posts

DevOps

act: Run Your GitHub Actions Locally Before You Push

act runs your GitHub Actions workflows locally in Docker, so you can test CI changes without pushing commits.

A DevOps

Editing a GitHub Actions workflow usually means the worst debugging loop there is: change the YAML, commit, push, wait for the runner, read the failure, repeat - polluting your history with "fix CI" commits along the way. act breaks that loop. It reads your .github/workflows files and runs the jobs locally in Docker containers that mimic GitHub's runners, so you can test a workflow change on your machine in seconds instead of pushing to find out.

Your CI, Locally

Point it at your repo and it runs the workflows the way GitHub would:

# Run the default (push) event's jobs act # Run a specific job act -j build # Simulate a pull_request event act pull_request

Faster Feedback, Cleaner History

Because act runs the actual workflow steps in containers locally, you catch the broken step immediately and iterate without commits. It supports events, job selection, secrets, and matrix builds, so most of what your real pipeline does can be exercised before anything reaches GitHub.

Rough Edges and Limitations

  • Not a perfect clone. The runner images approximate GitHub's; some actions or environment specifics differ.
  • Docker required. Jobs run in containers, so a working Docker setup is a prerequisite.
  • Big images. Full-featured runner images are large to pull the first time.

For anyone iterating on CI, act turns a push-and-pray cycle into a local, fast one - and keeps your commit history free of CI-debugging noise.

Internal link suggestion: link "a GitHub Actions workflow" to the GitHub CLI post for managing those runs from the terminal.