Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
78 commits
Select commit Hold shift + click to select a range
1486c4e
test(ci): run code under test where no container engine can be reached
knittingcode Oct 29, 2026
1fe7336
test(ci): check the Docker isolation with a mutated bin/devenv
knittingcode Oct 29, 2026
9404ee6
docs(dev-environment): describe the Docker isolation of the test suites
knittingcode Oct 29, 2026
16f1a76
test(devenv): keep the unit suite's runtime paths out of the checkout
knittingcode Oct 29, 2026
562ace0
Merge branch 'main' into test/fcrm-qa009-mutation-containment
knittingcode Oct 29, 2026
e84105a
fix(test): close more routes out of the macOS test isolation
knittingcode Oct 29, 2026
6222b6a
test(ci): check the write limits and held loopback ports of the isola…
knittingcode Oct 29, 2026
3d2dbe3
fix(test): narrow the macOS isolation's /tmp, port list and side chan…
knittingcode Oct 29, 2026
cb74381
test(ci): cover the port-list, /tmp, TMPDIR, preference and TIOCSTI l…
knittingcode Oct 29, 2026
38b5ebd
fix(test): describe the services and temporary files of the isolation…
knittingcode Oct 29, 2026
8a5a676
fix(test): isolate Linux runs in pid, IPC and read-only mount namespa…
knittingcode Oct 30, 2026
7016820
test(ci): cover the isolation's writes, signals, namespaces, platform…
knittingcode Oct 30, 2026
45498a8
ci: run the isolated test steps last in their jobs
knittingcode Oct 30, 2026
6d484c9
docs(dev-environment): describe the isolation's platforms, properties…
knittingcode Oct 30, 2026
a0b1212
fix(test): kill the Linux isolation when no-docker.sh is cancelled
knittingcode Oct 30, 2026
e47d09e
test(ci): make T-17 prove its canary ran and cover cancellation by TERM
knittingcode Oct 30, 2026
de1d42f
docs(dev-environment): describe cancellation, the here-document resid…
knittingcode Oct 30, 2026
dfb6ee4
docs(dev-environment): state that a cancelled CI step does not reach …
knittingcode Oct 30, 2026
0cb7f37
fix(devenv): print usage and read container labels without here-docum…
knittingcode Oct 30, 2026
6de07dc
test(devenv): write the unit suite's helper files without here-documents
knittingcode Oct 30, 2026
e512ea8
fix(test): end every process of the macOS isolation and deny shared t…
knittingcode Oct 30, 2026
a1a3eaf
test(ci): pin the isolation suite's helpers and cover the new macOS l…
knittingcode Oct 30, 2026
d9f41c9
test(ci): reject continue-on-error in the CI isolation order check
knittingcode Oct 30, 2026
e8c1598
docs(dev-environment): describe the macOS process ending, here-docume…
knittingcode Oct 30, 2026
44644e4
fix(test): rule out leftovers before writing the run directory and ke…
knittingcode Oct 30, 2026
e8ed7ed
docs(dev-environment): state the failure cases of the macOS process e…
knittingcode Oct 30, 2026
2b16025
fix(test): report a macOS run done only when it is shown that none of…
knittingcode Oct 30, 2026
f2288f0
test(ci): cover pid hopping, concurrent runs and failed endings of th…
knittingcode Oct 30, 2026
980d6a5
docs(dev-environment): describe how a macOS run is shown to have ended
knittingcode Oct 30, 2026
8e048ab
fix(test): count zombies and a gone owner's children correctly when e…
knittingcode Oct 30, 2026
4fca2a2
test(ci): send TERM while processes are being started and cover a zom…
knittingcode Oct 30, 2026
85cfb37
docs(dev-environment): name the exceptions the proof of a macOS run's…
knittingcode Oct 30, 2026
f49e7e7
fix(test): prove the Linux pid namespace from the initial one and lis…
knittingcode Oct 30, 2026
f01b844
test(ci): test the Linux probe's rules purely and refuse a live socke…
knittingcode Oct 30, 2026
5e12d98
docs(dev-environment): describe the Linux pid namespace proof and the…
knittingcode Oct 30, 2026
1148018
fix(test): read an io_uring's file table completely and refuse any so…
knittingcode Oct 30, 2026
52710d6
test(ci): cover partial io_uring tables, kernel hidepid modes and the…
knittingcode Oct 30, 2026
3c4732d
docs(dev-environment): state when an io_uring makes the Linux socket …
knittingcode Oct 30, 2026
78e5e90
docs(dev-environment): give the kernel versions that change an io_uri…
knittingcode Oct 30, 2026
aaecf7e
test(ci): add the pinned AppArmor isolation templates and their stati…
knittingcode Oct 31, 2026
2cba166
feat(ci): add the root helper for the AppArmor profile of a Linux launch
knittingcode Oct 31, 2026
bd1f027
feat(ci): add the confined execution gate to the Linux probe
knittingcode Oct 31, 2026
baf1eb2
feat(ci): launch Linux commands under a per-launch AppArmor profile
knittingcode Oct 31, 2026
7a511a1
test(ci): add the ineffective-profile negative control of the Linux i…
knittingcode Oct 31, 2026
88b9085
test(ci): cover the Linux isolation with kernel-level regression cases
knittingcode Oct 31, 2026
bd324dd
docs(ci): document the kernel-enforced Linux test isolation and propo…
knittingcode Oct 31, 2026
88cbeaa
fix(ci): harden the Linux launcher and AppArmor helper after the firs…
knittingcode Oct 31, 2026
eaa9d2c
test(ci): correct L-test assertions found wrong in the first review
knittingcode Oct 31, 2026
a10c6ea
fix(ci): close the remaining signal and cleanup windows found in review
knittingcode Oct 31, 2026
feb3a2f
fix(ci): read the whole AppArmor profile list and detect cut labels
knittingcode Nov 3, 2026
a32faf0
fix(ci): count a failed removal of the fence or control directory as …
knittingcode Nov 3, 2026
abe5481
docs(ci): correct the Linux isolation documentation and the launch co…
knittingcode Nov 3, 2026
61344b3
fix(ci): count a failed removal of the run directory as a cleanup fai…
knittingcode Nov 3, 2026
91ea972
test(ci): check the named directory and the kept directories in the c…
knittingcode Nov 3, 2026
abc1033
fix(ci): compare the L-16 projection with 540 s before rounding it
knittingcode Nov 3, 2026
727c5ae
test(ci): make T-41's 540.004 s case compute 540.004 s
knittingcode Nov 3, 2026
51013e5
test(ci): keep the isolation suite's case outputs when a CI job asks …
knittingcode Nov 3, 2026
45458d5
fix(ci): walk the opt-in evidence copy by directory descriptors
knittingcode Nov 3, 2026
9ac29bb
test(ci): keep the full outputs of T-19, T-36, T-38 and T-39
knittingcode Nov 3, 2026
1d71477
fix(ci): open the evidence copy's sources by their physical paths only
knittingcode Nov 3, 2026
44a8d13
test(ci): keep the launch streams the isolation suite filtered or dis…
knittingcode Nov 3, 2026
5bcdd1b
test(ci): fail the isolation suite when a kept launch stream cannot b…
knittingcode Nov 3, 2026
0e3fe2e
test(ci): report each L-15c launch's own verdict
knittingcode Nov 3, 2026
4a5a3c1
test(ci): give L-07's pty case a live terminal and no other descriptor
knittingcode Nov 3, 2026
2ee3983
test(ci): count L-18's 64 KiB stderr line byte for byte
knittingcode Nov 3, 2026
a07cf73
test(ci): make T-07 check its launch's own status
knittingcode Nov 3, 2026
22aeddc
test(ci): count only complete lines in L-18's stderr check
knittingcode Nov 3, 2026
f4a7946
test(ci): require the filter's own status in T-07's verdict
knittingcode Nov 3, 2026
71b5755
fix(ci): add a wrapper that starts a suite with no descriptor above 2
knittingcode Nov 4, 2026
7a0112b
fix(ci): start the six isolated steps through the descriptor wrapper
knittingcode Nov 4, 2026
21e14c9
fix(ci): refuse what can still change an exact wrapped step
knittingcode Nov 4, 2026
a864678
fix(ci): read the workflow strictly in the isolation order check
knittingcode Nov 5, 2026
781c323
fix(ci): close the gaps a second review found in the order check
knittingcode Nov 5, 2026
ef9bb84
fix(ci): allow only the pinned checkout action in the order check
knittingcode Nov 5, 2026
0d1ab71
fix(ci): refuse expressions in run text in the order check
knittingcode Nov 5, 2026
e44bfa8
fix(security): update eight Symfony packages to 7.4.23 for the 2026-1…
knittingcode Nov 5, 2026
c5b0039
test(security): pin that a HEAD request meets the access decisions of…
knittingcode Nov 5, 2026
4872e28
docs(dev-environment): record the Linux launcher's first CI evidence …
knittingcode Nov 5, 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
42 changes: 27 additions & 15 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -28,27 +28,15 @@ jobs:
- name: Reject tracked local-only files
run: scripts/ci/guard-tracked-files.sh

