Make a step soft-fail without breaking the job
By default, a failed step fails the job. continue-on-error: true marks a step (or a job, or a matrix cell) as soft — it can fail without taking down the surrounding scope.
Used wisely. Used badly, it hides regressions.
Legitimate uses
- Experimental matrix cells — a Python 3.13-dev cell that doesn't block PRs.
- Linting / advisory checks that you want to surface but not gate on yet.
- Cleanup steps that try-best-effort but shouldn't fail the job if they didn't have anything to clean.
- Coverage uploads to flaky third-party services (Codecov has been famous for this).
Anti-patterns
- Wrapping a flaky test with
continue-on-errorinstead of fixing it. - Using it on a deploy step.
- Using it on a security gate (lint, type-check, scan).