Skip to content
| Marketplace
Sign in
Visual Studio Code>Linters>Actions Expiry LintNew to Visual Studio Code? Get it now.
Actions Expiry Lint

Actions Expiry Lint

ReadyStack

| (0) | Free
Flags GitHub Actions lines that stop working on a date - retired runner images, shut-down action versions, Node runtimes past end-of-life. Checked against any 'as of' date.
Installation
Launch VS Code Quick Open (Ctrl+P), paste the following command, and press enter.
Copied to clipboard
More Info

Actions Expiry Lint

Actions Expiry Lint

A GitHub Actions workflow is the one file in a repository that rots without being edited. The YAML does not change; the platform underneath it does. A runner image is removed, an action's backing service is switched off, a Node line leaves maintenance — and the file that passed last year now fails on the first line of the job.

This extension reads .github/workflows/*.yml and reports every line that has an expiry date attached to it, together with the date itself and the line that replaces it.

The thirteen checks

Check What it catches
runner-retired runs-on names a runner image GitHub has already removed
runner-retiring runs-on names an image whose removal date is still ahead
runner-floating a -latest label, which GitHub repoints without touching your file
action-shutdown an action major version whose backing service was switched off
action-runtime-old an action major version built on a Node runtime the runners no longer ship
action-archived an action repository that is archived and read-only
action-unpinned uses: following a moving branch instead of a tag or a commit SHA
node-eol node-version past its end-of-life date
node-eol-soon node-version reaching end-of-life inside the 270-day notice window
node-odd-release node-version on an odd-numbered line, which never becomes LTS
cmd-set-output the ::set-output:: workflow command, disabled by the runner
cmd-save-state the ::save-state:: workflow command, disabled by the runner
cmd-set-env the ::set-env:: and ::add-path:: commands, disabled in November 2020

The as-of date

Every check is a date plus a replacement. The engine compares those dates against an as-of day, which defaults to today. Move the date and the same file reports different findings — that is the point of the tool, not a side effect of it.

The same ten-line workflow, unchanged:

as of 2024-06-01   4 findings, 1 error    (ubuntu-20.04 retires in 318 days)
as of 2026-09-11   5 findings, 4 errors   (ubuntu-20.04 was removed 514 days ago)

Free and paid

Free: Actions Expiry: Check This File runs all thirteen checks on the workflow open in the editor, with full messages and full dates and no key. The same engine runs in the browser at https://getreadystack.com/tools/actions-expiry-lint, with nothing uploaded.

Paid ($29 once, one key per person or team seat, 7-day full refund): Actions Expiry: Sweep The Workspace walks every workflow in the repository in one command and writes a dated actions-expiry-report.md you keep and attach to the change ticket. Yardstick: contract DevOps work is commonly quoted at $75-$150 an hour, so one licence is under half an hour of it.

The rule set

All dates live in one file, rules.json, marked with a revision date. Findings are advisory and quote GitHub's published retirement and Node's published release schedule; they are not legal or contractual advice. Rule set revision 2026.09, revised 2026-09-11.

  • Contact us
  • Jobs
  • Privacy
  • Manage cookies
  • Terms of use
  • Trademarks
  • Your Privacy Choices
  • Consumer Health Privacy
© 2026 Microsoft