EXIT 1
Install
pipx install git+https://github.com/Blackman99/actnode
Python 3.9+, zero dependencies. Or skip installing and use the GitHub Action below.
EXIT 2
Scan the repo
$ actnode
[OLD] .github/workflows/ci.yml:7 node20 actions/checkout@v4 -> actions/checkout@v5
[OLD] .github/workflows/ci.yml:9 node20 actions/cache@v4 -> actions/cache@v5
[OLD] .github/workflows/ci.yml:11 node20 some-org/deploy@v2 no release on node24 yet
3 step(s) run an action older than node24; 2 have a newer release ready.
It reads every uses: in your workflows and local actions, fetches each action's action.yml at that exact ref, follows composite actions and reusable workflows inside, and picks the smallest major jump that runs on Node 24. SHA pins get a SHA back. Or scan remote with actnode --repo owner/name — no clone.
EXIT 3
Change lanes
$ actnode --fix
- - uses: actions/checkout@11bd719… # v4.2.2
+ - uses: actions/checkout@fbc6f39… # v5.1.0
- - uses: actions/setup-node@v4.1.0
+ - uses: actions/setup-node@v5.0.0
Only the lines with a known fix are rewritten; quotes, comments and indentation stay. Review the majors' changelogs, then commit.
EXIT 4
Keep it in CI
- uses: actions/checkout@v7
- uses: Blackman99/actnode@v0.1.0
with:
fail: true # red build if an old-runtime action sneaks back
Writes a table to the job summary. The FORCE_JAVASCRIPT_ACTIONS_TO_NODE24 switch only hides the problem for now; actnode tells you what to bump before Node 20 is removed from runners.