[publish images] and normal CI expect 'windows-x64-2019-v13' but
machine.mjs was publishing as 'windows-x64-2019-build-v13'.
Now image_name is passed directly to Packer, matching ci.mjs:
- publish-image: windows-x64-2019-v13
- create-image: windows-x64-2019-build-37194
[build images]
Registry key clearing alone doesn't satisfy spopk.dll's reboot
check. A real reboot between VS install and Sysprep clears the
Component Based Servicing pending state.
[build images]
VS Build Tools installer and Windows Updates leave RebootPending
and PendingFileRenameOperations flags that cause Sysprep validation
to fail with 'one or more Windows updates that require a reboot'.
[build images]
$LASTEXITCODE was polluted by cygwin setup failure. Clear it before
sysprep to prevent false positive exit code check. The timeout-based
polling loop catches real sysprep failures.
[build images]
Replaces Azure Run Command approach with Packer for Windows CI images.
Packer connects via WinRM (native, no x64 emulation on ARM64),
handles sysprep automatically, and provides full output logging.
- scripts/packer/windows-x64.pkr.hcl: Windows Server 2019 x64
- scripts/packer/windows-arm64.pkr.hcl: Windows 11 ARM64 (direct to gallery)
- scripts/packer/variables.pkr.hcl: shared variables
- machine.mjs: routes Azure Windows builds through Packer
[build images]