mrkeyoor.com_
Sun 13 Sept 17:40 UTC
Dev Toolsevaluationupdated 13 Sept 2026

act review

Act runs GitHub Actions workflow files on your own machine, so you can check a job before pushing a commit. It maps workflow jobs to local Docker containers, supplies GitHub-like variables, and accepts event data and secrets. It is useful feedback, but it does not reproduce every feature or hosted-runner detail.

trackingstars / 7d
Verdict

Our Act build passed in 48 seconds, but only 4 of 7 test results passed and the 106-second suite exited 1. Use it for quick checks on container-friendly workflows, especially while editing YAML or an action. Keep a hosted GitHub run as the release authority because Act documents material compatibility gaps and its own runner tests did not all pass for us.

We ran it

Lab card: what happened when we ran actScreenshot of act (nektosact.com)
Install✓ · 41s145 packages
Build✓ · 48s
Tests✗ · 106s4 passed · 3 failed of 7 (go test)
Repo417 files~34,992 lines of source · 1.4 MB · 5 CI workflows

Answers from our run

Does act build from source?

Dependencies installed in 41 seconds (145 packages), and the build succeeded in 48 seconds. We cloned commit 4f41128 into a clean Debian container with 3 CPUs and no project-specific setup.

Do act's tests pass?

Not all of them: 4 of 7 passed and 3 failed when we ran the project's own test command (go test). Some failures need services or credentials a bare container does not have.

Who should not use act?

Teams that require exact GitHub-hosted runner behavior: the user guide says the default images omit tools, and even properly installed software can behave differently inside Docker.

What are the alternatives to act?

actionlint, GitHub Actions Runner. Our Act build passed in 48 seconds, but only 4 of 7 test results passed and the 106-second suite exited 1.

Setup3/541-second install; Docker and runner-image choices add work
Docs4/5Good usage guide, but its support matrix says it is unfinished
Community4/571,959 stars and recent activity, with 380 open issues and PRs
Maturity3/5v0.2.89 is established, but our 3 failed test results matter

Who it’s for

Developers changing GitHub Actions YAML or action code who want feedback before a push.
Teams reusing the same workflow as a local task runner and hosted CI definition.
Linux-first projects whose important jobs fit inside Docker containers.
Engineers willing to provide local event payloads, variables, tokens, and runner-image mappings.

Who it’s NOT for

Teams that require exact GitHub-hosted runner behavior: the user guide says the default images omit tools, and even properly installed software can behave differently inside Docker.
Workflows that depend on job permissions, deployment environments, OIDC, job timeouts, or concurrency: the unsupported-functionality page says these are ignored, incomplete, or unavailable.
Podman-only organizations that require vendor-backed compatibility: the installation guide says Podman may work through its Docker-compatible socket but is not supported.
Pipelines that must test macOS or Windows semantics from a Linux host: direct host execution requires running Act on the matching operating system.
Artifact workflows needing full current-action parity: the guide limits its claim to v3 and v4 within one run, while open issue 6173 reports a v7 upload and v8 download mismatch.

Setup reality

Our sandbox installed 145 Go packages in 41 seconds and built Act successfully in 48 seconds. Tests then failed with exit 1 after 106 seconds: 4 passed and 3 failed out of 7. Commit 4f41128 contained 417 files, about 34,992 source lines, 5 CI workflows, no Dockerfile, and no tests directory.

Running a real workflow usually needs the Docker Engine API. Private actions and API calls may need a GitHub token; repository variables, secrets, and event fields must be supplied locally. The docs recommend secure prompting because secrets typed directly into a command can land in shell history.

Default runner images intentionally omit parts of GitHub's hosted images, and the fuller documented image exceeds 18 GB. Podman is not a supported backend. Host execution can cover macOS or Windows only on that operating system, while several GitHub Actions fields remain ignored or incomplete.

Act v0.2.89 runs workflow jobs before you push

Act v0.2.89 reads .github/workflows, selects the jobs triggered by an event, resolves their dependencies, and runs the required actions inside local containers. With no event argument, it uses push and runs every matching workflow. That shortens the feedback loop for a YAML edit or a locally developed action. It can also make a workflow double as a task runner, which is handy when the hosted definition already contains the commands a developer needs.

The checkout we measured was 1.4 MB with 417 files and about 34,992 source lines. Act is a Go command-line program rather than a second CI service. It obtains actions and runner images, sets familiar environment values, mounts the repository, and asks the Docker Engine API to run each job. The distinction matters: local execution is an interpretation of GitHub's format, not access to the hosted runner fleet or its surrounding service.

An ubuntu-22.04 job normally needs Docker Engine

An ubuntu-22.04 workflow normally runs in a Linux container selected through a platform mapping. The installation guide names the Docker Engine API as the standard requirement. A compatible remote engine can be selected through DOCKER_HOST, including an SSH endpoint. Podman exposes a compatible socket and may work, but the same guide says the project does not guarantee it. Teams standardized on Podman should test their exact workflows before adding Act to required developer tooling.

