Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
103 commits
Select commit Hold shift + click to select a range
332bc6e
lite implementation of validation infra with placeholders for image n…
theelliotm Jul 31, 2026
03fc97e
aliging with similar projects over naming of prerelease
theelliotm Jul 31, 2026
cc38e54
changing what's enabled for testing
theelliotm Jul 31, 2026
a8040c1
test run with one windows and one linux runner
theelliotm Aug 1, 2026
04a6cf8
removed tests from build workflows
theelliotm Aug 1, 2026
1b88616
lite implementation of validation infra with placeholders for image n…
theelliotm Jul 31, 2026
94cf6d7
aliging with similar projects over naming of prerelease
theelliotm Jul 31, 2026
01996fe
changing what's enabled for testing
theelliotm Jul 31, 2026
5de032e
test run with one windows and one linux runner
theelliotm Aug 1, 2026
39c63f8
removed tests from build workflows
theelliotm Aug 1, 2026
723caa2
Merge branch 'user/emichlin/validation-infra-lite' of https://github.…
theelliotm Aug 3, 2026
c8db517
Fix naming + re-running failed action
theelliotm Aug 3, 2026
d951ef9
ci: add throwaway 1ES connectivity smoke workflow
huzaifa-msft Aug 3, 2026
81fc367
ci: restructure 1ES smoke to push-trigger, drop ImageOverride
huzaifa-msft Aug 3, 2026
c4fbae4
ci: add unique JobId label to 1ES runs-on
huzaifa-msft Aug 3, 2026
c52e17d
migrating APIs
theelliotm Aug 3, 2026
11c7cd7
ci: use scale-set targeting (pool name only) for 1ES pool
huzaifa-msft Aug 3, 2026
157df5f
ci: revert to webhook multi-label format after removing UseScaleSet
huzaifa-msft Aug 3, 2026
b004f5e
changing format of runs-on to match similar projects
theelliotm Aug 3, 2026
2750006
ci: retrigger 1ES smoke after pool re-save (webhook mode)
huzaifa-msft Aug 3, 2026
afd00da
ci: target fresh webhook-mode pool ...-wh (clean experiment)
huzaifa-msft Aug 3, 2026
7d99dc7
ci: target repo-level pool 1es-mxc-test-2 (bypasses org group gate)
huzaifa-msft Aug 4, 2026
e7e0822
ci: fix shell to powershell (client image has no pwsh); repo-level po…
huzaifa-msft Aug 4, 2026
af27bed
updated powershell to use 5.1
theelliotm Aug 4, 2026
1903465
adding bubblewrap install for linux test prereq. for windows, reverti…
theelliotm Aug 4, 2026
0954172
triggering linux test scripts via bash
theelliotm Aug 4, 2026
2c05316
bubblewrap test now owns files it delegates
theelliotm Aug 4, 2026
d932a42
diagnosing interactive desktop issues
theelliotm Aug 4, 2026
6af23d8
diagnostics should continue on error
theelliotm Aug 4, 2026
8a22379
Removing diagnostics - intended behavior.
theelliotm Aug 4, 2026
ba25dba
Testing MacOS runners with sample e2e test script
theelliotm Aug 4, 2026
7fc8290
fix bugs in e2e test for macos
theelliotm Aug 5, 2026
8d3dfb5
better naming conventions
theelliotm Aug 5, 2026
6be9109
Merge branch 'main' into user/emichlin/validation-infra-lite
theelliotm Aug 5, 2026
5ec57a3
fixed naming since github truncates things
theelliotm Aug 5, 2026
03f26ff
test(wslc): add WSLC e2e suite, guards, and 1ES workflow
huzaifa-msft Aug 5, 2026
f3ecca1
Clearer file naming and debloated matrix generator script. Disabled n…
theelliotm Aug 6, 2026
fc95d8f
Added new pools for rest of x64 OS versions.
theelliotm Aug 6, 2026
894a095
Merge remote-tracking branch 'origin/main' into user/emichlin/validat…
theelliotm Aug 6, 2026
05e2cb8
bug fix
theelliotm Aug 6, 2026
d2320d5
Testing additional OS versions
theelliotm Aug 6, 2026
840d361
ci(wslc): target new 1es-mxc-e2e-windows-25h2-wsl2 pool (WSL2 baked i…
huzaifa-msft Aug 6, 2026
ba633ed
ci(wslc): make workflow bash-free for the bare 1ES client image
huzaifa-msft Aug 6, 2026
cf66010
ci(wslc): probe WSL2 feature state before build (image verification)
huzaifa-msft Aug 6, 2026
cbf4264
added additional package manager support for linux prereq installs
theelliotm Aug 6, 2026
0038997
fixing debain package manager issue
theelliotm Aug 6, 2026
bc0e731
Merge remote-tracking branch 'origin/main' into user/emichlin/validat…
theelliotm Aug 6, 2026
8dd44ac
ci(wslc): enable WSL2 on stateful pool VM (enable + reboot if needed)
huzaifa-msft Aug 6, 2026
7cbb52f
ci(wslc): make WSL2 probe non-fatal so prep step runs
huzaifa-msft Aug 6, 2026
28ee1d2
ci(wslc): fix prep step PowerShell parse error (plain ASCII, simpler …
huzaifa-msft Aug 6, 2026
ceef61f
force github to run action after downtime
theelliotm Aug 7, 2026
d40bf3d
added support for more microvm, lxc. and hyperlight. they should fail…
theelliotm Aug 7, 2026
428ac49
testing microvm on 23H2 with additional optional features. also corre…
theelliotm Aug 8, 2026
4ca3db1
Testing process-t1 on unsuitable host. And network test for debian.
theelliotm Aug 8, 2026
7aa0d46
Added additional opt. features to Windows for WSLC and microvm support.
theelliotm Aug 8, 2026
cb51bdd
fix microvm install for windows
theelliotm Aug 8, 2026
c3fcc0a
added a ton of diagnosis and redundancy to microvm tests to determine…
theelliotm Aug 9, 2026
daed2e6
experimenting with cold start for nanvix
theelliotm Aug 9, 2026
957f953
additional nanvix debugging. last effort
theelliotm Aug 9, 2026
e758336
WHP probe
theelliotm Aug 9, 2026
aae46a2
last ditch effort to see why nanvix is failing
theelliotm Aug 10, 2026
b6973d9
Merge remote-tracking branch 'origin/user/modanish/1es-github-runner-…
theelliotm Aug 10, 2026
223fd43
adding limited WSLC support, changing how windows hosts are setup
theelliotm Aug 10, 2026
c30e47b
cold start for microvm on windows, and adding wslc test suite
theelliotm Aug 10, 2026
c8bdb8a
fix incorrect pwsh ver call
theelliotm Aug 10, 2026
de534cf
removed wslc cargo tests
theelliotm Aug 10, 2026
af7134b
installing wsl
theelliotm Aug 10, 2026
5430ce5
disabling support for microvm, for now
theelliotm Aug 10, 2026
3686d6b
prerelease windows tests
theelliotm Aug 10, 2026
57b2f42
added wsl install, modified isolation session test script
theelliotm Aug 11, 2026
23ed9e6
prev. commit, continued
theelliotm Aug 11, 2026
e1c05eb
Merge remote-tracking branch 'origin/main' into user/emichlin/validat…
theelliotm Aug 11, 2026
c3930fa
Adjusting WSLC install
theelliotm Aug 11, 2026
68a96e1
made changes to images for wslc and isolation session
theelliotm Aug 11, 2026
bb27b47
force new test
theelliotm Aug 11, 2026
ccd5bbd
force again
theelliotm Aug 11, 2026
9c95106
force attempt 3
theelliotm Aug 11, 2026
3d002a1
pausing isolation session before getting feedback, and last effort to…
theelliotm Aug 11, 2026
fdbf531
correcting order of wsl commands
theelliotm Aug 11, 2026
49ba4e4
trying with wsl.exe
theelliotm Aug 11, 2026
a8ab3c1
reverted some WSL changes.
theelliotm Aug 11, 2026
6d71a80
quick redattempt with a few options to install WSL
theelliotm Aug 11, 2026
2f708e8
testing pre-release build for WSLC
theelliotm Aug 11, 2026
2d8f16e
getting ready for PR by double-checking lxc and bubblewrap
theelliotm Aug 11, 2026
8de15cb
Removing PR trigger
theelliotm Aug 11, 2026
adec4f1
Removed temp macOS testing suite
theelliotm Aug 11, 2026
990357c
Cleanup unnecessary changes + address feedback
theelliotm Aug 11, 2026
56c4b45
Merge remote-tracking branch 'origin/main' into user/emichlin/validat…
theelliotm Aug 11, 2026
7f0629b
update copilot documentation + fix microvm still causing issues
theelliotm Aug 11, 2026
f6f5936
adding cargo e2e tests back, for now
theelliotm Aug 11, 2026
e9229de
Running full nightly matrix
theelliotm Aug 11, 2026
8a37be4
Fixing action SHAs
theelliotm Aug 11, 2026
3cd8a62
Added additional documentation
theelliotm Aug 12, 2026
f18c791
Addressed PR feedback, removed handler-backend distinction
theelliotm Aug 14, 2026
f5c161b
Don't greenlight prereq skips
theelliotm Aug 14, 2026
8752bed
moved wxc-ui-probe and wxc-test-driver to optional binaries. removed …
theelliotm Aug 14, 2026
63193e0
Merge branch 'user/emichlin/validation-infra-lite' of https://github.…
theelliotm Aug 14, 2026
d53b85b
moved wxc-ui probe and wxc-test-driver to optional binaries. removed …
theelliotm Aug 14, 2026
7af3059
testing with baked-in EPEL
theelliotm Aug 17, 2026
f7445c6
re-enabling EPEL download
theelliotm Aug 17, 2026
1376cb9
Merge branch 'main' into user/emichlin/validation-infra-lite
theelliotm Aug 17, 2026
3e9b9a6
Addressing final feedback
theelliotm Aug 17, 2026
8235c91
Merge branch 'user/emichlin/validation-infra-lite' of https://github.…
theelliotm Aug 17, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
67 changes: 67 additions & 0 deletions .github/copilot-instructions.md
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,60 @@ build.bat --with-microvm # Include NanVix micro-VM binaries

Requires Xcode Command Line Tools and Rust. Produces an unsigned `mxc-exec-mac` binary (codesigning + notarization happen at release time). Schema `0.7.0-alpha` or later required for macOS/Seatbelt backend.

### GitHub Actions

`.github/workflows/Build.yml` is the PR/CI entry point. It fans out to the
workflow-call-only `Build.Windows.Job.yml`, `Build.Linux.Job.yml`, and
`Build.MacOS.Job.yml`, which build and upload the per-target artifacts in
parallel, then to the lint / versioning / SDK jobs.

**Validation (E2E) test infrastructure.** Fully documented in
[`docs/ci-validation-infrastructure.md`](../docs/ci-validation-infrastructure.md)
(matrix contents, job names, per-backend coverage and status, and the runbook
for adding/removing an OS, backend, or plan). Backend E2E tests run from those
same build artifacts β€” never from a fresh build β€” so artifact production and
consumption stay in one workflow run:

- `.github/workflows/Validation.Tests.Scheduled.yml` β€” scheduled entry point.
The `nightly` plan runs Mon–Sat; Sunday runs `nightly` *and* `weekly`.
`workflow_dispatch` takes a `plan` input to run one on demand.
- `.github/workflows/Validation.Tests.Matrix.Job.yml` β€” workflow-call-only,
takes a `plan` input. Its `resolve` job expands the plan into per-family
matrices, then the `windows` / `linux` / `macos` jobs each download the
artifact, prepare the host, and run the backend suite.

An entry point must build the artifacts (call the three `Build.*.Job.yml`
workflows) before calling the matrix job.

**The matrix is declarative:**

- `scripts/ci/validation-test-matrix.json` is the catalog: `platforms` (each
with per-architecture target/artifact/1ES pool and the backends that platform
supports) and `triggers` (which OS/backend pairs each plan runs). The
`triggers` keys *are* the plan list β€” the resolver reads them at run time, so
adding a plan needs no script change.
- `scripts/ci/resolve-validation-test-matrix.mjs` validates that catalog and
expands a plan (currently `pr`, `nightly`, `weekly`, `enabled`) into GitHub
Actions matrices. It rejects an invalid catalog before any specialized test
runner is allocated, so add a backend to a trigger only where the platform
declares it.
- A non-macOS platform architecture with an empty `pool` is never scheduled,
which is how a catalog entry stays declared but dormant. macOS entries use a
GitHub-hosted `runner` instead of a 1ES `pool`.

**Host preparation** happens in the matrix job before the tests, keyed by the
matrix `backend` id: `scripts/ci/prepare-windows-host.ps1` and
`scripts/ci/prepare-linux-host.sh`. A backend with no prerequisites is an
explicit no-op, so the step runs unconditionally for every entry.

**Test dispatch** goes through `tests/scripts/run_ci_backend_tests.ps1`
(Windows) and `tests/scripts/run_ci_backend_tests.sh` (Linux/macOS), which map
the matrix `backend` id to the repository's existing backend suite. Ids that
share a suite get their own case (`process-t1` and `process-t3` both run
`WinProcessContainer-Tests.ps1`, which derives the tier it expects from the
host's own `--probe`). A backend with no wired suite fails loudly rather than
reporting a false success.

### Individual components

```
Expand Down Expand Up @@ -98,6 +152,18 @@ tests\scripts\run_bwrap_all_tests.sh # All Bubblewrap tests (Linux, req
# E2E test crate β€” Rust executor integration tests (from src/)
cargo test -p wxc_e2e_tests # Invokes MXC binaries directly
cargo test -p wxc_e2e_tests -- --ignored # Include stress tests (run_on_repeat)

# WSLC has no cargo E2E suite β€” it is covered by tests\scripts\run_wslc_all_tests.ps1,
# which the validation matrix runs via tests\scripts\run_ci_backend_tests.ps1.

# CI validation entry points β€” run a backend suite against a downloaded artifact
# the way the validation matrix does. Take the matrix backend id exactly as it
# appears in scripts/ci/validation-test-matrix.json.
tests\scripts\run_ci_backend_tests.ps1 -Backend process-t1 -BinaryDirectory <dir> -Architecture x64
tests\scripts\run_ci_backend_tests.sh <bubblewrap|lxc|seatbelt> <binary-directory>

# Resolve a plan locally to see exactly what CI would schedule
node scripts/ci/resolve-validation-test-matrix.mjs --plan nightly
```

## Architecture
Expand Down Expand Up @@ -154,6 +220,7 @@ Core references:
- `docs/authoring-a-new-feature.md` β€” step-by-step guide for adding experimental features (which files to touch, in what order)
- `docs/examples.md` β€” annotated configuration examples (see also `tests/examples/` and `tests/configs/`)
- `docs/diagnostics.md` β€” diagnostic logging knobs (env vars, log file format)
- `docs/ci-validation-infrastructure.md` β€” validation (E2E) test matrix: workflows and job names, catalog format, per-backend coverage and status, and the runbook for adding/removing an OS, backend, or plan
- `docs/host-prep.md` β€” `wxc-host-prep.exe` host setup binary (`prepare-system-drive` / `unprepare-system-drive` for the AppContainer ACEs on the system-drive root, plus `prepare-null-device` / `verify-null-device` / `dump-null-device` for the `\Device\Null` security descriptor that AppContainer-based backends require). Owns elevation via embedded `requireAdministrator` manifest β€” `wxc-exec.exe` no longer self-elevates.
- `docs/sandbox-policy/0.7.0/policy.md` β€” sandbox policy 0.7.0 specification

Expand Down
26 changes: 21 additions & 5 deletions .github/workflows/Build.Linux.Job.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,11 @@ jobs:
- arch: x64
runner: ubuntu-latest
target: x86_64-unknown-linux-gnu
features: hyperlight
Comment thread
theelliotm marked this conversation as resolved.
- arch: arm64
runner: ubuntu-24.04-arm
target: aarch64-unknown-linux-gnu
features: ''
runs-on: ${{ matrix.runner }}
defaults:
run:
Expand Down Expand Up @@ -54,12 +56,26 @@ jobs:
run: sudo apt-get update && sudo apt-get install -y --no-install-recommends gcc-aarch64-linux-gnu

- name: Build lxc
run: cargo build --locked --release --target ${{ matrix.target }}
--no-default-features --features hyperlight
shell: bash
run: |
set -euo pipefail
features=()
if [[ -n "${{ matrix.features }}" ]]; then
features=(--features "${{ matrix.features }}")
fi
cargo build --locked --release --target "${{ matrix.target }}" \
--no-default-features "${features[@]}"

- name: Test lxc
run: cargo test --locked --release --target ${{ matrix.target }}
--no-default-features --features hyperlight
shell: bash
run: |
set -euo pipefail
features=()
if [[ -n "${{ matrix.features }}" ]]; then
features=(--features "${{ matrix.features }}")
fi
cargo test --locked --release --target "${{ matrix.target }}" \
--no-default-features "${features[@]}"

# Bubblewrap is required to run the executor characterization tests in
# wxc_e2e_tests (they skip via has_bwrap() when it is absent). lxc-exec
Expand All @@ -81,7 +97,7 @@ jobs:
working-directory: src
run: cargo test --locked --release --target ${{ matrix.target }}
-p wxc_e2e_tests

# PLM (Permissive Learning Mode) is functionally Windows-only, but the
# crate builds cross-platform: the lib's helper modules compile on every
# target, and the binary has a no-op stub `fn main()` for non-Windows so
Expand Down
15 changes: 13 additions & 2 deletions .github/workflows/Build.MacOS.Job.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,7 @@ on:
jobs:
build:
name: arm64
# macos-14 / macos-latest are Apple Silicon (arm64); older labels are Intel.
runs-on: macos-14
runs-on: macos-15
defaults:
run:
working-directory: src
Expand Down Expand Up @@ -55,6 +54,18 @@ jobs:
run: cargo test --locked --release --target aarch64-apple-darwin
-p mxc_darwin -p seatbelt_common -p wxc_common -p wxc_e2e_tests

- name: Verify artifact payload
shell: bash
run: |
set -euo pipefail
bin_dir="target/aarch64-apple-darwin/release"
for file in mxc-exec-mac unix-test-proxy; do
if [[ ! -f "$bin_dir/$file" ]]; then
echo "Missing artifact file: $file" >&2
exit 1
fi
done

- name: Upload binaries
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
with:
Expand Down
8 changes: 5 additions & 3 deletions .github/workflows/Build.Windows.Job.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,8 @@ jobs:
- arch: arm64
runner: windows-11-arm
target: aarch64-pc-windows-msvc
# nanvixd.exe is x64-only, so microvm tests can't run on arm64.
features: hyperlight isolation_session wslc
# Hyperlight and MicroVM runtimes are x64-only.
features: isolation_session wslc
runs-on: ${{ matrix.runner }}
defaults:
run:
Expand Down Expand Up @@ -86,5 +86,7 @@ jobs:
src/target/${{ matrix.target }}/release/wxc-test-proxy.exe
src/target/${{ matrix.target }}/release/mxc-diagnostic-console.exe
src/target/${{ matrix.target }}/release/wslcsdk.dll
if-no-files-found: warn
src/target/${{ matrix.target }}/release/wxc-ui-probe.exe
src/target/${{ matrix.target }}/release/wxc-test-driver.exe
Comment on lines +89 to +90
if-no-files-found: error
retention-days: 1
1 change: 1 addition & 0 deletions .github/workflows/Build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ concurrency:
cancel-in-progress: true

permissions:
actions: read
contents: read

jobs:
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/Lint.Job.yml
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ jobs:
clippy-args: --locked --all-targets --all-features --release
- os_label: macos
component: MAC
runner: macos-14
runner: macos-26
target: aarch64-apple-darwin
working-directory: src
# Workspace has Windows-only crates, so --all-features won't build on macOS.
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/SDK.Integration.Test.Job.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ jobs:
- os_label: linux
runner: ubuntu-latest
- os_label: macos
runner: macos-14
runner: macos-26
runs-on: ${{ matrix.runner }}
defaults:
run:
Expand Down
173 changes: 173 additions & 0 deletions .github/workflows/Validation.Tests.Matrix.Job.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,173 @@
name: Create Validation Test Matrix

on:
workflow_call:
inputs:
plan:
description: Test plan to resolve.
required: true
type: string

permissions:
actions: read
contents: read

jobs:
resolve:
name: resolve "${{ inputs.plan }}" test matrix
runs-on: ubuntu-latest
outputs:
windows: ${{ steps.matrix.outputs.windows }}
linux: ${{ steps.matrix.outputs.linux }}
macos: ${{ steps.matrix.outputs.macos }}
has_windows: ${{ steps.matrix.outputs.has_windows }}
has_linux: ${{ steps.matrix.outputs.has_linux }}
has_macos: ${{ steps.matrix.outputs.has_macos }}
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1

- name: Resolve test combinations
id: matrix
run: node scripts/ci/resolve-validation-test-matrix.mjs --plan "${{ inputs.plan }}"

windows:
name: ${{ matrix.os }}, ${{ matrix.architecture }}, ${{ matrix.backend }}
needs: resolve
if: needs.resolve.outputs.has_windows == 'true'
strategy:
fail-fast: false
matrix: ${{ fromJSON(needs.resolve.outputs.windows) }}
runs-on: [ self-hosted, "1ES.Pool=${{ matrix.pool }}", "JobId=mxc-e2e-${{ github.run_id }}-${{ github.run_number }}-${{ github.run_attempt }}" ]
timeout-minutes: 60
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1

- name: Download ${{ matrix.target }} artifact
uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c
with:
name: ${{ matrix.artifact }}
path: artifacts/bin

- name: Prepare backend prerequisites
timeout-minutes: 15
shell: pwsh
run: |
Comment thread
bbonaby marked this conversation as resolved.
& ./scripts/ci/prepare-windows-host.ps1 `
-Backend '${{ matrix.backend }}' `
-BinaryDirectory (Join-Path $env:GITHUB_WORKSPACE 'artifacts\bin') *>&1 |
Tee-Object -FilePath (Join-Path $env:RUNNER_TEMP 'mxc-ci.log') -Append
if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE }

- name: Run backend tests
# A backend that hangs (rather than failing) would otherwise burn the
# full job timeout. Fail fast enough to keep the log useful.
timeout-minutes: 45
shell: pwsh
run: |
& ./tests/scripts/run_ci_backend_tests.ps1 `
-Backend '${{ matrix.backend }}' `
-BinaryDirectory (Join-Path $env:GITHUB_WORKSPACE 'artifacts\bin') `
-Architecture '${{ matrix.architecture }}' *>&1 |
Tee-Object -FilePath (Join-Path $env:RUNNER_TEMP 'mxc-ci.log') -Append
if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE }

- name: Upload failure logs
if: failure() || cancelled()
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a
with:
name: logs-${{ inputs.plan }}-${{ matrix.os }}-${{ matrix.architecture }}-${{ matrix.backend }}-${{ github.run_attempt }}
path: |
${{ runner.temp }}/mxc-ci.log
${{ runner.temp }}/mxc-wpc-tests/logs
${{ runner.temp }}/WinProcessContainer-Tests.results.*
${{ runner.temp }}/mxc_concurrent_oneshot
if-no-files-found: ignore
retention-days: 7

linux:
name: ${{ matrix.os }}, ${{ matrix.architecture }}, ${{ matrix.backend }}
needs: resolve
if: needs.resolve.outputs.has_linux == 'true'
strategy:
fail-fast: false
matrix: ${{ fromJSON(needs.resolve.outputs.linux) }}
runs-on: [ self-hosted, "1ES.Pool=${{ matrix.pool }}", "JobId=mxc-e2e-${{ github.run_id }}-${{ github.run_number }}-${{ github.run_attempt }}" ]
timeout-minutes: 60
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1

- name: Download ${{ matrix.target }} artifact
uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c
with:
name: ${{ matrix.artifact }}
path: artifacts/bin

- name: Prepare backend prerequisites
timeout-minutes: 15
shell: bash
run: |
set -euo pipefail
bash scripts/ci/prepare-linux-host.sh \
'${{ matrix.backend }}' "$GITHUB_WORKSPACE/artifacts/bin" 2>&1 |
tee -a "$RUNNER_TEMP/mxc-ci.log"

- name: Run backend tests
timeout-minutes: 45
shell: bash
run: |
set -euo pipefail
if [[ '${{ matrix.backend }}' == 'lxc' ]]; then
sudo --preserve-env=RUNNER_TEMP bash tests/scripts/run_ci_backend_tests.sh \
'${{ matrix.backend }}' "$GITHUB_WORKSPACE/artifacts/bin" 2>&1 |
tee -a "$RUNNER_TEMP/mxc-ci.log"
else
bash tests/scripts/run_ci_backend_tests.sh \
'${{ matrix.backend }}' "$GITHUB_WORKSPACE/artifacts/bin" 2>&1 |
tee -a "$RUNNER_TEMP/mxc-ci.log"
fi

- name: Upload failure logs
if: failure() || cancelled()
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a
with:
name: logs-${{ inputs.plan }}-${{ matrix.os }}-${{ matrix.architecture }}-${{ matrix.backend }}-${{ github.run_attempt }}
path: ${{ runner.temp }}/mxc-ci.log
if-no-files-found: ignore
retention-days: 7

macos:
name: ${{ matrix.os }}, ${{ matrix.backend }}
needs: resolve
if: needs.resolve.outputs.has_macos == 'true'
strategy:
fail-fast: false
matrix: ${{ fromJSON(needs.resolve.outputs.macos) }}
runs-on: ${{ matrix.runner }}
timeout-minutes: 60
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1

- name: Download ${{ matrix.target }} artifact
uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c
with:
name: ${{ matrix.artifact }}
path: artifacts/bin

- name: Run backend tests
timeout-minutes: 60
shell: bash
run: |
set -euo pipefail
chmod +x artifacts/bin/mxc-exec-mac artifacts/bin/unix-test-proxy
bash tests/scripts/run_ci_backend_tests.sh \
'${{ matrix.backend }}' "$GITHUB_WORKSPACE/artifacts/bin" 2>&1 |
tee "$RUNNER_TEMP/mxc-ci.log"

- name: Upload failure logs
if: failure() || cancelled()
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a
with:
name: logs-${{ inputs.plan }}-${{ matrix.os }}-${{ matrix.architecture }}-${{ matrix.backend }}-${{ github.run_attempt }}
path: ${{ runner.temp }}/mxc-ci.log
if-no-files-found: ignore
retention-days: 7
Loading
Loading