Skip to content

Commit ee55ded

Browse files
committed
Regroup CI doctests and adjust unit-tests recipe
This seeks to make improvements in four overlapping areas: - The CI `test-fast` job for `windows-latest` had been taking the longest, and integrating PRs would be more efficient if it could be sped up. If it didn't have to build and run doctests, then it would run markedly faster. `test-fast` runs doctests because... - The `unit-tests` recipe in the `justfile`, which is one of the recipes the "full" CI `test` job runs via the `ci-test` recipe, runs a number of `nextest` commands on individual crates (with `-p`, except for testing the top-level `gitoxide` crate, and not with `--workspace`). It also ran doctests, but only on the `gitoxide` top-level crate. But the `gitoxide` crate currently has no doctests, while some `gix-*` crates do. - On CI, we usually prefer `--no-fail-fast`. But it is not always used, because the commands in the `unit-tests` justfile recipe do not use it. `--no-fail-fast` is not always preferred when running tests locally, but... - Both locally and on CI, in most cases that a test fails in a commmand in the `unit-tests` justfile recipe, the effect is that tests have run and results have been reported for multiple `nextest` commands, yet not all the tests specified in the most recent `nextest` command to run. Thus, omitting `--no-fail-fast` may not have the most intuitive effect in `just unit-tests`, even when run locally (even if the user would omit `--no-fail-fast` in individual `cargo nextest` runs carried out manually). This commit makes the following changes: 1. Add `--no-fail-fast` to each of the commands in the `unit-tests` recipe in the `justfile`: the numerous `cargo nextest` commands, as well as the `cargo test` command used to run doctests. 2. Add `--workspace` to the `cargo test` command used to run doctests in the `unit-tests` recipe in the `justfile`, and move it to the end of the recipe. 3. Not to be confused with that `cargo test` command, move the other `cargo test` command used to run doctests in the `ci.yml` workflow (which alredy passed `--workspace`, as its purpose was to run all doctests in all crates) from the `tests-fast` job definition into the `test-32bit-windows-size` job, and rename that latter job `test-32bit-windows-size-doc` accordingly. The rationale for (3) may not be obvious. The idea is: - Running the doctests on only one Unix-like system should be enough, so long as they are run for all crates in the workspace. So the change in the `unit-tests` recipe in the `justfile` makes it so the CI `test` job (which includes a `unit-tests` run) covers doctests sufficiently, *except* for Windows. - Although we should probably keep running doctests regularly on Windows, removing it from `test-fast`, including on Windows, is the simplest way to make the Windows `test-fast` job run faster. (It also makes the job definition clearer, since some of the other steps relate to each other more closely than they do to the step that ran the doctests.) - It should be sufficient to run the doctests in any Windows environment. And it is best to avoid adding a new Windows job just for this, since various other Windows jobs might be added sometime soon (such as for ARM64, native Windows containers, the Git for Windows SDK, MinGit, BusyBox MinGit, and possibly others; some of these may be possible to combine, but likely a few more Windows jobs may be introduced for these, so avoiding adding extra Windows jobs now may make it easier to avoid having too many Windows jobs, in terms of queuing, GHA cache usage, energy usage, and other resources). So if this can be added to another Windows job without causing problems, that is preferable. - The Windows job that took the least amount of time, usually by several minutes, was the `test-32bit-windows-size` job. It is hope that this keeps the benefits of #1556, #1559, and #1654, while improving CI testing performance most of the time.
1 parent 1163938 commit ee55ded

File tree

2 files changed

+40
-40
lines changed

2 files changed

+40
-40
lines changed

.github/workflows/ci.yml

+5-5
Original file line numberDiff line numberDiff line change
@@ -181,8 +181,6 @@ jobs:
181181
env:
182182
GIX_TEST_CREATE_ARCHIVES_EVEN_ON_CI: '1'
183183
run: cargo nextest run --workspace --no-fail-fast
184-
- name: Doctest
185-
run: cargo test --workspace --doc --no-fail-fast
186184
- name: Check that tracked archives are up to date
187185
run: git diff --exit-code # If this fails, the fix is usually to commit a regenerated archive.
188186

@@ -277,7 +275,7 @@ jobs:
277275
GIX_TEST_IGNORE_ARCHIVES: '1'
278276
run: cargo nextest run --workspace --no-fail-fast
279277

280-
test-32bit-windows-size:
278+
test-32bit-windows-size-doc:
281279
runs-on: windows-latest
282280

283281
env:
@@ -292,8 +290,10 @@ jobs:
292290
- uses: taiki-e/install-action@v2
293291
with:
294292
tool: nextest
295-
- name: Test (nextest)
293+
- name: Test data structure sizes (nextest)
296294
run: cargo nextest run --target $env:TARGET --workspace --no-fail-fast size
295+
- name: Doctest
296+
run: cargo test --workspace --doc --no-fail-fast
297297

298298
lint:
299299
runs-on: ubuntu-latest
@@ -497,7 +497,7 @@ jobs:
497497
- test-fast
498498
- test-fixtures-windows
499499
- test-32bit
500-
- test-32bit-windows-size
500+
- test-32bit-windows-size-doc
501501
- lint
502502
- cargo-deny
503503
- check-packetline

justfile

+35-35
Original file line numberDiff line numberDiff line change
@@ -144,41 +144,41 @@ doc $RUSTDOCFLAGS='-D warnings':
144144

