Skip to content
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
174 changes: 174 additions & 0 deletions .github/workflows/tmp-windows-image-probe.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,174 @@
# 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
Loading