chore(ci): add concurrency groups and job timeouts to CI workflows #452

Closed
freemo wants to merge 1 commit from chore/ci-concurrency-timeouts into master
Owner

Summary

Adds workflow-level concurrency groups with cancel-in-progress: true and per-job timeout-minutes to the CI and Nightly Quality Forgejo Actions workflows. This prevents superseded CI runs from wasting runner capacity when a new commit is pushed to the same branch, and provides a hard upper bound on job execution time so that hung jobs cannot occupy runner slots indefinitely.

Changes

  • .forgejo/workflows/ci.yml: Added a top-level concurrency block keyed on workflow + ref with cancel-in-progress: true. Added timeout-minutes to all 11 jobs:
    • 10 min: lint, typecheck, security, quality, build
    • 20 min: unit_tests, integration_tests
    • 30 min: coverage, benchmark-regression, benchmark-publish, docker
  • .forgejo/workflows/nightly-quality.yml: Added a top-level concurrency block with cancel-in-progress: true. Added timeout-minutes: 45 to the full-quality-suite job.
  • CHANGELOG.md: Added an entry describing the concurrency and timeout additions.

Motivation

With 20+ open PRs triggering CI simultaneously and no concurrency controls, every push spawned a full set of 11 parallel jobs without cancelling previously queued runs for the same branch. Combined with the absence of job-level timeouts, this led to runner contention and the risk of hung jobs consuming slots indefinitely.

Closes #451

## Summary Adds workflow-level concurrency groups with `cancel-in-progress: true` and per-job `timeout-minutes` to the CI and Nightly Quality Forgejo Actions workflows. This prevents superseded CI runs from wasting runner capacity when a new commit is pushed to the same branch, and provides a hard upper bound on job execution time so that hung jobs cannot occupy runner slots indefinitely. ### Changes - **`.forgejo/workflows/ci.yml`**: Added a top-level `concurrency` block keyed on workflow + ref with `cancel-in-progress: true`. Added `timeout-minutes` to all 11 jobs: - 10 min: `lint`, `typecheck`, `security`, `quality`, `build` - 20 min: `unit_tests`, `integration_tests` - 30 min: `coverage`, `benchmark-regression`, `benchmark-publish`, `docker` - **`.forgejo/workflows/nightly-quality.yml`**: Added a top-level `concurrency` block with `cancel-in-progress: true`. Added `timeout-minutes: 45` to the `full-quality-suite` job. - **`CHANGELOG.md`**: Added an entry describing the concurrency and timeout additions. ### Motivation With 20+ open PRs triggering CI simultaneously and no concurrency controls, every push spawned a full set of 11 parallel jobs without cancelling previously queued runs for the same branch. Combined with the absence of job-level timeouts, this led to runner contention and the risk of hung jobs consuming slots indefinitely. Closes #451
chore(ci): add concurrency groups and job timeouts to CI workflows
Some checks failed
CI / lint (pull_request) Successful in 22s
CI / typecheck (pull_request) Successful in 59s
CI / quality (pull_request) Successful in 30s
CI / security (pull_request) Successful in 48s
CI / benchmark-publish (pull_request) Has been skipped
CI / build (pull_request) Successful in 23s
CI / integration_tests (pull_request) Successful in 5m7s
CI / unit_tests (pull_request) Failing after 20m0s
CI / docker (pull_request) Has been skipped
CI / coverage (pull_request) Failing after 30m0s
CI / benchmark-regression (pull_request) Successful in 23m49s
3be1a129aa
Added workflow-level concurrency groups with cancel-in-progress to both
ci.yml and nightly-quality.yml so that superseded CI runs are automatically
cancelled when a new commit is pushed to the same branch. Added per-job
timeout-minutes to all 11 CI jobs and the nightly quality job to prevent
hung jobs from occupying runner slots indefinitely:

  - 10 min: lint, typecheck, security, quality, build
  - 20 min: unit_tests, integration_tests
  - 30 min: coverage, benchmark-regression, benchmark-publish, docker
  - 45 min: nightly full-quality-suite

These changes reduce runner contention across concurrent PR builds and
provide a hard upper bound on job execution time.

ISSUES CLOSED: #451
freemo added this to the v3.1.0 milestone 2026-02-26 03:49:08 +00:00
freemo self-assigned this 2026-02-26 03:52:21 +00:00
freemo closed this pull request 2026-02-26 19:04:33 +00:00
Some checks failed
CI / lint (pull_request) Successful in 22s
Required
Details
CI / typecheck (pull_request) Successful in 59s
Required
Details
CI / quality (pull_request) Successful in 30s
Required
Details
CI / security (pull_request) Successful in 48s
Required
Details
CI / benchmark-publish (pull_request) Has been skipped
CI / build (pull_request) Successful in 23s
Required
Details
CI / integration_tests (pull_request) Successful in 5m7s
Required
Details
CI / unit_tests (pull_request) Failing after 20m0s
Required
Details
CI / docker (pull_request) Has been skipped
Required
Details
CI / coverage (pull_request) Failing after 30m0s
Required
Details
CI / benchmark-regression (pull_request) Successful in 23m49s

Pull request closed

Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Reference
cleveragents/cleveragents-core!452
No description provided.