From d0109cd2e612f15037b445bf561210f9c83ac646 Mon Sep 17 00:00:00 2001 From: "Hans J. Johnson" Date: Fri, 22 May 2026 11:24:11 -0500 Subject: [PATCH 1/4] COMP: Build Pixi-Cxx CI as Release to enable Windows ccache The configure-ci task built RelWithDebInfo on every OS leg. On Windows the MSVC /Zi separate-PDB debug info makes nearly all compiler invocations uncacheable by ccache (~1% cacheable vs ~100% on Linux/macOS), so the Windows leg gets no ccache benefit. Release omits /Zi, letting Windows compilations be cached like the other platforms. Only configure-ci (the CI configure task, run for all OS legs) changes; the local-dev configure task keeps RelWithDebInfo. --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index a5c5a2ab289..99c1da0ba2a 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -52,7 +52,7 @@ cmd = '''cmake \ -Bbuild \ -S. \ -GNinja \ - -DCMAKE_BUILD_TYPE:STRING=RelWithDebInfo \ + -DCMAKE_BUILD_TYPE:STRING=Release \ -DBUILD_TESTING:BOOL=ON \ -DITK_USE_CCACHE:BOOL=ON \ -DCMAKE_C_COMPILER_LAUNCHER:STRING=ccache \ From dcb9ffd8eff235e28766d45eb45e37491cc03355 Mon Sep 17 00:00:00 2001 From: "Hans J. Johnson" Date: Fri, 22 May 2026 11:30:28 -0500 Subject: [PATCH 2/4] COMP: Add Pixi-Cxx build-ci/test-ci tasks so CI avoids bare build The build/test tasks depend on the local-dev configure (RelWithDebInfo), so CI used --skip-deps to keep the configure-ci Release build type. Add build-ci (depends-on configure-ci) and test-ci (depends-on build-ci) and point the Pixi-Cxx workflow at the *-ci tasks, so the CI dependency chain resolves to the Release + ccache configure rather than the local default. --- .github/workflows/pixi.yml | 4 ++-- pyproject.toml | 11 +++++++++++ 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/.github/workflows/pixi.yml b/.github/workflows/pixi.yml index b4f3a605192..635b6d23f63 100644 --- a/.github/workflows/pixi.yml +++ b/.github/workflows/pixi.yml @@ -140,7 +140,7 @@ jobs: run: | echo "****** df -h / -- pre build" df -h / - pixi run --skip-deps build + pixi run --skip-deps build-ci echo "****** df -h / -- post build" df -h / @@ -160,7 +160,7 @@ jobs: df -h / - name: Test - run: pixi run --skip-deps test + run: pixi run --skip-deps test-ci - name: Disk space reporting AFTER (optimize free-disk-space) run: | diff --git a/pyproject.toml b/pyproject.toml index 99c1da0ba2a..1f4f49a75c8 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -105,6 +105,17 @@ cmd = "ctest -j3 --test-dir build" description = "Test ITK" depends-on = ["build"] +[tool.pixi.feature.cxx.tasks.build-ci] +cmd = "cmake --build build" +description = "Build ITK for CI" +outputs = ["build/lib/**"] +depends-on = ["configure-ci"] + +[tool.pixi.feature.cxx.tasks.test-ci] +cmd = "ctest -j3 --test-dir build" +description = "Test ITK for CI" +depends-on = ["build-ci"] + [tool.pixi.feature.cxx.tasks.configure-debug] cmd = '''cmake \ -Bbuild-debug \ From 10dd86e7ebbcf88a6bc9745c6a45cc7a97ea5195 Mon Sep 17 00:00:00 2001 From: "Hans J. Johnson" Date: Fri, 22 May 2026 14:41:58 -0500 Subject: [PATCH 3/4] COMP: Disable fail-fast for Pixi-Cxx matrix Set fail-fast: false so a failure on one OS leg no longer cancels the in-progress legs for the other platforms, ensuring every platform runs to completion for diagnosis. --- .github/workflows/pixi.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/pixi.yml b/.github/workflows/pixi.yml index 635b6d23f63..302bba20640 100644 --- a/.github/workflows/pixi.yml +++ b/.github/workflows/pixi.yml @@ -34,6 +34,7 @@ jobs: runs-on: ${{ matrix.os }} timeout-minutes: 0 strategy: + fail-fast: false matrix: os: [ubuntu-22.04, windows-2022, macos-15] steps: From 9b6e720e06c4dbbffdfda689653ce687b45a095d Mon Sep 17 00:00:00 2001 From: "Hans J. Johnson" Date: Fri, 22 May 2026 14:43:29 -0500 Subject: [PATCH 4/4] COMP: Fetch ExternalData as a fail-fast Pixi-Cxx CI step Add a build-external-data-ci task that builds the ITKData target to download all ExternalData blobs, and run it before the build step in the Pixi-Cxx workflow. A missing or failed download now aborts the job immediately at a dedicated step rather than surfacing as an opaque mid-test failure. --- .github/workflows/pixi.yml | 3 +++ pyproject.toml | 5 +++++ 2 files changed, 8 insertions(+) diff --git a/.github/workflows/pixi.yml b/.github/workflows/pixi.yml index 302bba20640..54491225c40 100644 --- a/.github/workflows/pixi.yml +++ b/.github/workflows/pixi.yml @@ -137,6 +137,9 @@ jobs: - name: Configure run: pixi run configure-ci + - name: Fetch ExternalData + run: pixi run --skip-deps build-external-data-ci + - name: Build run: | echo "****** df -h / -- pre build" diff --git a/pyproject.toml b/pyproject.toml index 1f4f49a75c8..263466a1cc9 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -105,6 +105,11 @@ cmd = "ctest -j3 --test-dir build" description = "Test ITK" depends-on = ["build"] +[tool.pixi.feature.cxx.tasks.build-external-data-ci] +cmd = "cmake --build build --target ITKData" +description = "Fetch ITK ExternalData for CI (fails fast on download errors)" +depends-on = ["configure-ci"] + [tool.pixi.feature.cxx.tasks.build-ci] cmd = "cmake --build build" description = "Build ITK for CI"