ci: cancel superseded MR pipelines and cap test-simulation at one retry

Why

The Finland runner spent 535 runner-hours on thornode CI between 2026-09-21 and 2026-09-27. Retries used 165 of those hours. Two settings in .gitlab-ci.yml add load without catching more bugs.

  1. No job sets interruptible. Auto-cancel is enabled on the project, but GitLab only cancels interruptible jobs. When someone pushes to an MR again, the old pipeline keeps running to the end. About 18 runner-hours went to jobs that a newer pipeline on the same MR had already replaced.
  2. test-simulation retries up to twice on any failure, including script_failure. A second attempt rescued 24 runs. A third attempt rescued only 5. 46 chains failed all three attempts because the failure was real, and each attempt takes about 45 minutes.

What changes

  • default: interruptible: true. A new push to an MR now cancels the jobs still running in the old MR pipeline.
  • auto_cancel: on_new_commit: none on the tag rule and the protected-branch rule in workflow. Pipelines on develop, stagenet, chainnet, mainnet, and tags never get cancelled, so the image builds and pushes always finish.
  • test-simulation keeps script_failure in retry: when, but max goes from 2 to 1.

test-regression keeps max: 2. Its failed retry chains cost about 5 hours in the same week, which is not worth losing the 6 runs a third attempt rescued.

How I checked it

  • POST /projects/13422983/ci/lint with dry_run: true on ref: develop returns valid: true. The only warnings are the existing stuck_or_timeout_failure deprecations.
  • The numbers come from GET /runners/52998913/jobs for 2026-09-21 to 2026-09-27, 2,986 jobs.

Not in this MR

  • Limit how many simulations run at the same time, with a dedicated runner entry or a resource_group.
  • govulncheck fails 175 of 176 runs on known vulnerabilities. Fix them or move the job to a nightly schedule.

Merge request reports

Loading
Loading