diff --git a/.gitea/workflows/gitea-build.yaml b/.gitea/workflows/gitea-build.yaml index 1812398..5639d70 100644 --- a/.gitea/workflows/gitea-build.yaml +++ b/.gitea/workflows/gitea-build.yaml @@ -33,8 +33,15 @@ jobs: - name: Build run: just release - # Cross-compiles for Windows so link breakages show up before a release + # Cross-compiles for Windows so link breakages show up before a release. + # Runs after `build`: both jobs land on the same self-hosted runner, and the + # first run segfaulted `odin test` in `build` while `windows` was doing its + # (uncached) SDK download/splat at the same time - resource contention, not + # a code or toolchain bug (odin check passed; the test suite reproduces fine + # in isolation). Sequencing avoids that contention at the cost of a longer + # total run. windows: + needs: build runs-on: ubuntu-latest steps: - name: Checkout Repository diff --git a/AGENTS.md b/AGENTS.md index b8f6db3..d4ab144 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -38,6 +38,7 @@ Commands (see `justfile`): `just run`, `just check`, `just test`, `just package 6. **Windows builds are cross-compiled**: Odin can't link Windows binaries on Linux, so `just windows` builds objects with `-build-mode:obj` and links with `lld-link` against an xwin SDK. The VC runtime is linked statically; only Windows system DLLs are needed. New Odin core usage can need new import libs (e.g. `ole32.lib` for `os.user_data_dir`); the CI `windows` job catches this. Not yet tested on a real Windows machine. 7. **Odin constant arrays can't be indexed at runtime**: lookup tables (`DECKS`, `LAYOUTS`, …) are `@(rodata)` globals instead of `::` constants. 8. **Profile memory**: `profile` always allocates from the heap allocator, because the test runner frees each test's allocator afterwards. +9. **CI jobs share one self-hosted runner**: `build` and `windows` in `gitea-build.yaml` land on the same machine. Running them concurrently once segfaulted `odin test` while `windows` was mid-SDK-download, so `windows` now runs with `needs: build` to avoid the contention. ## File Structure ```