Skip to content

Usage

Run from a repository root (or pass a path):

actnode                 # problems only
actnode path/to/repo --all   # every step, including the ones already on node24

What it scans: every file in .github/workflows/*.yml|yaml, plus a root action.yml if the repo is itself an action. Every uses: is resolved:

Status Meaning
ok the action runs on node24 (or the --target) or newer
OLD + -> runs on an older Node; a newer release on node24 exists, shown after ->
OLD + note runs on an older Node and no release runs on node24 yet: open an issue upstream, fork, or replace it
cmp composite action; the steps inside are checked and shown with (inside …)
wfl reusable workflow; jobs/steps inside are checked recursively (same depth as composites)
dkr Docker action, not affected
? could not read action.yml / workflow YAML (private repo, deleted ref, unpinned ref)

Reusable workflows (uses: org/repo/.github/workflows/ci.yml@v1 or local ./.github/workflows/…) are fetched and scanned the same way composites are followed.

Remote scan (no clone)

actnode --repo owner/name          # one public (or token-visible) repo via the API
actnode --org owner                # all public non-fork repos for an org or user

Findings are labeled owner/repo:.github/workflows/ci.yml. Forks and archived repos are skipped in --org mode. --fix is refused with --repo/--org (needs a local checkout). Set GITHUB_TOKEN for rate limits and private repos.

PATH, --repo, and --org are mutually exclusive.

Fix

actnode --fix
git diff

Only direct uses: lines with a suggestion are rewritten. Quotes, indentation and trailing comments are kept; for SHA pins the trailing comment becomes the new version. Actions found inside composite actions or reusable workflows can't be fixed in your repo: bump the composite/reusable workflow or ask its maintainer.

Major bumps can carry breaking changes (for example upload-artifact v4 → v6). Read the release notes before merging.

Formats

actnode --format json -o actnode.json
actnode --format md -o "$GITHUB_STEP_SUMMARY"

Gate

actnode --fail   # exit 1 if any old-runtime action is found

Cache

Tag lookups are cached under ~/.cache/actnode (or $XDG_CACHE_HOME/actnode) for 24 hours so repeated scans of the same actions stay fast. Pass --no-cache to always hit the GitHub API.