Skip to content

[CI] Install Windows 11 SDK 10.0.22621 for 32-bit ARM.#1964

Merged
Dead2 merged 1 commit intozlib-ng:developfrom
mtl1979:arm32sdk
Sep 9, 2025
Merged

[CI] Install Windows 11 SDK 10.0.22621 for 32-bit ARM.#1964
Dead2 merged 1 commit intozlib-ng:developfrom
mtl1979:arm32sdk

Conversation

@mtl1979
Copy link
Copy Markdown
Collaborator

@mtl1979 mtl1979 commented Sep 6, 2025

  • Windows Server 2025 runner doesn't support targeting 32-bit ARM anymore, so install older SDK manually

Summary by CodeRabbit

  • Chores
    • Added a CI step to install the Windows 11 SDK for MSVC ARM jobs, gated to ARM-specific runs to improve ARM Windows build readiness and reliability.
    • Ensures required SDK components are present during ARM CI, reducing build failures and setup friction.
    • No changes to app features or user-facing behavior.

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai bot commented Sep 6, 2025

Walkthrough

Adds a conditional GitHub Actions step to install the Windows 11 SDK 10.0.22621.2428 for matrix entries containing "MSVC ARM " in .github/workflows/cmake.yml; it downloads, unblocks, and runs the SDK installer silently; no other workflow steps changed.

Changes

Cohort / File(s) Change summary
CI workflow: Windows SDK (ARM)
.github/workflows/cmake.yml
Inserted a conditional step "Install Windows 11 SDK (ARM)" that runs when contains(matrix.name, 'MSVC ARM '). The step downloads sdksetup.exe (LinkId 2250105) via PowerShell, Unblock-File on it, and executes the installer with silent flags (/q, /norestart, /ceip off). Placed after the Visual Studio toolset v141 (Windows) step and before macOS package installation. No other workflow steps were modified.

Sequence Diagram(s)

sequenceDiagram
  autonumber
  actor Dev as Developer
  participant GH as GitHub Actions
  participant Job as Matrix Job (CMake)
  participant PS as PowerShell

  Dev->>GH: Push/PR triggers workflow
  GH->>Job: Start matrix build
  alt matrix.name contains "MSVC ARM "
    Job->>PS: Run "Install Windows 11 SDK (ARM)" step
    PS->>PS: Invoke-WebRequest (LinkId 2250105) -> save sdksetup.exe
    PS->>PS: Unblock-File sdksetup.exe
    PS->>PS: Execute sdksetup.exe (/q /norestart /ceip off)
    Note right of PS: Installs Windows 11 SDK 10.0.22621.2428 silently
  else other matrix entries
    Note over Job: Step skipped
  end
  Job->>GH: Continue remaining build steps
Loading

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~10 minutes

Possibly related PRs

Suggested labels

Continuous Integration

Suggested reviewers

  • nmoinvaz
  • Dead2

📜 Recent review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 9f99966 and 7543c32.

📒 Files selected for processing (1)
  • .github/workflows/cmake.yml (1 hunks)
🚧 Files skipped from review as they are similar to previous changes (1)
  • .github/workflows/cmake.yml
✨ Finishing Touches
🧪 Generate unit tests
  • Create PR with unit tests
  • Post copyable unit tests in a comment

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🧹 Nitpick comments (3)
.github/workflows/cmake.yml (3)

715-723: Pin CMake to the SDK you install (avoid 22621/26100 mismatch).

The ARM job still generates with -A ARM,version=10.0.22621.0 (Line 551), but this step installs SDK 10.0.26100.1742. If 22621 lacks ARM32 libs, CMake may select it (or fail if absent). Recommend pinning the ARM job to 10.0.26100 explicitly to ensure it uses the newly installed SDK.

Example update outside this hunk:

# In matrix entry "Windows MSVC ARM No Test"
cmake-args: -A ARM,version=10.0.26100.0 -DCMAKE_SYSTEM_VERSION=10.0.26100.0

716-716: Tighten the condition to match ARM (not ARM64) by toolchain, not name.