- name: Run guard regression tests
run: scripts/ci/tests/guard-tracked-files.test.sh

- name: Require a digest-pinned Dockerfile frontend
run: scripts/ci/guard-dockerfile-frontend.sh

- name: Run Dockerfile frontend guard regression tests
run: scripts/ci/tests/guard-dockerfile-frontend.test.sh

- name: Check the container scan exceptions against their policy
run: scripts/ci/guard-trivyignore.sh

- name: Run container scan exception guard regression tests
run: scripts/ci/tests/guard-trivyignore.test.sh

- name: Keep the edge configuration free of ACME server, PKI, issuers and mutable admin
run: scripts/ci/guard-edge-config.sh

- name: Run edge configuration guard regression tests
run: scripts/ci/tests/guard-edge-config.test.sh

- name: ShellCheck
run: >-
docker run --rm --network none -v "$PWD:/mnt:ro" -w /mnt
Expand All @@ -57,13 +45,34 @@ jobs:
scripts/ci/guard-dockerfile-frontend.sh scripts/ci/tests/guard-dockerfile-frontend.test.sh
scripts/ci/guard-trivyignore.sh scripts/ci/tests/guard-trivyignore.test.sh
scripts/ci/guard-edge-config.sh scripts/ci/tests/guard-edge-config.test.sh
scripts/ci/no-docker.sh scripts/ci/tests/no-docker.test.sh

