Skip to content

ci: Add PR validation workflow - #132

Closed
ragnarula wants to merge 6 commits into
mainfrom
feature/pr-validate
Closed

ci: Add PR validation workflow#132
ragnarula wants to merge 6 commits into
mainfrom
feature/pr-validate

Conversation

@ragnarula

@ragnarula ragnarula commented Jul 20, 2026

Copy link
Copy Markdown
Collaborator

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

@ragnarula
ragnarula force-pushed the feature/pr-validate branch from 7c1cc1b to 92f6b2a Compare July 20, 2026 13:08
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
ragnarula force-pushed the feature/pr-validate branch from 92f6b2a to 86c286d Compare July 20, 2026 13:12
ragnarula and others added 5 commits July 24, 2026 07:50
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
ragnarula marked this pull request as ready for review July 29, 2026 17:05
@ragnarula ragnarula added the ready-to-import Approved by Epic staff for import into Lore label Jul 31, 2026
@epic-lore-bot epic-lore-bot Bot removed the ready-to-import Approved by Epic staff for import into Lore label Jul 31, 2026
@epic-lore-bot

epic-lore-bot Bot commented Jul 31, 2026

Copy link
Copy Markdown

Imported as Lore CR-275.

@epic-lore-bot epic-lore-bot Bot added the imported Imported into Lore for internal review label Jul 31, 2026
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
@epic-lore-bot

epic-lore-bot Bot commented Jul 31, 2026

Copy link
Copy Markdown

Closed by mirrored commit 054124c.

@epic-lore-bot epic-lore-bot Bot closed this Jul 31, 2026
@epic-lore-bot epic-lore-bot Bot added the merged Merged into Lore codebase label Jul 31, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

imported Imported into Lore for internal review merged Merged into Lore codebase

Development

Successfully merging this pull request may close these issues.

1 participant