From 8d8b425b99baedf6852231fd1b58bf50f1d72bc0 Mon Sep 17 00:00:00 2001 From: "Hans J. Johnson" Date: Tue, 14 Apr 2026 19:17:37 -0500 Subject: [PATCH] COMP: Shorten Windows build root to stay under ITK path limit MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Instead of unconditionally skipping ITK's path length checks, shorten the build directory path on Windows using a directory junction. The repo name is stripped of its "ITK" prefix and truncated to 12 characters (e.g. ITKFixedPointInverseDisplacementField → FixedPointIn), then a junction D:\ → D:\a\ provides a short root for ITK clone, build, and CTest dashboard directories. This keeps ITK's 50-character path validation active as a safety check while ensuring long-named remote module repos can build on Windows CI. Co-Authored-By: Claude Opus 4.6 (1M context) --- .github/workflows/build-test-cxx.yml | 34 ++++++++++++++++++++++++---- 1 file changed, 29 insertions(+), 5 deletions(-) diff --git a/.github/workflows/build-test-cxx.yml b/.github/workflows/build-test-cxx.yml index 89f2061..14172a3 100644 --- a/.github/workflows/build-test-cxx.yml +++ b/.github/workflows/build-test-cxx.yml @@ -76,6 +76,30 @@ jobs: steps: - uses: actions/checkout@v4 + - name: Shorten build root + shell: bash + run: | + # Strip "ITK" prefix and truncate to 12 chars to keep + # Windows build paths under ITK's 50-character limit. + # e.g. ITKFixedPointInverseDisplacementField → FixedPointIn + REPO_NAME="${GITHUB_REPOSITORY##*/}" + SHORT_NAME="${REPO_NAME#ITK}" + SHORT_NAME="${SHORT_NAME:0:12}" + WS_PARENT="$(cd "${GITHUB_WORKSPACE}/.." && pwd)" + echo "ITK_SHORT_NAME=${SHORT_NAME}" >> "$GITHUB_ENV" + echo "ITK_BUILD_ROOT=${WS_PARENT}" >> "$GITHUB_ENV" + + - name: Create short build root junction (Windows) + if: runner.os == 'Windows' + shell: pwsh + run: | + $target = Split-Path $env:GITHUB_WORKSPACE + $shortRoot = "D:\$env:ITK_SHORT_NAME" + if (-not (Test-Path $shortRoot)) { + cmd /c mklink /J $shortRoot $target + } + echo "ITK_BUILD_ROOT=$shortRoot" | Out-File -Append -FilePath $env:GITHUB_ENV + - name: Free Disk Space (Ubuntu) if: matrix.os == 'ubuntu-22.04' uses: jlumbroso/free-disk-space@v1.3.1 @@ -118,7 +142,7 @@ jobs: - name: Download ITK run: | - cd .. + cd "$ITK_BUILD_ROOT" git clone https://github.com/InsightSoftwareConsortium/ITK.git cd ITK git checkout ${{ inputs.itk-git-tag }} @@ -127,7 +151,7 @@ jobs: if: matrix.os != 'windows-2022' shell: bash run: | - cd .. + cd "$ITK_BUILD_ROOT" mkdir ITK-build cd ITK-build MODULE_ARGS="" @@ -152,7 +176,7 @@ jobs: shell: pwsh run: | Set-PSDebug -Trace 1 - cd .. + cd $env:ITK_BUILD_ROOT & "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\Common7\Tools\Launch-VsDevShell.ps1" -Arch amd64 -SkipAutomaticLocation mkdir ITK-build cd ITK-build @@ -187,9 +211,9 @@ jobs: operating_system="${{ matrix.os }}" cat > dashboard.cmake << EOF set(CTEST_SITE "GitHubActions") - file(TO_CMAKE_PATH "\$ENV{GITHUB_WORKSPACE}/.." CTEST_DASHBOARD_ROOT) + file(TO_CMAKE_PATH "\$ENV{ITK_BUILD_ROOT}" CTEST_DASHBOARD_ROOT) file(TO_CMAKE_PATH "\$ENV{GITHUB_WORKSPACE}/" CTEST_SOURCE_DIRECTORY) - file(TO_CMAKE_PATH "\$ENV{GITHUB_WORKSPACE}/../build" CTEST_BINARY_DIRECTORY) + file(TO_CMAKE_PATH "\$ENV{ITK_BUILD_ROOT}/build" CTEST_BINARY_DIRECTORY) set(dashboard_source_name "${GITHUB_REPOSITORY}") if((ENV{GITHUB_REF_NAME} MATCHES "master" OR ENV{GITHUB_REF_NAME} MATCHES "main")) set(branch "-master")