- name: actionlint
run: >-
docker run --rm --network none -v "$PWD:/repo:ro" -w /repo
rhysd/actionlint:1.7.12@sha256:b1934ee5f1c509618f2508e6eb47ee0d3520686341fec936f3b79331f9315667
-color

# Code under test runs only in the steps from here to the end of the
# job, each isolated by scripts/ci/no-docker.sh; no step that is not
# isolated may follow them (checked by scripts/ci/tests/ci-isolation-order.py).
# Each starts through scripts/ci/fdnorm.py: runner steps can inherit
# descriptors above 2, which the isolation launcher refuses.
- name: Run guard regression tests
run: python3 -I scripts/ci/fdnorm.py -- scripts/ci/tests/guard-tracked-files.test.sh

- name: Run Dockerfile frontend guard regression tests
run: python3 -I scripts/ci/fdnorm.py -- scripts/ci/tests/guard-dockerfile-frontend.test.sh

- name: Run container scan exception guard regression tests
run: python3 -I scripts/ci/fdnorm.py -- scripts/ci/tests/guard-trivyignore.test.sh

- name: Run edge configuration guard regression tests
run: python3 -I scripts/ci/fdnorm.py -- scripts/ci/tests/guard-edge-config.test.sh

- name: Run test isolation regression tests
run: python3 -I scripts/ci/fdnorm.py -- scripts/ci/tests/no-docker.test.sh

# The application checks run in this required job on purpose: a separate
# job that is not a required check could fail (or be skipped) without
# blocking a merge.
Expand Down Expand Up @@ -105,9 +114,6 @@ jobs:
- name: make help and make doctor
run: make help && make doctor

- name: Allocator unit tests
run: tests/devenv/unit.sh

- name: Allocator integration tests (real Docker)
run: tests/devenv/integration.sh

Expand All @@ -127,3 +133,9 @@ jobs:
# docs/security/container-vulnerabilities.md).
- name: Container vulnerability scan (Trivy)
run: tests/app/scan.sh

# Code under test runs only from here to the end of the job, isolated by
# scripts/ci/no-docker.sh (order checked by scripts/ci/tests/ci-isolation-order.py).
# It starts through scripts/ci/fdnorm.py, as in the Repository guard job.
- name: Allocator unit tests
run: python3 -I scripts/ci/fdnorm.py -- tests/devenv/unit.sh
98 changes: 49 additions & 49 deletions backend/composer.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading
Loading