OXYGENHUB

A test report and coverage from every run of OxygenFlow's tests (refs #82, closes #81) 9e5fd161efc3

The test job runs cargo llvm-cov nextest with a ci profile: a JUnit report
kept whether or not the tests pass, and LCOV coverage, for the hub's
Tests and Coverage tabs. cargo-nextest has been in the Rust image since
image 836461b6 (#81).
Author
Andy McCall @andymccall <[email protected]>
via
agent agent:claude@andymccall <[email protected]> · keyless, under your grant for changes,refs,seal · key 0a26d24a5ee2
When
· 2026-10-25 21:20 UTC
Signature
◈ sealed by agent:claude@andymccall
Hash
9e5fd161efc3a7eb51cd3b0a890976b2f1352ec2ffd8b6160d7ebd553207c790
Depends on
06a4c472b385 2b40cb9b87e1 c3db750ed96e f29b88af0d9b fe128fa67a06
Depended on by
1b160d372d9e
In bookmarks
main
In tags
v0.4.0 v0.5.0 v0.5.1 v0.5.2 v0.5.3
Edits
4 atoms, 2 tree operations, 3 files

Browse the tree at this change

added .config/nextest.toml +8 −0
1 +
# The CI profile (oxygenflow#82): every test runs, and a JUnit report is
2 +
# written to target/nextest/ci/junit.xml for the hub's test report
3 +
# (the job's `junit` artifact).
4 +
[profile.ci]
5 +
fail-fast = false
6 +
7 +
[profile.ci.junit]
8 +
path = "junit.xml"
modified .flow/pipeline.kdl +13 −1
…
81 unchanged lines
82 82
    env {
83 83
        CARGO_INCREMENTAL "0"
84 84
    }
85 -
    exec "sh" ".flow/warm-target.sh" "cargo" "test" "--workspace" "--locked"
85 +
    // The tests under cargo-nextest and cargo-llvm-cov (#82): a test report
86 +
    // (JUnit, kept whether or not they pass) and line coverage (LCOV) from
87 +
    // one run, for the hub's Tests and Coverage tabs.
88 +
    exec "sh" ".flow/warm-target.sh" "cargo" "llvm-cov" "nextest" "--workspace" "--locked" "--profile" "ci" "--lcov" "--output-path" "/src/target/lcov.info"
89 +
    output {
90 +
        artifact "junit" {
91 +
            path "/src/target/nextest/ci/junit.xml"
92 +
            when "always"
93 +
        }
94 +
        artifact "coverage" {
95 +
            path "/src/target/lcov.info"
96 +
        }
97 +
    }
86 98
}
87 99
88 100
job "summary" {
…
7 unchanged lines
modified CHANGELOG.md +1 −0
…
3 unchanged lines
4 4
5 5
## Unreleased
6 6
7 +
- **OxygenFlow's own CI writes a test report and coverage (#82):** its test job runs under cargo-nextest and cargo-llvm-cov (both in the Rust image, #81), keeping a JUnit report (whether or not the tests pass) and LCOV coverage for the hub's Tests and Coverage tabs; `.config/nextest.toml` has the `ci` profile.
7 8
- **A runner that leaves hands its jobs back (#76):** `runner::leave(reason)` (the runner as a library, as the Android app runs it) stops claiming, stops the jobs it holds, sends what they logged and hands them back with `POST /api/v1/flow/jobs/{id}/release`; the hub (OxygenHub #312) queues them again ahead of new work for another runner, and hands back the jobs of a runner silent for 3 minutes the same way. Spec §11.5.2.
8 9
- **A runner reads its load and kernel without /proc:** `sysinfo` and `uname`, the same numbers; an Android app may not read `/proc/loadavg` or `/proc/sys/kernel/osrelease`, so the phone runner was refused, and logged, at every claim (oxygenhub-android#8).
9 10
- **Built on oxygen's main with #140 and #141:** the runner's store puts objects in place where hard links are refused (Android, so the phone runner can clone), and the `deps/oxygen` pin conflict two replacements in one change left on main is settled with `oxy resolve deps/oxygen`.
…
90 unchanged lines