The default 6-hour job timeout is wrong for almost everything
Without an explicit timeout, jobs can run for up to 6 hours. A hung process — a test waiting on a flaky external service, a docker pull stuck on a registry outage — can quietly burn through your CI budget for half a day.
Set tight timeouts:
timeout-minutes:at the job level — cap the whole job.timeout-minutes:at the step level — cap an individual step.
Sensible defaults
| Job type | Reasonable cap |
|---|---|
| Lint / format | 5 minutes |
| Unit tests | 10–15 minutes |
| Integration / e2e | 30–45 minutes |
| Deploy | 15–30 minutes |
| Release pipeline | 60 minutes |
If your job hits the cap, the run fails. That's the correct behavior — investigate why it took so long.