ci: Add PR validation workflow - #132
Closed
ragnarula wants to merge 6 commits into
Closed
Conversation
ragnarula
force-pushed
the
feature/pr-validate
branch
from
July 20, 2026 13:08
7c1cc1b to
92f6b2a
Compare
Fan out the full test suite across every supported platform on public GitHub-hosted runners with no secrets: - unit: `cargo test --workspace` on linux (x86_64 + aarch64), macOS, and Windows. - integration: MinIO/DynamoDB-Local/Consul via Docker Compose, then `cargo test -p lore-integration-tests --features integration_tests` (Linux x86_64 only, as Docker is unavailable on hosted macOS/Windows). - smoke: build `lore` + `loreserver` (with the `failure_generator` feature) and run the `scripts/test` pytest suite via uv, on all four platforms. An aggregate `PR Validate` job gates on all of the above so branch protection can require a single check. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Signed-off-by: Raghav Narula <raghav.narula@epicgames.com>
ragnarula
force-pushed
the
feature/pr-validate
branch
from
July 20, 2026 13:12
92f6b2a to
86c286d
Compare
The full-workspace `cargo test` build embedded full DWARF into every test binary (split-debuginfo=off), so the linker held all of it in memory at once. On the 16 GB hosted ubuntu-24.04-arm runner that exhausted memory and the runner was terminated (SIGTERM, exit 143) mid-compile before any test ran, failing `unit (linux-aarch64)` while every other unit job passed. Packed emits a companion .dwp and keeps peak linker memory down. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Signed-off-by: Raghav Narula <ragnarula87@googlemail.com>
…nlint - Revert the aarch64-linux split-debuginfo=packed experiment back to =off; the release/server artifacts want embedded symbols, so the debug-info change is deferred rather than shipped here. - Comment out the linux-aarch64 unit matrix entry with a TODO. The full-workspace `cargo test` links every test binary with embedded DWARF (split-debuginfo=off), exhausting the 16 GB hosted arm64 runner; it is killed (SIGTERM/143) mid-compile before any test runs. Re-enable after switching that target's debug-info method (packed/unpacked or a line-tables-only test profile). Smoke still covers arm64. - Host the Linux smoke suites' working data on a 12 GB tmpfs (/dev/shm) via --basetemp. The suite writes ~10 GB of disk-I/O-heavy per-test state that pytest never cleans up mid-session; RAM-backing it speeds the I/O-bound tests. Sized above the observed footprint but below the 16 GB runner RAM. Linux only. - Add .github/actionlint.yaml whitelisting the ubuntu-24.04-arm runner label, which actionlint's bundled label list does not yet know, so the pre-commit actionlint hook stops failing. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Signed-off-by: Raghav Narula <ragnarula87@googlemail.com>
Comment out the macOS and Windows unit legs and the linux-aarch64, macOS, and Windows smoke legs so the workflow can be iterated on without paying for (or triaging) the full cross-platform fan-out on every push. Integration was already linux-x86_64 only. Drop the `matrix.extra-args` reference along with the Windows smoke entry that defined it, since actionlint rejects an undefined matrix property. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Signed-off-by: Raghav Narula <raghav.narula@epicgames.com>
`cargo test --workspace` builds a debug test binary per crate with embedded DWARF, which overflowed the hosted runner's small root filesystem — the unit job died with "No space left on device". The Linux runners carry a second, much larger ephemeral volume at /mnt, so point CARGO_TARGET_DIR there in the unit, integration, and smoke jobs. The step runs before rust-cache so the cache acts on the relocated target dir rather than the now-unused ./target, and prints `df -h / /mnt` so the real space budget is visible in the logs. Smoke needs one extra thing: conftest's `release` binary keyword resolves to <cwd>/target/release, which moving the target dir leaves empty. Set LORE_EXECUTABLE_PATH and LORE_SERVER_EXECUTABLE_PATH to the relocated binaries; conftest checks those before falling back to the --lore-*-binary flags. All three steps are guarded to Linux, since the macOS and Windows runners have no /mnt volume and resolve the in-workspace target dir as before. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Signed-off-by: Raghav Narula <raghav.narula@epicgames.com>
Rewrite the comments in active voice and plain English, describe only the current configuration, and drop the ones that restate the line below them. Two comments described state that no longer holds: the aarch64 unit TODO claimed smoke still covered linux-aarch64, which it does not, and the smoke matrix note described the macOS and Windows entries that are commented out. The parsed workflow is unchanged. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Signed-off-by: Raghav Narula <raghav.narula@epicgames.com>
ragnarula
marked this pull request as ready for review
July 29, 2026 17:05
|
Imported as Lore CR-275. |
epic-lore-bot Bot
pushed a commit
that referenced
this pull request
Jul 31, 2026
Adds `.github/workflows/pr-validate.yml`. It runs on pull requests using GitHub-hosted runners and needs no secrets: it checks the source out from git and starts the integration test services from public container images. ## Jobs | Job | Runs | |-----|------| | `unit` | `cargo test --workspace` | | `integration` | MinIO, DynamoDB Local, and Consul from `lore-integration-tests/compose.yaml`, then `cargo test -p lore-integration-tests --features integration_tests` | | `smoke` | builds `lore` and `loreserver`, then `uv run pytest scripts/test -m smoke -n 4` | | `PR Validate` | reports one result for the three jobs above, for branch protection to require | All three jobs currently run on linux-x86_64 only. The macOS and Windows legs are commented out while the workflow is still being changed, and the linux-aarch64 unit leg is commented out because the linker exhausts the arm64 runner's memory. Integration only ever runs on Linux, which is where the runners provide Docker. ## Notes - The Linux jobs build in `/mnt`, because a workspace debug build does not fit on the runner's root filesystem. - The smoke job holds its test data on tmpfs, grown to 12 GB, which speeds up the I/O-bound tests. - The server build enables `failure_generator` so the fault injection tests run instead of skipping. - Third-party actions use release tags rather than commit SHAs. 🤖 Generated with [Claude Code](https://claude.com/claude-code) ``` Imported-PR: #132 Imported-From: ba5ed31 Imported-Base: 669876a Imported-Merge: 4dae814 Imported-Author: Raghav Narula (ragnarula) Signed-off-by: Raghav Narula <raghav.narula@epicgames.com> GH-URL: #132 ``` Lore-RevId: 425 Lore-Signature: fe74116a092d0fad89066b2fb3bdb010ff41702cd313f51e9cf8ec92ea3e471f
|
Closed by mirrored commit 054124c. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Adds
.github/workflows/pr-validate.yml. It runs on pull requests usingGitHub-hosted runners and needs no secrets: it checks the source out from git
and starts the integration test services from public container images.
Jobs
unitcargo test --workspaceintegrationlore-integration-tests/compose.yaml, thencargo test -p lore-integration-tests --features integration_testssmokeloreandloreserver, thenuv run pytest scripts/test -m smoke -n 4PR ValidateAll three jobs currently run on linux-x86_64 only. The macOS and Windows legs
are commented out while the workflow is still being changed, and the
linux-aarch64 unit leg is commented out because the linker exhausts the arm64
runner's memory. Integration only ever runs on Linux, which is where the
runners provide Docker.
Notes
/mnt, because a workspace debug build does not fiton the runner's root filesystem.
the I/O-bound tests.
failure_generatorso the fault injection tests runinstead of skipping.
🤖 Generated with Claude Code