Relying on the job name is brittle. Key off the CMake generator argument and ensure we exclude ARM64.

Apply this diff:

-      if: contains(matrix.name, 'MSVC ARM ')
+      if: runner.os == 'Windows' && contains(matrix.cmake-args, '-A ARM,')

719-721: Optional: verify download integrity.

Consider validating the SDK installer hash to guard against transient or tampered downloads.

Example snippet (fill the expected SHA-256):

$ExpectedSha256 = '<put-sdksetup.exe-sha256-here>'
$ActualSha256 = (Get-FileHash .\sdksetup.exe -Algorithm SHA256).Hash
if ($ActualSha256 -ne $ExpectedSha256) { throw "SDK installer SHA-256 mismatch. Expected $ExpectedSha256, got $ActualSha256" }
📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 83a84fa and a075ca8.

📒 Files selected for processing (1)
  • .github/workflows/cmake.yml (1 hunks)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (120)
  • GitHub Check: macOS Clang Native Instructions (ARM64)
  • GitHub Check: macOS GCC UBSAN
  • GitHub Check: macOS Clang ASAN (ARM64)
  • GitHub Check: Windows MSVC ARM No Test
  • GitHub Check: Windows ClangCl Win32
  • GitHub Check: EL9 Clang S390X DFLTCC MSAN
  • GitHub Check: Ubuntu GCC AARCH64 Compat No Opt UBSAN
  • GitHub Check: Ubuntu GCC AARCH64 No NEON UBSAN
  • GitHub Check: Ubuntu GCC Native Instructions (AVX)
  • GitHub Check: Ubuntu GCC 14 LoongArch64
  • GitHub Check: macOS GCC
  • GitHub Check: macOS GCC Symbol Prefix & Compat
  • GitHub Check: macOS Clang Native Instructions (ARM64)
  • GitHub Check: macOS GCC UBSAN
  • GitHub Check: macOS Clang ASAN (ARM64)
  • GitHub Check: Windows MSVC ARM No Test
  • GitHub Check: Windows ClangCl Win32
  • GitHub Check: EL9 Clang S390X DFLTCC MSAN
  • GitHub Check: Ubuntu GCC AARCH64 Compat No Opt UBSAN
  • GitHub Check: Ubuntu GCC AARCH64 No NEON UBSAN
  • GitHub Check: Ubuntu GCC Native Instructions (AVX)
  • GitHub Check: Ubuntu GCC 14 LoongArch64
  • GitHub Check: macOS GCC
  • GitHub Check: macOS GCC Symbol Prefix & Compat
  • GitHub Check: macOS Clang Native Instructions (ARM64)
  • GitHub Check: macOS GCC UBSAN
  • GitHub Check: macOS Clang ASAN (ARM64)
  • GitHub Check: Windows MSVC ARM No Test
  • GitHub Check: Windows ClangCl Win32
  • GitHub Check: EL9 Clang S390X DFLTCC MSAN
  • GitHub Check: Ubuntu GCC AARCH64 Compat No Opt UBSAN
  • GitHub Check: Ubuntu GCC AARCH64 No NEON UBSAN
  • GitHub Check: Ubuntu GCC Native Instructions (AVX)
  • GitHub Check: Ubuntu GCC 14 LoongArch64
  • GitHub Check: macOS GCC
  • GitHub Check: macOS GCC Symbol Prefix & Compat
  • GitHub Check: macOS Clang Native Instructions (ARM64)
  • GitHub Check: macOS GCC UBSAN
  • GitHub Check: macOS Clang ASAN (ARM64)
  • GitHub Check: Windows MSVC ARM No Test
  • GitHub Check: Windows ClangCl Win32
  • GitHub Check: EL9 Clang S390X DFLTCC MSAN
  • GitHub Check: Ubuntu GCC AARCH64 Compat No Opt UBSAN
  • GitHub Check: Ubuntu GCC AARCH64 No NEON UBSAN
  • GitHub Check: Ubuntu GCC Native Instructions (AVX)
  • GitHub Check: Ubuntu GCC 14 LoongArch64
  • GitHub Check: macOS GCC
  • GitHub Check: macOS GCC Symbol Prefix & Compat
  • GitHub Check: macOS Clang Native Instructions (ARM64)
  • GitHub Check: macOS GCC UBSAN
  • GitHub Check: macOS Clang ASAN (ARM64)
  • GitHub Check: Windows MSVC ARM No Test
  • GitHub Check: Windows ClangCl Win32
  • GitHub Check: EL9 Clang S390X DFLTCC MSAN
  • GitHub Check: Ubuntu GCC AARCH64 Compat No Opt UBSAN
  • GitHub Check: Ubuntu GCC AARCH64 No NEON UBSAN
  • GitHub Check: Ubuntu GCC Native Instructions (AVX)
  • GitHub Check: Ubuntu GCC 14 LoongArch64
  • GitHub Check: macOS GCC
  • GitHub Check: macOS GCC Symbol Prefix & Compat
  • GitHub Check: macOS Clang Native Instructions (ARM64)
  • GitHub Check: macOS GCC UBSAN
  • GitHub Check: macOS Clang ASAN (ARM64)
  • GitHub Check: Windows MSVC ARM No Test
  • GitHub Check: Windows ClangCl Win32
  • GitHub Check: EL9 Clang S390X DFLTCC MSAN
  • GitHub Check: Ubuntu GCC AARCH64 Compat No Opt UBSAN
  • GitHub Check: Ubuntu GCC AARCH64 No NEON UBSAN
  • GitHub Check: Ubuntu GCC Native Instructions (AVX)
  • GitHub Check: Ubuntu GCC 14 LoongArch64
  • GitHub Check: macOS GCC
  • GitHub Check: macOS GCC Symbol Prefix & Compat
  • GitHub Check: macOS Clang Native Instructions (ARM64)
  • GitHub Check: macOS GCC UBSAN
  • GitHub Check: macOS Clang ASAN (ARM64)
  • GitHub Check: Windows MSVC ARM No Test
  • GitHub Check: Windows ClangCl Win32
  • GitHub Check: EL9 Clang S390X DFLTCC MSAN
  • GitHub Check: Ubuntu GCC AARCH64 Compat No Opt UBSAN
  • GitHub Check: Ubuntu GCC AARCH64 No NEON UBSAN
  • GitHub Check: Ubuntu GCC Native Instructions (AVX)
  • GitHub Check: Ubuntu GCC 14 LoongArch64
  • GitHub Check: macOS GCC
  • GitHub Check: macOS GCC Symbol Prefix & Compat
  • GitHub Check: macOS Clang Native Instructions (ARM64)
  • GitHub Check: macOS GCC UBSAN
  • GitHub Check: macOS Clang ASAN (ARM64)
  • GitHub Check: Windows MSVC ARM No Test
  • GitHub Check: Windows ClangCl Win32
  • GitHub Check: EL9 Clang S390X DFLTCC MSAN
  • GitHub Check: Ubuntu GCC AARCH64 Compat No Opt UBSAN
  • GitHub Check: Ubuntu GCC AARCH64 No NEON UBSAN
  • GitHub Check: Ubuntu GCC Native Instructions (AVX)
  • GitHub Check: Ubuntu GCC 14 LoongArch64
  • GitHub Check: macOS GCC
  • GitHub Check: macOS GCC Symbol Prefix & Compat
  • GitHub Check: macOS Clang Native Instructions (ARM64)
  • GitHub Check: macOS GCC UBSAN
  • GitHub Check: macOS Clang ASAN (ARM64)
  • GitHub Check: Windows MSVC ARM No Test
  • GitHub Check: Windows ClangCl Win32
  • GitHub Check: EL9 Clang S390X DFLTCC MSAN
  • GitHub Check: Ubuntu GCC AARCH64 Compat No Opt UBSAN
  • GitHub Check: Ubuntu GCC AARCH64 No NEON UBSAN
  • GitHub Check: Ubuntu GCC Native Instructions (AVX)
  • GitHub Check: Ubuntu GCC 14 LoongArch64
  • GitHub Check: macOS GCC
  • GitHub Check: macOS GCC Symbol Prefix & Compat
  • GitHub Check: macOS Clang Native Instructions (ARM64)
  • GitHub Check: macOS GCC UBSAN
  • GitHub Check: macOS Clang ASAN (ARM64)
  • GitHub Check: Windows MSVC ARM No Test
  • GitHub Check: Windows ClangCl Win32
  • GitHub Check: EL9 Clang S390X DFLTCC MSAN
  • GitHub Check: Ubuntu GCC AARCH64 Compat No Opt UBSAN
  • GitHub Check: Ubuntu GCC AARCH64 No NEON UBSAN
  • GitHub Check: Ubuntu GCC Native Instructions (AVX)
  • GitHub Check: Ubuntu GCC 14 LoongArch64
  • GitHub Check: macOS GCC
  • GitHub Check: macOS GCC Symbol Prefix & Compat

