Loading
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.
- 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. test-simulationretries up to twice on any failure, includingscript_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: noneon the tag rule and the protected-branch rule inworkflow. Pipelines ondevelop,stagenet,chainnet,mainnet, and tags never get cancelled, so the image builds and pushes always finish.test-simulationkeepsscript_failureinretry: when, butmaxgoes 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/lintwithdry_run: trueonref: developreturnsvalid: true. The only warnings are the existingstuck_or_timeout_failuredeprecations.- The numbers come from
GET /runners/52998913/jobsfor 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.