GitHub Actions Deprecation Preflight
Read-only scanner for GitHub Actions workflow files, local JavaScript action metadata, and Markdown workflow snippets. It is meant to catch CI migration risks before they become broken builds or surprise release blockers.
Use it when a repository is preparing for GitHub Actions action-major upgrades, Node runtime changes, artifact/cache migrations, or runner-image cleanup.
What this catches
Current v1 rules flag or review:
- retired/deprecated artifact actions:
actions/upload-artifact@v3,actions/download-artifact@v3; - older action majors that often need migration review:
actions/cache@v3,actions/checkout@v3,actions/setup-node@v3; - local JavaScript actions using old runtimes such as
runs.using: node16; - local JavaScript actions using
node20as a low-severity future runtime review signal; - workflow snippets inside Markdown docs, not only
.github/workflows/*.yml.
It is intentionally narrow: this is a preflight checklist/scanner, not an automatic migration tool.
60-second quick start
python3 -m pip install github-actions-deprecation-preflight
gha-deprecation-preflight . --format markdown --output gha-deprecation-report.md
gha-deprecation-preflight . --format json --output gha-deprecation-report.json
gha-deprecation-preflight . --fail-on-severity high
Short alias:
gha-deprecation-preflight path/to/repo --min-severity high
PyPI: https://pypi.org/project/github-actions-deprecation-preflight/
Example: failing workflow → finding → fix
Risky workflow snippet:
jobs:
build:
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v3
- uses: actions/cache@v3
with:
path: ~/.npm
key: npm-${{ runner.os }}-${{ hashFiles('package-lock.json') }}
- run: npm ci && npm test
- uses: actions/upload-artifact@v3
with:
name: test-output
path: test-results/
Scanner finding excerpt:
- high `upload-artifact-v3`
- Signal: `- uses: actions/upload-artifact@v3`
- Why: upload-artifact v3 is retired/deprecated; workflows should move to the current major.
- Fix: Upgrade to actions/upload-artifact@v4 and review changed artifact behavior, overwrite/merge assumptions, and retention settings.
Safer migration direction:
- uses: actions/cache@v4
with:
path: ~/.npm
key: npm-${{ runner.os }}-${{ hashFiles('package-lock.json') }}
- uses: actions/upload-artifact@v4
with:
name: test-output
path: test-results/
if-no-files-found: warn
Review current example fixtures and generated reports:
examples/node-runtime-risk/examples/ubuntu-runner-risk/examples/artifact-cache-risk/examples/sample-report.mdexamples/sample-report.json
CI usage
See docs/CI_USAGE.md for report-only, high-risk gate, and scoped rollout examples.
Minimal report-only GitHub Actions step:
- name: GitHub Actions deprecation preflight
run: |
python -m pip install github-actions-deprecation-preflight
gha-deprecation-preflight . --format markdown --output gha-deprecation-report.md
Try from a clone
python3 scanner.py examples
python3 scanner.py examples --format json
python3 scanner.py examples --output report.md
python3 scanner.py examples --fail-on-severity high
python3 scanner.py examples --min-severity high
python3 scanner.py examples --only-rule upload-artifact-v3
python3 scanner.py --list-rules
python3 scanner.py --list-rules --format json
python3 scanner.py examples --ignore-rule local-action-node20-review
Example output:
# GitHub Actions Deprecation Preflight
Scanned files: 6
Active rules: 7
Findings: 13
Intended workflow
- Run the scanner at a repository root.
- Review high-severity findings first, especially retired artifact actions and old local JavaScript runtimes.
- Use
--min-severity highfor a high-risk-only report,--only-rulewhile validating one migration family, or--ignore-rulefor a documented false-positive/noise window. - Upgrade action majors on a branch.
- Verify workflow behavior before merging.
Safe by default
- Read-only local scan.
- No GitHub API calls.
- No GitHub token required.
- No workflow upload or telemetry.
- No automatic migrations or commits.
- CI failure is opt-in via
--fail-on-severity. - Rule filtering is explicit and local; unknown rule ids fail fast instead of silently changing coverage.
--list-rulescan be used to review active rule coverage before adding the scanner to CI.
Related Engineering Risk Preflight tools
- Repository Hygiene / CI Risk Preflight — broader repo/package/release-readiness checks.
- Zod OpenAPI Contract Lint Kit — API contract drift checks for Zod/OpenAPI projects.
- Playwright Flake Triage Toolkit — local triage for flaky Playwright reports and CI logs.
For AI agents and automation
Use JSON mode as the stable machine interface:
gha-deprecation-preflight . --format json --output gha-deprecation-report.json --quiet --no-color
Machine contract: schemas/report.schema.json (schema_version: 1.0). Findings include rule id, severity, file/line, matched signal, fix guidance, and stable fingerprints for reruns. GitHub annotation output is available with --format annotations.
Exit codes: 0 completed/report-only, 1 configured severity gate matched, 2 usage/config/rule-id error, 3 reserved for runtime/tool errors.
Agent workflow docs: docs/AGENT_INTEGRATION.md.
Roadmap
- Expand the rule inventory as GitHub Actions deprecations change.
- Add more fixtures for common workflow patterns.
- Expand CI adoption examples and release notes.
- Keep the default mode deterministic, local, and read-only.
Metadata
Release files for github-actions-deprecation-preflight 0.1.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| github_actions_deprecation_preflight-0.1.2.tar.gz | 12.0 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| github_actions_deprecation_preflight-0.1.2-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 21.9 kB
Release files / github_actions_deprecation_preflight-0.1.2.tar.gz
| Download URL | github_actions_deprecation_preflight-0.1.2.tar.gz |
|---|---|
| Size | 12.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
4a0d9118cb895c205d03f81c66f4ab005a431a644e323ac3c796b7f3f12e013e
|
|
BLAKE2b-256 checksum How to use checksums |
168c1a6633115506994ece381158ac3b98afab63cd4c7f009c2eac45194655e6
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on May 20, 2026.
Transparency logRelease files / github_actions_deprecation_preflight-0.1.2-py3-none-any.whl
| Download URL | github_actions_deprecation_preflight-0.1.2-py3-none-any.whl |
|---|---|
| Size | 9.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
4ed01ec0796f5873c225ff1e5d1950a466b336e7273b2f95da68d59cdb70b657
|
|
BLAKE2b-256 checksum How to use checksums |
4fc3621f25b81fa16e3b4b6381d5c6016ff67515e7331fe853c6f8020b390ae4
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on May 20, 2026.
Transparency log