Repository navigation
tmp(ci): probe the three windows images — do NOT merge #2
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # TEMPORARY — delete once the windows image question is settled. | |
| # | |
| # mcpplibs/mcpp-index#385 pinned the windows leg to `windows-2022` because | |
| # `windows-latest` (= windows-2025-vs2026, MSVC STL 14.51) cannot compile | |
| # `huxerui.huxerui`: clang instantiates MSVC STL's vectorized `std::find` for a | |
| # 24-byte type and hits `static_assert(false, "unexpected size")` | |
| # (mcpp-community/mcpp#609). | |
| # | |
| # The pin worked and cost three members: `vulkan`, `eui-neo-vulkan` and | |
| # `vulkan-hpp-module` now fail at RUN time with 0xC0000135 | |
| # (STATUS_DLL_NOT_FOUND). The Vulkan loader is not a Windows component -- it | |
| # arrives with a GPU driver or the SDK -- so whether an image carries | |
| # `vulkan-1.dll` is a property of the image, and 2022 apparently does not. | |
| # | |
| # `windows-2025` was never tried. If its STL is old enough to compile huxerui | |
| # and its image new enough to carry the loader, it settles both. | |
| # | |
| # This workflow answers that in one run instead of a 50-minute full matrix. It | |
| # is a separate FILE on purpose: validate.yml's `paths:` names only itself, so | |
| # adding this triggers no member selection. | |
| name: tmp-windows-image-probe | |
| on: | |
| workflow_dispatch: | |
| pull_request: | |
| paths: [".github/workflows/tmp-windows-image-probe.yml"] | |
| env: | |
| MCPP_VERSION: "2026.9.11.2" | |
| jobs: | |
| probe: | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| image: [windows-2022, windows-2025, windows-latest] | |
| runs-on: ${{ matrix.image }} | |
| name: probe (${{ matrix.image }}) | |
| steps: | |
| - uses: actions/checkout@v4 | |
| # The whole question, asked directly, before any build can muddy it. | |
| - name: What is on this image | |
| shell: pwsh | |
| run: | | |
| Write-Host "label : ${{ matrix.image }}" | |
| Write-Host "ImageOS : $env:ImageOS" | |
| Write-Host "ImageVersion : $env:ImageVersion" | |
| Write-Host "" | |
| Write-Host "--- Vulkan loader (the vulkan members' failure) ---" | |
| foreach ($p in @("$env:SystemRoot\System32\vulkan-1.dll", | |
| "$env:SystemRoot\SysWOW64\vulkan-1.dll")) { | |
| if (Test-Path $p) { | |
| $v = (Get-Item $p).VersionInfo.FileVersion | |
| Write-Host " PRESENT $p ($v)" | |
| } else { | |
| Write-Host " absent $p" | |
| } | |
| } | |
| Write-Host "" | |
| Write-Host "--- MSVC toolsets (huxerui's failure) ---" | |
| Get-ChildItem "C:\Program Files*\Microsoft Visual Studio\*\*\VC\Tools\MSVC\*" -Directory -EA SilentlyContinue | | |
| ForEach-Object { Write-Host " $($_.FullName)" } | |
| - name: Download mcpp | |
| shell: bash | |
| env: | |
| MCPP_ARCHIVE: mcpp-${{ env.MCPP_VERSION }}-windows-x86_64.zip | |
| MCPP_ROOT: mcpp-${{ env.MCPP_VERSION }}-windows-x86_64 | |
| run: | | |
| curl -L -fsS -o "$MCPP_ARCHIVE" \ | |
| "https://github.com/mcpp-community/mcpp/releases/download/v${MCPP_VERSION}/${MCPP_ARCHIVE}" | |
| powershell -NoProfile -Command "Expand-Archive -Force -Path '${MCPP_ARCHIVE}' -DestinationPath '.'" | |
| root="$PWD/$MCPP_ROOT" | |
| mkdir -p "$HOME/.mcpp/registry" | |
| cp -a "$root/registry/." "$HOME/.mcpp/registry/" | |
| echo "MCPP_HOME=$HOME/.mcpp" >> "$GITHUB_ENV" | |
| echo "MCPP=$(cygpath -m "$root/bin/mcpp.exe")" >> "$GITHUB_ENV" | |
| # Both members, both allowed to fail, so every image reports a full row | |
| # rather than stopping at the first red. | |
| - name: huxerui-module (the compile question) | |
| id: hux | |
| continue-on-error: true | |
| shell: bash | |
| env: | |
| MCPP_INDEX_MIRROR: GLOBAL | |
| run: | | |
| "$MCPP" test -p huxerui-module | |
| - name: vulkan (the loader question) | |
| id: vk | |
| continue-on-error: true | |
| shell: bash | |
| env: | |
| MCPP_INDEX_MIRROR: GLOBAL | |
| run: | | |
| "$MCPP" test -p vulkan | |
| - name: Row | |
| shell: bash | |
| run: | | |
| echo "==============================================" | |
| echo " image ${{ matrix.image }}" | |
| echo " huxerui-module ${{ steps.hux.outcome }}" | |
| echo " vulkan ${{ steps.vk.outcome }}" | |
| echo "==============================================" | |
| # THE IMAGE IS NOT THE ONLY AXIS, and the inventory step is what showed it: | |
| # windows-2025 carries 14.29.30133, 14.44.35207 AND 14.51.36231. clang picks | |
| # the newest and dies in it. If it can be pointed at 14.44 instead, the trade | |
| # disappears -- a new image (loader present, vulkan passes) with an old STL | |
| # (no vectorized-find assert, huxerui compiles). | |
| # | |
| # Two ways to ask clang, probed separately because they fail differently: | |
| # the environment a developer prompt exports (`VCToolsInstallDir`), and | |
| # clang's own `/vctoolsdir`. If neither reaches it, the toolset selection is | |
| # mcpp's to make and this stops being fixable from CI. | |
| toolset: | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| how: [vctoolsinstalldir, vctoolsdir-flag] | |
| runs-on: windows-2025 | |
| name: toolset 14.44 via ${{ matrix.how }} | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Point at 14.44 | |
| shell: pwsh | |
| run: | | |
| $root = "C:\Program Files\Microsoft Visual Studio\18\Enterprise\VC\Tools\MSVC\14.44.35207" | |
| if (-not (Test-Path $root)) { throw "14.44 not on this image" } | |
| Write-Host "using $root" | |
| if ("${{ matrix.how }}" -eq "vctoolsinstalldir") { | |
| "VCToolsInstallDir=$root\" | Out-File -Append -Encoding utf8 $env:GITHUB_ENV | |
| } else { | |
| "MCPP_EXTRA_CXXFLAGS=/vctoolsdir `"$root`"" | Out-File -Append -Encoding utf8 $env:GITHUB_ENV | |
| } | |
| - name: Download mcpp | |
| shell: bash | |
| env: | |
| MCPP_ARCHIVE: mcpp-${{ env.MCPP_VERSION }}-windows-x86_64.zip | |
| MCPP_ROOT: mcpp-${{ env.MCPP_VERSION }}-windows-x86_64 | |
| run: | | |
| curl -L -fsS -o "$MCPP_ARCHIVE" \ | |
| "https://github.com/mcpp-community/mcpp/releases/download/v${MCPP_VERSION}/${MCPP_ARCHIVE}" | |
| powershell -NoProfile -Command "Expand-Archive -Force -Path '${MCPP_ARCHIVE}' -DestinationPath '.'" | |
| root="$PWD/$MCPP_ROOT" | |
| mkdir -p "$HOME/.mcpp/registry" | |
| cp -a "$root/registry/." "$HOME/.mcpp/registry/" | |
| echo "MCPP_HOME=$HOME/.mcpp" >> "$GITHUB_ENV" | |
| echo "MCPP=$(cygpath -m "$root/bin/mcpp.exe")" >> "$GITHUB_ENV" | |
| - name: huxerui-module | |
| id: hux | |
| continue-on-error: true | |
| shell: bash | |
| env: | |
| MCPP_INDEX_MIRROR: GLOBAL | |
| run: | | |
| "$MCPP" test -p huxerui-module | |
| # Which STL the compile actually reached, whatever the outcome -- a pass | |
| # for the wrong reason and a pass for the right one look identical here | |
| # otherwise. | |
| - name: Which STL did it use | |
| if: always() | |
| shell: bash | |
| run: | | |
| echo "how ${{ matrix.how }}" | |
| echo "huxerui-module ${{ steps.hux.outcome }}" | |
| grep -rhoE "MSVC\\\\1[0-9]\\.[0-9]+\\.[0-9]+" tests/examples/huxerui-module/target 2>/dev/null | sort -u | head -3 || true |