145145
# Run all unit tests
146146
unit-tests:
147-
cargo nextest run
148-
cargo test --doc
149-
cargo nextest run -p gix-testtools
150-
cargo nextest run -p gix-testtools --features xz
151-
cargo nextest run -p gix-archive --no-default-features
152-
cargo nextest run -p gix-archive --features tar
153-
cargo nextest run -p gix-archive --features tar_gz
154-
cargo nextest run -p gix-archive --features zip
155-
cargo nextest run -p gix-status-tests --features gix-features-parallel
156-
cargo nextest run -p gix-worktree-state-tests --features gix-features-parallel
157-
cargo nextest run -p gix-worktree-tests --features gix-features-parallel
158-
cargo nextest run -p gix-object
159-
cargo nextest run -p gix-object --features verbose-object-parsing-errors
160-
cargo nextest run -p gix-tempfile --features signals
161-
cargo nextest run -p gix-features --all-features
162-
cargo nextest run -p gix-ref-tests --all-features
163-
cargo nextest run -p gix-odb --all-features
164-
cargo nextest run -p gix-odb-tests --features gix-features-parallel
165-
cargo nextest run -p gix-pack --all-features
166-
cargo nextest run -p gix-pack-tests --features all-features
167-
cargo nextest run -p gix-pack-tests --features gix-features-parallel
168-
cargo nextest run -p gix-index-tests --features gix-features-parallel
169-
cargo nextest run -p gix-packetline --features blocking-io,maybe-async/is_sync --test blocking-packetline
170-
cargo nextest run -p gix-packetline --features async-io --test async-packetline
171-
cargo nextest run -p gix-transport --features http-client-curl,maybe-async/is_sync
172-
cargo nextest run -p gix-transport --features http-client-reqwest,maybe-async/is_sync
173-
cargo nextest run -p gix-transport --features async-client
174-
cargo nextest run -p gix-protocol --features blocking-client
175-
cargo nextest run -p gix-protocol --features async-client
176-
cargo nextest run -p gix --no-default-features
177-
cargo nextest run -p gix --no-default-features --features basic,comfort,max-performance-safe
178-
cargo nextest run -p gix --no-default-features --features basic,extras,comfort,need-more-recent-msrv
179-
cargo nextest run -p gix --features async-network-client
180-
cargo nextest run -p gix --features blocking-network-client
181-
cargo nextest run -p gitoxide-core --lib --no-tests=warn
147+
cargo nextest run --no-fail-fast
148+
cargo nextest run -p gix-testtools --no-fail-fast
149+
cargo nextest run -p gix-testtools --features xz --no-fail-fast
150+
cargo nextest run -p gix-archive --no-default-features --no-fail-fast
151+
cargo nextest run -p gix-archive --features tar --no-fail-fast
152+
cargo nextest run -p gix-archive --features tar_gz --no-fail-fast
153+
cargo nextest run -p gix-archive --features zip --no-fail-fast
154+
cargo nextest run -p gix-status-tests --features gix-features-parallel --no-fail-fast
155+
cargo nextest run -p gix-worktree-state-tests --features gix-features-parallel --no-fail-fast
156+
cargo nextest run -p gix-worktree-tests --features gix-features-parallel --no-fail-fast
157+
cargo nextest run -p gix-object --no-fail-fast
158+
cargo nextest run -p gix-object --features verbose-object-parsing-errors --no-fail-fast
159+
cargo nextest run -p gix-tempfile --features signals --no-fail-fast
160+
cargo nextest run -p gix-features --all-features --no-fail-fast
161+
cargo nextest run -p gix-ref-tests --all-features --no-fail-fast
162+
cargo nextest run -p gix-odb --all-features --no-fail-fast
163+
cargo nextest run -p gix-odb-tests --features gix-features-parallel --no-fail-fast
164+
cargo nextest run -p gix-pack --all-features --no-fail-fast
165+
cargo nextest run -p gix-pack-tests --features all-features --no-fail-fast
166+
cargo nextest run -p gix-pack-tests --features gix-features-parallel --no-fail-fast
167+
cargo nextest run -p gix-index-tests --features gix-features-parallel --no-fail-fast
168+
cargo nextest run -p gix-packetline --features blocking-io,maybe-async/is_sync --test blocking-packetline --no-fail-fast
169+
cargo nextest run -p gix-packetline --features async-io --test async-packetline --no-fail-fast
170+
cargo nextest run -p gix-transport --features http-client-curl,maybe-async/is_sync --no-fail-fast
171+
cargo nextest run -p gix-transport --features http-client-reqwest,maybe-async/is_sync --no-fail-fast
172+
cargo nextest run -p gix-transport --features async-client --no-fail-fast
173+
cargo nextest run -p gix-protocol --features blocking-client --no-fail-fast
174+
cargo nextest run -p gix-protocol --features async-client --no-fail-fast
175+
cargo nextest run -p gix --no-default-features --no-fail-fast
176+
cargo nextest run -p gix --no-default-features --features basic,comfort,max-performance-safe --no-fail-fast
177+
cargo nextest run -p gix --no-default-features --features basic,extras,comfort,need-more-recent-msrv --no-fail-fast
178+
cargo nextest run -p gix --features async-network-client --no-fail-fast
179+
cargo nextest run -p gix --features blocking-network-client --no-fail-fast
180+
cargo nextest run -p gitoxide-core --lib --no-tests=warn --no-fail-fast
181+
cargo test --workspace --doc --no-fail-fast
182182

183183
# These tests aren't run by default as they are flaky (even locally)
184184
unit-tests-flaky:

0 commit comments

Comments
 (0)