GitHub Actions Deprecations: What Is Breaking and How to Fix It
GitHub deprecates runtimes, commands, and images on a schedule. Stay ahead of the warnings before they become failures.
Deprecations start as warnings and end as broken builds. This tracker lists the recurring ones and the fix for each. Check the GitHub changelog for exact dates.
Recurring deprecations
| Deprecation | Fix |
|---|---|
| Node 16 actions runtime | Upgrade actions to versions running on Node 20 |
save-state / set-output commands | Write to $GITHUB_STATE / $GITHUB_OUTPUT files |
| Older runner images (e.g. ubuntu-20.04) | Move to ubuntu-latest or a pinned current image |
| upload-artifact/download-artifact v3 | Migrate to v4 (note the breaking changes) |
| Deprecated action major versions | Bump uses: to the current major |
How to stay ahead
- Watch for deprecation warnings in your run logs and treat them as work, not noise.
- Use Dependabot to bump action versions automatically.
- Pin to majors (
@v4) so you get fixes without surprise breaks.
Pinning and supply-chain hygiene
A third-party action runs arbitrary code with access to your workflow token. Version tags are mutable, so @v4 can change under you without any commit in your repository.
# mutable: the tag can be repointed at any time
- uses: some/action@v4
# immutable: pin to the commit SHA, with the version in a comment
- uses: some/action@e2b3f4a5c6d7e8f9a0b1c2d3e4f5a6b7c8d9e0f1 # v4.1.2