WIP: ci: run the checks and the builders on CircleCI for pull requests #283

Draft
HumanBean wants to merge 1 commit from HumanBean/Longshot:circleci-project-setup into main
Owner

Why

Pull requests get no run of the game-free checks or the builders today: Forgejo's CI runs only the light checks on a
pull request, and the builders only on main and releases. This runs all of them on CircleCI for each pull request.

What changed

  • ci: .circleci/config.yml, four jobs taken from the Forgejo workflows: checks (every tests/run_all.py check in one
    job, plus the Windows Builder's compile and its --cli delivery check, as ci.yml's part 1), linux-appimage
    (build-linux.yml, in ubuntu:22.04, with the AMD FSR 4 build check and the player's-build check), windows-builder
    (build-windows.yml's package job: setup, publish, zip, the Windows-file checks and Wine) and windows-vulkan (its
    vulkan job). The AppImage, the zip and longshot_vk.dll are kept as the run's artifacts. Caches: the Linux deps,
    tools.lock's tools, llvm-mingw and pip; no object cache yet.
  • ci: .circleci/test-suites.yml, one CircleCI Smarter Testing suite, game-free checks: discover lists the checks,
    run runs the ones it is given. No suite options: test impact analysis, dynamic splitting and auto-rerun are off.
  • tests: tests/run_all.py gains --list (the checks a run would start, one a line, running none; skipped ones left
    out, since a name given runs its check even where its file skips this OS) and --junit FILE (write_junit(): the
    results as JUnit XML, one testcase a check, for CircleCI's test results).

Flags and settings

Flag What it does Default now Recommendation Helps on Doesn't help on Untested on
tests/run_all.py --list Prints the checks a run would start, runs none off Used by .circleci/test-suites.yml CI — —
tests/run_all.py --junit FILE Writes the results as JUnit XML off Used by .circleci/test-suites.yml CI — —

Measurements

main: d9648863 (2026-11-13)
this PR: circleci-project-setup @ 5cbdb17d
Hardware: CircleCI's Docker large executor (no game, no GPU)
Scene: none: CI only
Method: the change's own checks: circleci config validate, run_all.py --strict --list, and write_junit() on stub results. The first CircleCI run is pending.
How to reproduce: circleci config validate .circleci/config.yml; python -I -B tests/run_all.py --strict --list

main @ d9648863 this PR @ 5cbdb17d
circleci config validate no config valid
run_all.py --strict --list (Linux) no option 517 checks listed, none run
CircleCI run of the four jobs — pending: the project's trigger doesn't start one for this pull request yet
Config file at ".circleci/config.yml" is valid.

Testing

Tested: circleci config validate passes. run_all.py --strict --list lists 517 checks on Linux (the Python tests
not skipped on Linux and gpu/vk/tests' four C++ checks), running none. write_junit() on stub checks (a pass, a
failure with an escape code in its output, a skip, the byte-compile) writes well-formed XML.

Not tested: the CircleCI run itself, and so the full run_all.py with --junit and the names given back by the
suite: the project's trigger starts runs on pushes to MagicBeanDev/Longshot only, so this fork's pull request gets none
yet. circleci testsuite doctor was not run: it runs the tests, and they are not run on this PC. Nothing in the game
changes.

Needs other testers:

  • None: the CircleCI run is the test, once the trigger starts one for pull requests.

Screenshots

Nothing on screen

Risk and rollback

Nothing the game or a release uses changes: run_all.py's two options are off unless given. CircleCI runs alongside
Forgejo's CI and decides nothing on its own. Reverting the commit removes it.

Reviewer notes

The jobs follow the Forgejo workflows step by step; apt-get is used where the images lack a tool (clang, spirv-tools,
libdav1d, Wine). Left for a follow-up: the Vulkan back end's object caches (every build compiles it whole), and a
circleci testsuite doctor run in CI.

Issues

None

Checklist

For everyone

  • One topic.
  • The title is a Conventional Commit (type(scope): description).
  • Rebased on current main.
  • python -I -B tests/run_all.py run and passing (any failure that also fails on main is named above). (not run on this PC; CircleCI's checks job runs it, once the trigger starts a run for this pull request)
  • Tested in the game, or what wasn't is named under Testing.
  • Testing filled in: what was tested, what wasn't, and what needs other testers (with test requests).
  • Measured: main and this PR at named commits, on the same PC, scene and settings, at least 2 interleaved runs each, the median reported. (a CI change, measured by its CircleCI run: pending)
  • 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.

If applicable

  • AI assistance recorded with Assisted-by: / Co-Authored-By: trailers.

🤖 Generated with Claude Code

## Why Pull requests get no run of the game-free checks or the builders today: Forgejo's CI runs only the light checks on a pull request, and the builders only on main and releases. This runs all of them on CircleCI for each pull request. ## What changed - ci: `.circleci/config.yml`, four jobs taken from the Forgejo workflows: `checks` (every `tests/run_all.py` check in one job, plus the Windows Builder's compile and its `--cli` delivery check, as `ci.yml`'s part 1), `linux-appimage` (`build-linux.yml`, in `ubuntu:22.04`, with the AMD FSR 4 build check and the player's-build check), `windows-builder` (`build-windows.yml`'s package job: setup, publish, zip, the Windows-file checks and Wine) and `windows-vulkan` (its vulkan job). The AppImage, the zip and `longshot_vk.dll` are kept as the run's artifacts. Caches: the Linux deps, tools.lock's tools, llvm-mingw and pip; no object cache yet. - ci: `.circleci/test-suites.yml`, one CircleCI Smarter Testing suite, `game-free checks`: `discover` lists the checks, `run` runs the ones it is given. No suite options: test impact analysis, dynamic splitting and auto-rerun are off. - tests: `tests/run_all.py` gains `--list` (the checks a run would start, one a line, running none; skipped ones left out, since a name given runs its check even where its file skips this OS) and `--junit FILE` (`write_junit()`: the results as JUnit XML, one testcase a check, for CircleCI's test results). ## Flags and settings | Flag | What it does | Default now | Recommendation | Helps on | Doesn't help on | Untested on | |---|---|---|---|---|---|---| | `tests/run_all.py --list` | Prints the checks a run would start, runs none | off | Used by `.circleci/test-suites.yml` | CI | — | — | | `tests/run_all.py --junit FILE` | Writes the results as JUnit XML | off | Used by `.circleci/test-suites.yml` | CI | — | — | ## Measurements main: d9648863 (2026-11-13) this PR: circleci-project-setup @ 5cbdb17d Hardware: CircleCI's Docker `large` executor (no game, no GPU) Scene: none: CI only Method: the change's own checks: `circleci config validate`, `run_all.py --strict --list`, and `write_junit()` on stub results. The first CircleCI run is pending. How to reproduce: `circleci config validate .circleci/config.yml`; `python -I -B tests/run_all.py --strict --list` | | main @ d9648863 | this PR @ 5cbdb17d | |---|---|---| | `circleci config validate` | no config | valid | | `run_all.py --strict --list` (Linux) | no option | 517 checks listed, none run | | CircleCI run of the four jobs | — | pending: the project's trigger doesn't start one for this pull request yet | ``` Config file at ".circleci/config.yml" is valid. ``` ## Testing **Tested:** `circleci config validate` passes. `run_all.py --strict --list` lists 517 checks on Linux (the Python tests not skipped on Linux and gpu/vk/tests' four C++ checks), running none. `write_junit()` on stub checks (a pass, a failure with an escape code in its output, a skip, the byte-compile) writes well-formed XML. **Not tested:** the CircleCI run itself, and so the full `run_all.py` with `--junit` and the names given back by the suite: the project's trigger starts runs on pushes to MagicBeanDev/Longshot only, so this fork's pull request gets none yet. `circleci testsuite doctor` was not run: it runs the tests, and they are not run on this PC. Nothing in the game changes. **Needs other testers:** - None: the CircleCI run is the test, once the trigger starts one for pull requests. ## Screenshots Nothing on screen ## Risk and rollback Nothing the game or a release uses changes: `run_all.py`'s two options are off unless given. CircleCI runs alongside Forgejo's CI and decides nothing on its own. Reverting the commit removes it. ## Reviewer notes The jobs follow the Forgejo workflows step by step; `apt-get` is used where the images lack a tool (clang, spirv-tools, libdav1d, Wine). Left for a follow-up: the Vulkan back end's object caches (every build compiles it whole), and a `circleci testsuite doctor` run in CI. ## Issues None ## Checklist ### For everyone - [x] One topic. - [x] The title is a Conventional Commit (`type(scope): description`). - [x] Rebased on current `main`. - [ ] `python -I -B tests/run_all.py` run and passing (any failure that also fails on `main` is named above). (not run on this PC; CircleCI's `checks` job runs it, once the trigger starts a run for this pull request) - [x] Tested in the game, or what wasn't is named under Testing. - [x] Testing filled in: what was tested, what wasn't, and what needs other testers (with test requests). - [ ] Measured: main and this PR at named commits, on the same PC, scene and settings, at least 2 interleaved runs each, the median reported. (a CI change, measured by its CircleCI run: pending) - [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. ### If applicable - [x] AI assistance recorded with `Assisted-by:` / `Co-Authored-By:` trailers. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
ci: run the checks and the builders on CircleCI for pull requests
All checks were successful
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
CI / SPIR-V fixtures (global narrow load/store, direct surface atomics, F2I immediate) (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 4s
PR description / Description follows the template (pull_request_target) Successful in 5s
CI / Workflow lint (actionlint) (pull_request) Successful in 7s
Third-party parts / As their notes say (pull_request) Successful in 7s
5cbdb17d21
.circleci/config.yml: tests/run_all.py's game-free checks (through CircleCI's test
suite, .circleci/test-suites.yml), the Linux AppImage, the Windows builder zip and the
Windows Vulkan back end, as the Forgejo workflows build them; no game data is involved.
tests/run_all.py gains --list (the checks a run would start, running none) and
--junit FILE (the results as JUnit XML) for the test suite.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
HumanBean force-pushed circleci-project-setup from 5cbdb17d21
All checks were successful
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
CI / SPIR-V fixtures (global narrow load/store, direct surface atomics, F2I immediate) (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 4s
PR description / Description follows the template (pull_request_target) Successful in 5s
CI / Workflow lint (actionlint) (pull_request) Successful in 7s
Third-party parts / As their notes say (pull_request) Successful in 7s
to 834c588a79
All checks were successful
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
CI / SPIR-V fixtures (global narrow load/store, direct surface atomics, F2I immediate) (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 5s
PR description / Description follows the template (pull_request_target) Successful in 5s
CI / Workflow lint (actionlint) (pull_request) Successful in 7s
Third-party parts / As their notes say (pull_request) Successful in 6s
2026-11-13 19:17:26 +00:00
Compare
HumanBean force-pushed circleci-project-setup from 834c588a79
All checks were successful
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
CI / SPIR-V fixtures (global narrow load/store, direct surface atomics, F2I immediate) (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 5s
PR description / Description follows the template (pull_request_target) Successful in 5s
CI / Workflow lint (actionlint) (pull_request) Successful in 7s
Third-party parts / As their notes say (pull_request) Successful in 6s
to 72033e0c97
All checks were successful
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
CI / SPIR-V fixtures (global narrow load/store, direct surface atomics, F2I immediate) (pull_request) Has been skipped
Third-party parts / The same as upstream (pull_request) Has been skipped
PR description / Description follows the template (pull_request_target) Successful in 4s
CI / Conventional Commit title (pull_request) Successful in 4s
CI / Workflow lint (actionlint) (pull_request) Successful in 6s
Third-party parts / As their notes say (pull_request) Successful in 7s
Website / Website on Cloudflare (pull_request_target) Has been skipped
2026-11-13 19:19:36 +00:00
Compare
All checks were successful
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
CI / SPIR-V fixtures (global narrow load/store, direct surface atomics, F2I immediate) (pull_request) Has been skipped
Third-party parts / The same as upstream (pull_request) Has been skipped
PR description / Description follows the template (pull_request_target) Successful in 4s
CI / Conventional Commit title (pull_request) Successful in 4s
CI / Workflow lint (actionlint) (pull_request) Successful in 6s
Third-party parts / As their notes say (pull_request) Successful in 7s
Website / Website on Cloudflare (pull_request_target) Has been skipped
This pull request is marked as a work in progress.
This branch is out-of-date with the base branch
View command line instructions

Checkout

From your project repository, check out a new branch and test the changes.
git fetch -u 'circleci-project-setup:HumanBean-circleci-project-setup'
git switch 'HumanBean-circleci-project-setup'
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!283
No description provided.