Use when testing GitHub Actions workflows locally with act. Covers act CLI usage, Docker configuration, debugging workflows, and troubleshooting common issues when running workflows on your local machine.
Install
npx skillscat add thebushidocollective/han/act-local-testing Install via the SkillsCat registry.
Act - Local Workflow Testing
Use this skill when testing GitHub Actions workflows locally with act. This covers act CLI commands, Docker setup, debugging, and best practices for fast local iteration on CI/CD workflows.
Installation
macOS
brew install actLinux
curl -s https://raw.githubusercontent.com/nektos/act/master/install.sh | sudo bashWindows
choco install act-cli
# or
scoop install actFrom Source
go install github.com/nektos/act@latestBasic Usage
Run All Workflows
# Run workflows triggered by push event
act
# Equivalent to
act pushRun Specific Events
# Pull request event
act pull_request
# Workflow dispatch
act workflow_dispatch
# Custom event
act repository_dispatch -e event.jsonRun Specific Workflows
# Run specific workflow file
act -W .github/workflows/ci.yml
# Run specific job
act -j build
# Run specific workflow and job
act -W .github/workflows/deploy.yml -j productionList Available Workflows
# List all workflows and jobs
act -l
# List for specific event
act pull_request -lValidation and Dry Runs
Dry Run
# Validate without executing
act --dryrun
# Show what would run
act -n
# Validate specific workflow
act --dryrun -W .github/workflows/ci.ymlGraph Visualization
# Show workflow graph
act -g
# Show graph for specific event
act pull_request -gDocker Configuration
Default Runners
Act uses Docker images to simulate GitHub's runners:
# Use default images (micro - minimal)
act
# Use medium images (more tools)
act -P ubuntu-latest=catthehacker/ubuntu:act-latest
# Use large images (most compatible)
act -P ubuntu-latest=catthehacker/ubuntu:full-latestCustom Platform Images
Create .actrc file in project root:
-P ubuntu-latest=catthehacker/ubuntu:act-latest
-P ubuntu-22.04=catthehacker/ubuntu:act-22.04
-P ubuntu-20.04=catthehacker/ubuntu:act-20.04Or use command line:
act -P ubuntu-latest=node:18 \
-P ubuntu-22.04=catthehacker/ubuntu:act-22.04Reusing Docker Containers
# Reuse containers between runs (faster)
act --reuse
# Clean up after run
act --rmSecrets Management
Using .secrets File
Create .secrets in project root:
GITHUB_TOKEN=ghp_your_token_here
NPM_TOKEN=npm_your_token_here
AWS_ACCESS_KEY_ID=your_key
AWS_SECRET_ACCESS_KEY=your_secretAdd to .gitignore:
.secretsRun with secrets:
act --secret-file .secretsInline Secrets
# Single secret
act -s GITHUB_TOKEN=ghp_token
# Multiple secrets
act -s GITHUB_TOKEN=ghp_token \
-s NPM_TOKEN=npm_tokenEnvironment-Specific Secrets
# Development secrets
act --secret-file .secrets.dev
# Production secrets
act --secret-file .secrets.prodEnvironment Variables
Setting Variables
# Single variable
act --env NODE_ENV=development
# Multiple variables
act --env NODE_ENV=development \
--env DEBUG=trueUsing .env File
Create .env file:
NODE_ENV=development
DEBUG=true
LOG_LEVEL=debugRun with env file:
act --env-file .envGitHub Context Variables
Act automatically sets these:
GITHUB_ACTOR=nektos/act
GITHUB_REPOSITORY=owner/repo
GITHUB_EVENT_NAME=push
GITHUB_SHA=abc123...
GITHUB_REF=refs/heads/main
ACT=trueDebugging
Verbose Output
# Verbose mode
act -v
# Very verbose (debug)
act -vvStep-by-Step Execution
# Interactive mode - pause before each step
act --watchInspect Containers
# Keep container running after workflow
act --reuse
# Then in another terminal
docker ps
docker exec -it <container-id> /bin/bashBind Mount Local Files
# Mount current directory
act --bind
# Mount specific directory
act -b /host/path:/container/pathCommon Workflows
Test Before Push
# Validate workflow syntax
act --dryrun
# Run tests
act -j test
# Run full CI
actIterative Development
# Edit workflow
vim .github/workflows/ci.yml
# Test immediately
act --reuse -j build
# Iterate quickly
act --reuse -j buildMatrix Testing
# Run specific matrix combination
act --matrix os:ubuntu-latest --matrix node:20
# Run all combinations
actTroubleshooting
Docker Issues
# Check Docker is running
docker ps
# Pull required images manually
docker pull catthehacker/ubuntu:act-latest
# Clean up Docker resources
docker system prune -aPermission Issues
# Run with sudo (Linux)
sudo act
# Fix Docker permissions (Linux)
sudo usermod -aG docker $USER
newgrp dockerMissing Tools
# Use fuller image
act -P ubuntu-latest=catthehacker/ubuntu:full-latest
# Or install in workflow
- run: |
apt-get update
apt-get install -y some-toolWorkflow Not Found
# Check workflow files exist
ls -la .github/workflows/
# Validate YAML syntax
yamllint .github/workflows/*.yml
# List detected workflows
act -lAction Compatibility
Some actions don't work with act:
# Skip action in act
- name: GitHub-only action
if: ${{ !env.ACT }}
uses: github/some-action@v1
# Use alternative in act
- name: Local alternative
if: env.ACT == 'true'
run: echo "Running local version"Best Practices
DO
✅ Use act --dryrun before running full workflows
✅ Create .actrc for consistent configuration
✅ Use .secrets file and add it to .gitignore
✅ Use --reuse for faster iteration
✅ Test workflows locally before pushing
✅ Use appropriate image sizes for your needs
✅ Document act usage in README
DON'T
❌ Commit .secrets or .env files
❌ Use latest Docker tags in production
❌ Skip validation with --dryrun
❌ Run act without understanding what it will do
❌ Ignore Docker disk space usage
❌ Assume all actions work perfectly with act
Configuration Files
.actrc
# Platform mappings
-P ubuntu-latest=catthehacker/ubuntu:act-latest
# Default options
--reuse
--secret-file .secrets
--env-file .env
# Container options
--container-architecture linux/amd64.github/workflows/.actrc
Project-specific overrides in workflows directory.
CI/CD Integration
Pre-Push Hook
.git/hooks/pre-push:
#!/bin/bash
echo "Validating workflows..."
act --dryrun
if [ $? -ne 0 ]; then
echo "Workflow validation failed"
exit 1
fiMake Target
.PHONY: test-workflows
test-workflows:
act --dryrun
act -j test
.PHONY: ci-local
ci-local:
act --reusePerformance Tips
Faster Iteration
# Use reuse flag
act --reuse
# Skip checkout if not needed
act --reuse -j test --no-recurse
# Use smaller images for simple tests
act -P ubuntu-latest=node:20-alpineCaching
Act respects GitHub Actions caching:
- uses: actions/cache@v4
with:
path: ~/.npm
key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}Cache location on host: ~/.cache/act/
Related Skills
- act-workflow-syntax: Creating and structuring workflow files
- act-docker-setup: Configuring Docker for act
- act-advanced-features: Advanced act usage patterns