The official runner guide says its default images intentionally omit tools that GitHub installs on hosted runners. Its fuller alternative is documented as larger than 18 GB, and even that cannot erase every difference between a virtual machine and a Docker container. Systemd is the clearest example named in the guide. A local failure can therefore describe the image rather than the workflow, while a local pass cannot prove the hosted job will behave identically.

What happened when we ran it

Our sandbox installed 145 Go packages in 41 seconds, then completed the build in 48 seconds. The checkout at commit 4f41128 had 5 CI workflow files, no Dockerfile, and no tests directory. Those results came from an unprivileged golang:1.24-bookworm container with 3 CPUs, 8 GB of RAM, and no secrets. Installation and compilation were clean; the test stage was not.

The Go test command exited 1 after 106 seconds, with 4 passes and 3 failures out of 7 results. The failing names were TestRunActionInputs, TestRunEventPullRequest, and TestRunMatrixWithUserDefinedInclusions, all under pkg/runner. The supplied log tail showed their names and the package failure, but no assertion message or cause. The defensible finding is limited: commit 4f41128 did not pass its full test command in our fresh environment.

Local events and secrets require explicit input

Act v0.2.89 cannot receive GitHub's automatic GITHUB_TOKEN on a developer machine. A workflow that needs repository access may require a personal token passed as a secret. The guide recommends act -s GITHUB_TOKEN without an inline value, which reads the environment or opens a secure prompt. It warns that putting a secret directly in the command can save it in shell history. Variable files and secret files use an env-style format and need the same storage care as any credential file.

Event context also needs attention. A pull-request simulation may require 2 refs, head and base, in a JSON event file; a tag push needs the appropriate ref. You can narrow a run to one workflow with -W, one job with -j, or selected matrix values with --matrix. The ACT environment variable lets a workflow skip a local-only step, such as a notification. These controls are useful, though each creates another difference from the hosted path.

v0.2.89 still leaves several GitHub fields unfinished

Act v0.2.89 covers the common shape of jobs and steps, but its unsupported page names consequential omissions. Workflow concurrency and run names are ignored. Job permissions, timeouts, cancellation, and continue-on-error behavior are missing or ignored. The GitHub context is incomplete, OIDC has no URL, and deployment-environment secret scoping is unsupported. A team should scan that list against its workflow before treating a local green run as evidence for release.

Artifacts show how compatibility moves underneath a local runner. The user guide says the built-in artifact server must be enabled with a path and claims v3 and v4 upload and download support within the current run. Cross-run and cross-repository downloads are outside that claim. Open issue 6173 reports that a direct v7 upload followed by a v8 download loses the original filename because response metadata is not preserved. That is a concrete reason to keep artifact checks on GitHub.

71,959 stars coexist with 380 open issues and pull requests

GitHub showed 71,959 stars, 266 open issues, and 114 open pull requests on September 13, 2026. The last code push was August 9, while the latest release, v0.2.89, arrived June 1. Issue activity continued after both dates: an ARM64 host-execution bug was filed September 10, and pull request 6182 proposed a fix the same day. The project is receiving current reports and patches, although the combined queue is large enough that fixes may wait.

Release v0.2.89 points to the same 4f41128 commit we measured. It contains a dependency update and a version bump rather than a long feature release. Current open reports cover runner architecture, concurrent action-cache access, runner-image differences, artifacts, and newer workflow schema fields. That range fits a mature compatibility project chasing a moving target. It also explains why a version with broad adoption can still produce edge cases in ordinary workflows.

Use Act for local confidence and GitHub for the final run

Actionlint is the lighter choice when you only need static workflow checks. GitHub's official Actions Runner is the better fit when a registered machine and service-controlled execution are acceptable. Act sits between them: it can execute substantial workflow logic without a push, but it carries a local runner model you must configure and distrust in specific, documented ways. Our 48-second build and 3 failed test results support that narrower role.

Alternatives

ProjectWhat it isPick it when
actionlint gh↗A static checker for GitHub Actions syntax, expressions, and common workflow mistakes.pick this instead when you need fast workflow validation without pulling runner images or executing jobs.
GitHub Actions RunnerGitHub's official runner application for machines registered with the hosted Actions service.pick this instead when service-connected execution and official runner behavior matter more than an offline pre-push loop.

What people are saying

  1. [github-trending] nektos/act
  2. [openai] The AI policy window is open. We need to act.

Sources

  1. Act README
  2. Act installation guide
  3. Act runner images guide
  4. Act unsupported functionality
  5. Act v0.2.89 release
  6. Act artifact v7 and v8 issue

More dev tools reviews

Kingfisher · mypy · ligolo-ng · stremio-core · cool-retro-term · agent-skills · the whole board →