From: Viktor Szakats Date: Thu, 28 Aug 2025 20:36:47 +0000 (+0200) Subject: GHA/windows: fix perl 5.40.3 bump fallout with custom-built modules X-Git-Tag: curl-8_16_0~64 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=5bb49a485c1d34a088e37c18035897364f961559;p=thirdparty%2Fcurl.git GHA/windows: fix perl 5.40.3 bump fallout with custom-built modules Perl got bumped from 5.38.4 to 5.40.3. The new version crashes when loading the `Win32::Process*` modules built and cached in CI. The build job uses Perl 5.38.4. To avoid the crash, include the Perl version (hashed) in the cache key, so that it's only loaded when the Perl version matches. This solution is imperfect, because some of the jobs will not use the Perl modules in transition periods, when different jobs use different Perl versions. Anyway, can't think of a better one for now. Another option is to drop the effort with these modules. After all they did not help with crashes and hangs, nor with performance. While adding quite a bit of CI complexity. Also: - test early if the modules load and log the result. Follow-up to 52775a7fb4ba63d66d60067dea4a5293fb7c55a1 #18296 Closes #18425 --- diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml index e285eaafa7..4c7683132e 100644 --- a/.github/workflows/windows.yml +++ b/.github/workflows/windows.yml @@ -53,6 +53,16 @@ jobs: matrix: image: [windows-2022, windows-11-arm] steps: + - name: 'install build prereqs' + if: ${{ steps.cache-perl-win32-pkgs.outputs.cache-hit != 'true' }} + uses: msys2/setup-msys2@40677d36a502eb2cf0fb808cc9dec31bf6152638 # v2 + with: + msystem: msys + install: gcc make + + - name: 'perl version' + run: perl --version | tee "$GITHUB_WORKSPACE"/perlversion + - name: 'cache perl packages' uses: actions/cache@0400d5f644dc74513175e3cd8d07132dd4860809 # v4 id: cache-perl-win32-pkgs @@ -60,14 +70,7 @@ jobs: cache-name: cache-perl-win32-pkgs with: path: C:\perl-win32-pkgs - key: ${{ runner.os }}-${{ runner.arch }}-build-${{ env.cache-name }} - - - name: 'install build prereqs' - if: ${{ steps.cache-perl-win32-pkgs.outputs.cache-hit != 'true' }} - uses: msys2/setup-msys2@40677d36a502eb2cf0fb808cc9dec31bf6152638 # v2 - with: - msystem: msys - install: gcc make + key: ${{ runner.os }}-${{ runner.arch }}-build-${{ env.cache-name }}-${{ hashFiles('perlversion') }} - name: 'build perl packages' if: ${{ steps.cache-perl-win32-pkgs.outputs.cache-hit != 'true' }} @@ -422,6 +425,14 @@ jobs: mv bld/tests/unit/.libs/*.exe bld/tests/unit || true fi + - name: 'install test prereqs' + if: ${{ matrix.tflags != 'skipall' && matrix.tflags != 'skiprun' }} + timeout-minutes: 5 + run: | + /usr/bin/pacman --noconfirm --noprogressbar --sync --needed openssh + /c/ProgramData/chocolatey/choco.exe install --yes --no-progress --limit-output --timeout 180 --force stunnel || true + perl --version | tee "$GITHUB_WORKSPACE"/perlversion + - name: 'cache perl packages' if: ${{ matrix.tflags != 'skipall' && matrix.tflags != 'skiprun' && matrix.sys != 'msys' }} uses: actions/cache@0400d5f644dc74513175e3cd8d07132dd4860809 # v4 @@ -430,33 +441,28 @@ jobs: cache-name: cache-perl-win32-pkgs with: path: C:\perl-win32-pkgs - key: ${{ runner.os }}-${{ runner.arch }}-build-${{ env.cache-name }} + key: ${{ runner.os }}-${{ runner.arch }}-build-${{ env.cache-name }}-${{ hashFiles('perlversion') }} - name: 'install test prereqs perl' if: ${{ matrix.tflags != 'skipall' && matrix.tflags != 'skiprun' }} timeout-minutes: 5 run: &perl-win32-pkgs-install | + perl --version if [ -d /c/perl-win32-pkgs ]; then - cd /c/perl-win32-pkgs - cd Win32-Process-0.17 + pushd /c/perl-win32-pkgs + pushd Win32-Process-0.17 install -D blib/arch/auto/Win32/Process/Process.dll /usr/lib/perl5/site_perl/auto/Win32/Process/Process.dll install -D blib/lib/Win32/Process.pm /usr/lib/perl5/site_perl/Win32/Process.pm - cd .. - cd Win32-Process-List-0.09 + popd + pushd Win32-Process-List-0.09 install -D blib/arch/auto/Win32/Process/List/List.dll /usr/lib/perl5/site_perl/auto/Win32/Process/List/List.dll install -D blib/lib/auto/Win32/Process/List/autosplit.ix /usr/lib/perl5/site_perl/auto/Win32/Process/List/autosplit.ix install -D blib/lib/Win32/Process/List.pm /usr/lib/perl5/site_perl/Win32/Process/List.pm install -D blib/lib/Win32/Process/processes.pl /usr/lib/perl5/site_perl/Win32/Process/processes.pl - cd .. - cd .. + popd + popd fi - - - name: 'install test prereqs' - if: ${{ matrix.tflags != 'skipall' && matrix.tflags != 'skiprun' }} - timeout-minutes: 5 - run: | - /usr/bin/pacman --noconfirm --noprogressbar --sync --needed openssh - /c/ProgramData/chocolatey/choco.exe install --yes --no-progress --limit-output --timeout 180 --force stunnel || true + perl -MWin32::Process -MWin32::Process::List -e 1 && echo '! Modules loading OK.' || echo '! Failed to load modules.' - name: 'run tests' if: ${{ matrix.tflags != 'skipall' && matrix.tflags != 'skiprun' }} @@ -649,6 +655,14 @@ jobs: PATH="/d/my-cache/${MATRIX_DIR}/bin:$PATH" cmake --build bld --target testdeps + - name: 'install test prereqs' + if: ${{ matrix.tflags != 'skipall' && matrix.tflags != 'skiprun' }} + timeout-minutes: 5 + run: | + /c/ProgramData/chocolatey/choco.exe install --yes --no-progress --limit-output --timeout 180 --force stunnel || true + python3 -m pip --disable-pip-version-check --no-input --no-cache-dir install --progress-bar off --prefer-binary impacket + perl --version | tee "$GITHUB_WORKSPACE"/perlversion + - name: 'cache perl packages' if: ${{ matrix.tflags != 'skipall' && matrix.tflags != 'skiprun' }} uses: actions/cache@0400d5f644dc74513175e3cd8d07132dd4860809 # v4 @@ -657,20 +671,13 @@ jobs: cache-name: cache-perl-win32-pkgs with: path: C:\perl-win32-pkgs - key: ${{ runner.os }}-${{ runner.arch }}-build-${{ env.cache-name }} + key: ${{ runner.os }}-${{ runner.arch }}-build-${{ env.cache-name }}-${{ hashFiles('perlversion') }} - name: 'install test prereqs perl' if: ${{ matrix.tflags != 'skipall' && matrix.tflags != 'skiprun' }} timeout-minutes: 5 run: *perl-win32-pkgs-install - - name: 'install test prereqs' - if: ${{ matrix.tflags != 'skipall' && matrix.tflags != 'skiprun' }} - timeout-minutes: 5 - run: | - /c/ProgramData/chocolatey/choco.exe install --yes --no-progress --limit-output --timeout 180 --force stunnel || true - python3 -m pip --disable-pip-version-check --no-input --no-cache-dir install --progress-bar off --prefer-binary impacket - - name: 'run tests' if: ${{ matrix.tflags != 'skipall' && matrix.tflags != 'skiprun' }} timeout-minutes: 10 @@ -1028,21 +1035,6 @@ jobs: timeout-minutes: 10 run: cmake --build bld --config "${MATRIX_TYPE}" --parallel 5 --target testdeps - - name: 'cache perl packages' - if: ${{ matrix.tflags != 'skipall' && matrix.tflags != 'skiprun' }} - uses: actions/cache@0400d5f644dc74513175e3cd8d07132dd4860809 # v4 - id: cache-perl-win32-pkgs - env: - cache-name: cache-perl-win32-pkgs - with: - path: C:\perl-win32-pkgs - key: ${{ runner.os }}-${{ runner.arch }}-build-${{ env.cache-name }} - - - name: 'install test prereqs perl' - if: ${{ matrix.tflags != 'skipall' && matrix.tflags != 'skiprun' }} - timeout-minutes: 5 - run: *perl-win32-pkgs-install - - name: 'install test prereqs' if: ${{ matrix.tflags != 'skipall' && matrix.tflags != 'skiprun' }} timeout-minutes: 5 @@ -1066,6 +1058,22 @@ jobs: if [ "${MATRIX_IMAGE}" != 'windows-11-arm' ]; then # save 30-60 seconds, to counteract the slower test run step python3 -m pip --disable-pip-version-check --no-input --no-cache-dir install --progress-bar off --prefer-binary impacket fi + perl --version | tee "$GITHUB_WORKSPACE"/perlversion + + - name: 'cache perl packages' + if: ${{ matrix.tflags != 'skipall' && matrix.tflags != 'skiprun' }} + uses: actions/cache@0400d5f644dc74513175e3cd8d07132dd4860809 # v4 + id: cache-perl-win32-pkgs + env: + cache-name: cache-perl-win32-pkgs + with: + path: C:\perl-win32-pkgs + key: ${{ runner.os }}-${{ runner.arch }}-build-${{ env.cache-name }}-${{ hashFiles('perlversion') }} + + - name: 'install test prereqs perl' + if: ${{ matrix.tflags != 'skipall' && matrix.tflags != 'skiprun' }} + timeout-minutes: 5 + run: *perl-win32-pkgs-install - name: 'run tests' if: ${{ matrix.tflags != 'skipall' && matrix.tflags != 'skiprun' }}