ci: release builds run only on runners labelled release #728

Merged
HumanBean merged 1 commit from HumanBean/Longshot:ci/release-runner into main 2026-11-15 18:15:36 +00:00
Owner

Type: ci · Risk: low · Tested on: Linux (actionlint 1.7.12) · Needs: a release runner online

Why

The release builds (an hour and more, 16 GB each) ask for the same runner labels as every pull request's checks, so they can land on any runner, and a runner meant for releases picks up CI too. This gives the release builds a label of their own, release, so they only run on the runners kept for them and CI never takes those runners.

What changed

The builder jobs ask for release instead of ubuntu-latest/ubuntu-24.04; The version and Sign and publish stay on quick. Nothing else in CI moves.

  • workflows: build-linux.yml (appimage) and build-windows.yml (package, vulkan) run on release. They only run when release.yml calls them or by Run workflow.
  • docs/forgejo-runners.md: a release row in the label table (the builders' Docker and disk needs move to it), and a step for registering a release runner with that label only.
  • .forgejo/actionlint.yaml: release is a known self-hosted label.

The launcher's The launcher, both systems build moves to release in MagicBeanDev/LongshotLauncher#83.

Measurements

Verdict: nothing to measure: a workflow label change; actionlint passes on all workflows.

Flags and settings

None

Testing

Tested: actionlint 1.7.12 (the release CI pins, SHA-256 checked) with .forgejo/actionlint.yaml on .forgejo/workflows/*.yml: no findings. A runner labelled release only is registered and online (charles-linux).

Not tested: a release run on it; the next nightly after merge is the test.

Must be tested:

  • a release runner (charles-linux): let the first nightly after merge run, expecting its Linux and Windows builder jobs to run on that runner and the nightly to publish (by hand: each job's page names its runner)

Risks

What could break: a release, nightlies included, waits in the queue while no release runner is online.

Turning it off: revert the commit, or add release to another runner's labels.

Compatibility: Nothing changes

Checklist

Everyone

  • One topic.
  • The title is a Conventional Commit (type(scope): description) of the status line's type.
  • Why gives the reason plainly and links the issues that fit (the tracker searched).
  • Measurements has a verdict, or one line saying why there is nothing to measure.
  • Testing names what was tested, what wasn't, and what must still be tested, where and how.
  • Rebased on current main.
  • python -I -B tests/run_all.py passes (any failure that also fails on main is named). Left to CI.
  • No game files, dumps, build output or generated files.
  • third_party/ untouched (a new folder with a PROVENANCE.md instead).
  • The license is OK: GPL-3.0-or-later, nothing incompatible and nothing decompiled.

When it applies

  • AI assistance recorded with Assisted-by: / Co-Authored-By: trailers.
  • Docs updated.
**Type:** ci · **Risk:** low · **Tested on:** Linux (actionlint 1.7.12) · **Needs:** a `release` runner online ## Why The release builds (an hour and more, 16 GB each) ask for the same runner labels as every pull request's checks, so they can land on any runner, and a runner meant for releases picks up CI too. This gives the release builds a label of their own, `release`, so they only run on the runners kept for them and CI never takes those runners. ## What changed The builder jobs ask for `release` instead of `ubuntu-latest`/`ubuntu-24.04`; *The version* and *Sign and publish* stay on `quick`. Nothing else in CI moves. - workflows: `build-linux.yml` (`appimage`) and `build-windows.yml` (`package`, `vulkan`) run on `release`. They only run when `release.yml` calls them or by *Run workflow*. - `docs/forgejo-runners.md`: a `release` row in the label table (the builders' Docker and disk needs move to it), and a step for registering a release runner with that label only. - `.forgejo/actionlint.yaml`: `release` is a known self-hosted label. The launcher's *The launcher, both systems* build moves to `release` in [MagicBeanDev/LongshotLauncher#83](https://git.magicbean.dev/MagicBeanDev/LongshotLauncher/pulls/83). ## Measurements **Verdict:** nothing to measure: a workflow label change; actionlint passes on all workflows. ### Flags and settings None ## Testing **Tested:** actionlint 1.7.12 (the release CI pins, SHA-256 checked) with `.forgejo/actionlint.yaml` on `.forgejo/workflows/*.yml`: no findings. A runner labelled `release` only is registered and online (charles-linux). **Not tested:** a release run on it; the next nightly after merge is the test. **Must be tested:** - a `release` runner (charles-linux): let the first nightly after merge run, expecting its Linux and Windows builder jobs to run on that runner and the nightly to publish (by hand: each job's page names its runner) ## Risks **What could break:** a release, nightlies included, waits in the queue while no `release` runner is online. **Turning it off:** revert the commit, or add `release` to another runner's labels. **Compatibility:** Nothing changes ## Checklist ### Everyone - [x] One topic. - [x] The title is a Conventional Commit (`type(scope): description`) of the status line's type. - [x] Why gives the reason plainly and links the issues that fit (the tracker searched). - [x] Measurements has a verdict, or one line saying why there is nothing to measure. - [x] Testing names what was tested, what wasn't, and what must still be tested, where and how. - [x] Rebased on current `main`. - [ ] `python -I -B tests/run_all.py` passes (any failure that also fails on `main` is named). Left to CI. - [x] No game files, dumps, build output or generated files. - [x] `third_party/` untouched (a new folder with a `PROVENANCE.md` instead). - [x] The license is OK: GPL-3.0-or-later, nothing incompatible and nothing decompiled. ### When it applies - [x] AI assistance recorded with `Assisted-by:` / `Co-Authored-By:` trailers. - [x] Docs updated.
ci: release builds run only on runners labelled release
Some checks failed
CI / SPIR-V fixtures (global narrow load/store, direct surface atomics, F2I immediate) (pull_request) Has been skipped
CI / Python source checks (ubuntu-24.04, part 1/2) (pull_request) Has been skipped
CI / Python source checks (ubuntu-24.04, part 2/2) (pull_request) Has been skipped
Third-party parts / The same as upstream (pull_request) Has been skipped
CI / Conventional Commit title (pull_request) Successful in 3s
CI / Workflow lint (actionlint) (pull_request) Successful in 7s
Guide screenshots / Guide images and local UI source review (pull_request) Failing after 5s
Third-party parts / As their notes say (pull_request) Successful in 8s
Website / Website on Cloudflare (pull_request_target) Has been skipped
PR description / Description follows the template (pull_request_target) Failing after 4s
e9fadf3ba0
Co-Authored-By: Claude Opus 5.5 <[email protected]>
HumanBean changed title from WIP: ci: release builds run only on runners labelled release to ci: release builds run only on runners labelled release 2026-11-15 18:15:01 +00:00
HumanBean deleted branch ci/release-runner 2026-11-15 18:15:36 +00:00
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.

Dependencies

No dependencies set

Reference
MagicBeanDev/Longshot!728
No description provided.