From 41d4237a250e83b814e71b0b76e7f1a9e70fa545 Mon Sep 17 00:00:00 2001 From: "Hans J. Johnson" Date: Sat, 14 Mar 2026 20:08:47 -0500 Subject: [PATCH 1/3] ENH: Optimize GitHub Actions ccache strategy with config-based keys MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Improve the ccache caching strategy in pixi.yml and arm.yml: - Key cache on OS + build config + build-system file hashes rather than github.sha. This gives reuse when source files change but the toolchain/build-config is still compatible, which is exactly where ccache pays off. ccache itself handles source-level reuse. - Add tiered restore-keys fallback (OS+config → OS-only) so PR branches inherit the best available cache via GitHub's built-in branch scoping (PRs can read default branch caches) - Save cache on all branches (if: always()), not just main, so PR branches benefit from incremental caches across pushes - Bump cache key version to v3 to avoid restoring old caches - Remove CCACHE_NODIRECT=1 to enable direct mode for better hit rates (CCACHE_COMPILERCHECK=content already ensures correctness) - Increase CCACHE_MAXSIZE from 2.4G to 5G to leverage larger storage limits - Use separate restore/save actions to support saving even on build failure (if: always()) Co-Authored-By: Claude Opus 4.6 --- .github/workflows/arm.yml | 14 +++++++++----- .github/workflows/pixi.yml | 14 +++++++++----- 2 files changed, 18 insertions(+), 10 deletions(-) diff --git a/.github/workflows/arm.yml b/.github/workflows/arm.yml index 6210c6def8d..8b9aebada2b 100644 --- a/.github/workflows/arm.yml +++ b/.github/workflows/arm.yml @@ -94,9 +94,8 @@ jobs: echo "CCACHE_BASEDIR=${GITHUB_WORKSPACE}" >> "$GITHUB_ENV" echo "CCACHE_COMPILERCHECK=content" >> "$GITHUB_ENV" echo "CCACHE_NOHASHDIR=true" >> "$GITHUB_ENV" - echo "CCACHE_NODIRECT=1" >> "$GITHUB_ENV" echo "CCACHE_DIR=${{ runner.temp }}/ccache" >> "$GITHUB_ENV" - echo "CCACHE_MAXSIZE=2.4G" >> "$GITHUB_ENV" + echo "CCACHE_MAXSIZE=5G" >> "$GITHUB_ENV" if [ "$RUNNER_OS" == "Linux" ]; then sudo apt-get update -qq && sudo apt-get install -y ccache locales sudo locale-gen de_DE.UTF-8 @@ -109,7 +108,11 @@ jobs: uses: actions/cache/restore@v5 with: path: ${{ runner.temp }}/ccache - key: ccache-v1-${{ matrix.os }}-${{ matrix.name }} + key: >- + ccache-v3-${{ runner.os }}-${{ matrix.name }}-${{ hashFiles('CMakeLists.txt', 'cmake/**', '**/*.cmake', '**/pyproject.toml', '**/pixi.lock') }} + restore-keys: | + ccache-v3-${{ runner.os }}-${{ matrix.name }}- + ccache-v3-${{ runner.os }}- - name: Show ccache configuration, stats and maintenance shell: bash @@ -170,11 +173,12 @@ jobs: env: CTEST_OUTPUT_ON_FAILURE: 1 - name: Save compiler cache - if: github.ref == 'refs/heads/main' + if: always() uses: actions/cache/save@v5 with: path: ${{ runner.temp }}/ccache - key: ccache-v1-${{ matrix.os }}-${{ matrix.name }} + key: >- + ccache-v3-${{ runner.os }}-${{ matrix.name }}-${{ hashFiles('CMakeLists.txt', 'cmake/**', '**/*.cmake', '**/pyproject.toml', '**/pixi.lock') }} - name: ccache stats if: always() diff --git a/.github/workflows/pixi.yml b/.github/workflows/pixi.yml index df848955b49..e0b6c8afcec 100644 --- a/.github/workflows/pixi.yml +++ b/.github/workflows/pixi.yml @@ -53,9 +53,8 @@ jobs: echo "CCACHE_BASEDIR=${GITHUB_WORKSPACE}" >> "$GITHUB_ENV" echo "CCACHE_COMPILERCHECK=content" >> "$GITHUB_ENV" echo "CCACHE_NOHASHDIR=true" >> "$GITHUB_ENV" - echo "CCACHE_NODIRECT=1" >> "$GITHUB_ENV" echo "CCACHE_DIR=${{ runner.temp }}/ccache" >> "$GITHUB_ENV" - echo "CCACHE_MAXSIZE=2.4G" >> "$GITHUB_ENV" + echo "CCACHE_MAXSIZE=5G" >> "$GITHUB_ENV" if [ "$RUNNER_OS" == "Linux" ]; then sudo apt-get update -qq && sudo apt-get install -y ccache locales sudo locale-gen de_DE.UTF-8 @@ -70,7 +69,11 @@ jobs: uses: actions/cache/restore@v5 with: path: ${{ runner.temp }}/ccache - key: ccache-v1-${{ matrix.os }}-pixi-cxx + key: >- + ccache-v3-${{ runner.os }}-pixi-cxx-${{ hashFiles('CMakeLists.txt', 'cmake/**', '**/*.cmake', '**/pyproject.toml', '**/pixi.lock') }} + restore-keys: | + ccache-v3-${{ runner.os }}-pixi-cxx- + ccache-v3-${{ runner.os }}- - name: Show ccache configuration, stats and maintenance shell: bash @@ -150,11 +153,12 @@ jobs: echo "****** df -h /" df -h / - name: Save compiler cache - if: github.ref == 'refs/heads/main' + if: always() uses: actions/cache/save@v5 with: path: ${{ runner.temp }}/ccache - key: ccache-v1-${{ matrix.os }}-pixi-cxx + key: >- + ccache-v3-${{ runner.os }}-pixi-cxx-${{ hashFiles('CMakeLists.txt', 'cmake/**', '**/*.cmake', '**/pyproject.toml', '**/pixi.lock') }} - name: ccache stats if: always() From 165fb0b9b5e101593199748710239a08af59982e Mon Sep 17 00:00:00 2001 From: "Hans J. Johnson" Date: Sat, 14 Mar 2026 09:00:34 -0500 Subject: [PATCH 2/3] WIP: Disable all CI builds except ARMBUILD-Ubuntu-24.04-arm Temporarily disable all CI pipelines except the ARM Ubuntu build to isolate dashboard failures for debugging. - arm.yml: Remove x86_64-rosetta and Python matrix entries - pixi.yml: Comment out PR trigger - Azure pipelines: Set pr: none for Linux, LinuxPython, MacOS, MacOSPython, Windows, WindowsPython Co-Authored-By: Claude Opus 4.6 --- .github/workflows/arm.yml | 25 ------------------- .github/workflows/pixi.yml | 21 ++++++++-------- .../AzurePipelinesLinux.yml | 13 ++-------- .../AzurePipelinesLinuxPython.yml | 13 ++-------- .../AzurePipelinesMacOS.yml | 13 ++-------- .../AzurePipelinesMacOSPython.yml | 13 ++-------- .../AzurePipelinesWindows.yml | 13 ++-------- .../AzurePipelinesWindowsPython.yml | 13 ++-------- 8 files changed, 23 insertions(+), 101 deletions(-) diff --git a/.github/workflows/arm.yml b/.github/workflows/arm.yml index 8b9aebada2b..4998b69090b 100644 --- a/.github/workflows/arm.yml +++ b/.github/workflows/arm.yml @@ -54,31 +54,6 @@ jobs: ITK_USE_CLANG_FORMAT:BOOL=OFF ctest-options: "" - - os: macos-15 - name: "x86_64-rosetta" - cmake-build-type: "Release" - cmake-generator: "Ninja" - python-version: "" - ctest-cache: | - BUILD_SHARED_LIBS:BOOL=OFF - BUILD_EXAMPLES:BOOL=OFF - ITK_WRAP_PYTHON:BOOL=OFF - ITK_USE_CLANG_FORMAT:BOOL=OFF - CMAKE_OSX_ARCHITECTURES:STRING=x86_64 - ctest-options: "" - - - os: macos-15 - name: "Python" - cmake-build-type: "Release" - cmake-generator: "Ninja" - python-version: "3.11" - ctest-cache: | - BUILD_SHARED_LIBS:BOOL=OFF - BUILD_EXAMPLES:BOOL=OFF - ITK_WRAP_PYTHON:BOOL=ON - ITK_USE_CLANG_FORMAT:BOOL=OFF - ctest-options: "-E itkPyBufferMemoryLeakTest" - name: ARMBUILD-${{ matrix.name }} steps: diff --git a/.github/workflows/pixi.yml b/.github/workflows/pixi.yml index e0b6c8afcec..51075a8d72f 100644 --- a/.github/workflows/pixi.yml +++ b/.github/workflows/pixi.yml @@ -14,16 +14,17 @@ on: - 'Utilities/ITKv5Preparation/**' - 'Utilities/Maintenance/**' - 'Modules/Remote/*.remote.cmake' - pull_request: - paths-ignore: - - '*.md' - - LICENSE - - NOTICE - - 'Documentation/**' - - 'Utilities/Debugger/**' - - 'Utilities/ITKv5Preparation/**' - - 'Utilities/Maintenance/**' - - 'Modules/Remote/*.remote.cmake' + # WIP: PR trigger disabled to isolate ARMBUILD-Ubuntu-24.04-arm CI + # pull_request: + # paths-ignore: + # - '*.md' + # - LICENSE + # - NOTICE + # - 'Documentation/**' + # - 'Utilities/Debugger/**' + # - 'Utilities/ITKv5Preparation/**' + # - 'Utilities/Maintenance/**' + # - 'Modules/Remote/*.remote.cmake' concurrency: group: '${{ github.workflow }}@${{ github.head_ref || github.ref }}' diff --git a/Testing/ContinuousIntegration/AzurePipelinesLinux.yml b/Testing/ContinuousIntegration/AzurePipelinesLinux.yml index 0c8a107a95d..3dd3829ee54 100644 --- a/Testing/ContinuousIntegration/AzurePipelinesLinux.yml +++ b/Testing/ContinuousIntegration/AzurePipelinesLinux.yml @@ -15,17 +15,8 @@ trigger: - Utilities/ITKv5Preparation/* - Utilities/Maintenance/* - Modules/Remote/*.remote.cmake -pr: - paths: - exclude: - - '*.md' - - LICENSE - - NOTICE - - Documentation/* - - Utilities/Debugger/* - - Utilities/ITKv5Preparation/* - - Utilities/Maintenance/* - - Modules/Remote/*.remote.cmake +# WIP: PR trigger disabled to isolate ARMBUILD-Ubuntu-24.04-arm CI +pr: none variables: ExternalDataVersion: 5.4.5 CCACHE_DIR: $(Pipeline.Workspace)/.ccache diff --git a/Testing/ContinuousIntegration/AzurePipelinesLinuxPython.yml b/Testing/ContinuousIntegration/AzurePipelinesLinuxPython.yml index 1e8bfa75917..e2b89fb5685 100644 --- a/Testing/ContinuousIntegration/AzurePipelinesLinuxPython.yml +++ b/Testing/ContinuousIntegration/AzurePipelinesLinuxPython.yml @@ -15,17 +15,8 @@ trigger: - Utilities/ITKv5Preparation/* - Utilities/Maintenance/* - Modules/Remote/*.remote.cmake -pr: - paths: - exclude: - - '*.md' - - LICENSE - - NOTICE - - Documentation/* - - Utilities/Debugger/* - - Utilities/ITKv5Preparation/* - - Utilities/Maintenance/* - - Modules/Remote/*.remote.cmake +# WIP: PR trigger disabled to isolate ARMBUILD-Ubuntu-24.04-arm CI +pr: none variables: ExternalDataVersion: 5.4.5 CCACHE_DIR: $(Pipeline.Workspace)/.ccache diff --git a/Testing/ContinuousIntegration/AzurePipelinesMacOS.yml b/Testing/ContinuousIntegration/AzurePipelinesMacOS.yml index e90d7ea177c..0bcc41fd6e1 100644 --- a/Testing/ContinuousIntegration/AzurePipelinesMacOS.yml +++ b/Testing/ContinuousIntegration/AzurePipelinesMacOS.yml @@ -15,17 +15,8 @@ trigger: - Utilities/ITKv5Preparation/* - Utilities/Maintenance/* - Modules/Remote/*.remote.cmake -pr: - paths: - exclude: - - '*.md' - - LICENSE - - NOTICE - - Documentation/* - - Utilities/Debugger/* - - Utilities/ITKv5Preparation/* - - Utilities/Maintenance/* - - Modules/Remote/*.remote.cmake +# WIP: PR trigger disabled to isolate ARMBUILD-Ubuntu-24.04-arm CI +pr: none variables: ExternalDataVersion: 5.4.5 CCACHE_DIR: $(Pipeline.Workspace)/.ccache diff --git a/Testing/ContinuousIntegration/AzurePipelinesMacOSPython.yml b/Testing/ContinuousIntegration/AzurePipelinesMacOSPython.yml index 26d5744259e..15ce311fb80 100644 --- a/Testing/ContinuousIntegration/AzurePipelinesMacOSPython.yml +++ b/Testing/ContinuousIntegration/AzurePipelinesMacOSPython.yml @@ -15,17 +15,8 @@ trigger: - Utilities/ITKv5Preparation/* - Utilities/Maintenance/* - Modules/Remote/*.remote.cmake -pr: - paths: - exclude: - - '*.md' - - LICENSE - - NOTICE - - Documentation/* - - Utilities/Debugger/* - - Utilities/ITKv5Preparation/* - - Utilities/Maintenance/* - - Modules/Remote/*.remote.cmake +# WIP: PR trigger disabled to isolate ARMBUILD-Ubuntu-24.04-arm CI +pr: none variables: ExternalDataVersion: 5.4.5 CCACHE_DIR: $(Pipeline.Workspace)/.ccache diff --git a/Testing/ContinuousIntegration/AzurePipelinesWindows.yml b/Testing/ContinuousIntegration/AzurePipelinesWindows.yml index 039219ea2df..869ad50b128 100644 --- a/Testing/ContinuousIntegration/AzurePipelinesWindows.yml +++ b/Testing/ContinuousIntegration/AzurePipelinesWindows.yml @@ -15,17 +15,8 @@ trigger: - Utilities/ITKv5Preparation/* - Utilities/Maintenance/* - Modules/Remote/*.remote.cmake -pr: - paths: - exclude: - - '*.md' - - LICENSE - - NOTICE - - Documentation/* - - Utilities/Debugger/* - - Utilities/ITKv5Preparation/* - - Utilities/Maintenance/* - - Modules/Remote/*.remote.cmake +# WIP: PR trigger disabled to isolate ARMBUILD-Ubuntu-24.04-arm CI +pr: none variables: ExternalDataVersion: 5.4.5 CCACHE_DIR: $(Pipeline.Workspace)/.ccache diff --git a/Testing/ContinuousIntegration/AzurePipelinesWindowsPython.yml b/Testing/ContinuousIntegration/AzurePipelinesWindowsPython.yml index 16e26f9fbeb..e5669466c12 100644 --- a/Testing/ContinuousIntegration/AzurePipelinesWindowsPython.yml +++ b/Testing/ContinuousIntegration/AzurePipelinesWindowsPython.yml @@ -15,17 +15,8 @@ trigger: - Utilities/ITKv5Preparation/* - Utilities/Maintenance/* - Modules/Remote/*.remote.cmake -pr: - paths: - exclude: - - '*.md' - - LICENSE - - NOTICE - - Documentation/* - - Utilities/Debugger/* - - Utilities/ITKv5Preparation/* - - Utilities/Maintenance/* - - Modules/Remote/*.remote.cmake +# WIP: PR trigger disabled to isolate ARMBUILD-Ubuntu-24.04-arm CI +pr: none variables: ExternalDataVersion: 5.4.5 CCACHE_DIR: $(Pipeline.Workspace)/.ccache From 3de38028bee7f0ae470d5669e6461c6ca7ed6e0b Mon Sep 17 00:00:00 2001 From: "Hans J. Johnson" Date: Mon, 16 Mar 2026 09:58:39 -0500 Subject: [PATCH 3/3] COMP: Suppress GCC -Wmaybe-uninitialized in Eigen3 SelfadjointMatrixVector GCC on aarch64 (ARM) emits a false-positive -Wmaybe-uninitialized warning at line 224 of SelfadjointMatrixVector.h. The dashboard script (itk_common.cmake) treats any build warning as CI failure. Add targeted GCC diagnostic pragmas to suppress the warning in this file only, scoped to GCC (not Clang) via __GNUC__ / __clang__ guards. Co-Authored-By: Claude Opus 4.6 --- .../Eigen/src/Core/products/SelfadjointMatrixVector.h | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/Modules/ThirdParty/Eigen3/src/itkeigen/Eigen/src/Core/products/SelfadjointMatrixVector.h b/Modules/ThirdParty/Eigen3/src/itkeigen/Eigen/src/Core/products/SelfadjointMatrixVector.h index f7387601ffb..1b74a1d24fe 100644 --- a/Modules/ThirdParty/Eigen3/src/itkeigen/Eigen/src/Core/products/SelfadjointMatrixVector.h +++ b/Modules/ThirdParty/Eigen3/src/itkeigen/Eigen/src/Core/products/SelfadjointMatrixVector.h @@ -13,6 +13,13 @@ // IWYU pragma: private #include "../InternalHeaderCheck.h" +// GCC on ARM (aarch64) emits false-positive -Wmaybe-uninitialized warnings +// in the vectorized selfadjoint matrix-vector product kernel. +#if defined(__GNUC__) && !defined(__clang__) +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wmaybe-uninitialized" +#endif + namespace Eigen { namespace internal { @@ -250,4 +257,8 @@ struct selfadjoint_product_impl { } // end namespace Eigen +#if defined(__GNUC__) && !defined(__clang__) +# pragma GCC diagnostic pop +#endif + #endif // EIGEN_SELFADJOINT_MATRIX_VECTOR_H