Comment on lines +715 to +723
- name: Install Windows 11 SDK (ARM)
if: contains(matrix.name, 'MSVC ARM ')
run: |
# Windows 11 SDK (10.0.26100.1742)
# https://developer.microsoft.com/en-us/windows/downloads/sdk-archive/index-legacy
Invoke-WebRequest -Method Get -Uri https://go.microsoft.com/fwlink/p/?LinkId=2286561 -OutFile sdksetup.exe -UseBasicParsing
Unblock-File sdksetup.exe
Start-Process -Wait sdksetup.exe -ArgumentList "/q", "/norestart", "/ceip off", "/features OptionId.WindowsSoftwareDevelopmentKit"

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion

Fail fast if the SDK installer fails (capture and check ExitCode).

Start-Process -Wait won't fail the step on a non-zero installer exit code. Capture the process and assert on ExitCode so CI surfaces installation failures.

Apply this diff within this step:

-        Start-Process -Wait sdksetup.exe -ArgumentList "/q", "/norestart", "/ceip off", "/features OptionId.WindowsSoftwareDevelopmentKit"
+        $args = @("/q","/norestart","/ceip off","/features","OptionId.WindowsSoftwareDevelopmentKit")
+        $process = Start-Process -FilePath .\sdksetup.exe -ArgumentList $args -Wait -PassThru -WindowStyle Hidden
+        if ($process.ExitCode -ne 0) { throw "Windows SDK installer failed with exit code $($process.ExitCode)" }
🤖 Prompt for AI Agents
.github/workflows/cmake.yml around lines 715 to 723: the Windows 11 SDK
installer step uses Start-Process -Wait which does not fail the job on a
non-zero installer exit code; update the step to start the process, wait for it
to finish, capture its ExitCode and explicitly fail the step when ExitCode is
non-zero (for example throw or exit with the captured code) so CI surfaces
installation failures.

@codecov
Copy link
Copy Markdown

codecov bot commented Sep 6, 2025

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 81.61%. Comparing base (83a84fa) to head (7543c32).
⚠️ Report is 4 commits behind head on develop.

Additional details and impacted files
@@             Coverage Diff             @@
##           develop    #1964      +/-   ##
===========================================
+ Coverage    81.59%   81.61%   +0.02%     
===========================================
  Files          163      163              
  Lines        14073    14073              
  Branches      3164     3165       +1     
===========================================
+ Hits         11483    11486       +3     
+ Misses        1608     1603       -5     
- Partials       982      984       +2     

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@mtl1979 mtl1979 changed the title [CI] Install Windows 11 SDK 10.0.26100 for 32-bit ARM. [CI] Install Windows 11 SDK 10.0.22621 for 32-bit ARM. Sep 6, 2025
@mtl1979 mtl1979 force-pushed the arm32sdk branch 2 times, most recently from 7964bce to 9f99966 Compare September 6, 2025 18:34
@Dead2 Dead2 merged commit 29d9601 into zlib-ng:develop Sep 9, 2025
145 of 150 checks passed
@Dead2 Dead2 mentioned this pull request Nov 5, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants