Skip to content

ci(win-hw-wim): commit baked-WIM release notes to sboms/ like the other Windows images - #859

Merged
markcor merged 1 commit into
mainfrom
win-hw-wim-sbom
Aug 11, 2026
Merged

ci(win-hw-wim): commit baked-WIM release notes to sboms/ like the other Windows images#859
markcor merged 1 commit into
mainfrom
win-hw-wim-sbom

Conversation

@markcor

@markcor markcor commented Aug 11, 2026

Copy link
Copy Markdown
Contributor

What

Gives the Windows HW WIM bake the same release-notes/SBOM flow every other Windows image build has. Two pieces live here on main:

  • an Upload Release Notes Artifact step in the build job
  • an sbom job calling the shared ./.github/workflows/upload-release-notes.yml

The generation half is on nuc-wim-pipeline (73afd13).

Why

Baked WIMs shipped with no inventory while every Azure gallery image gets one committed to sboms/. This closes that gap using the existing mechanism rather than a parallel one.

How it mirrors the gallery images

Step azure.pkr.hcl win-hw-wim.pkr.hcl
Module into guest file provisioner → PS module path same
Generate Set-ReleaseNotes same
Retrieve file provisioner, direction = download same
Name <config>-<version>.md same (<image>-<buildid>.md)
Store upload-release-notes.ymlsboms/ on main same

Because Packer runs on the ephemeral build VM rather than the runner, the notes are published to blob (_status/sbom/, plus a copy beside the WIM in captured/WIMs/<image>/ as provenance) and the kickoff pulls them down, exporting the filename as sbom_file — the same shape as sharedimageversion in sig-*.yml. The build id is generated by New-WinHwWim, so it isn't knowable from the workflow.

Note for reviewers: a shared-module fix was required

Get-GenericWorkerVersion, Get-LiveLogVersion, Get-WorkerRunnerVersion and Get-ProxyVersion all Start-Process their binary with no existence check. Start-Process on a missing path throws a terminating error, which Set-ReleaseNotes' trap rethrows.

The win-hw-wim bake role excludes windows_worker_runner by design — generic-worker and worker-runner are installed at deploy time — so all four would have thrown and failed the build immediately before Sysprep, losing a ~2h bake. They now return nothing when the binary is absent, and Show-TaskclusterBinaries drops the blank rows that would otherwise appear.

No behaviour change for the gallery images, where those binaries are present. Verified the missing-binary path: 2-of-4 present gives a clean 2-row table, 0-of-4 gives an empty section rather than an error. That fix rides on the pipeline branch and reaches main with PR #830.

Coverage caveat

The notes inventory what the WIM ships, so software installed at deploy time (the Taskcluster binaries) is absent by design. Also inherited from the shared function: output is UTF-16LE markdown, not a machine-readable SBOM — noted, not changed here.

Testing

Not yet exercised end-to-end; the next win11-24h2-hw bake is the first real run. Both halves are best-effort on the build side — a good WIM is never failed over its release notes.

🤖 Generated with Claude Code

…er images

Adds the two pieces that live on main: an upload-artifact step for the release
notes the bake now generates, and an sbom job calling the same reusable
upload-release-notes.yml every other Windows image build uses. Baked WIMs land in
sboms/ alongside the gallery images instead of shipping with no inventory.

The kickoff on the pipeline branch exports the filename as sbom_file, mirroring
how sig-*.yml exports sharedimageversion, because the build id is generated by
New-WinHwWim and isn't knowable from here.

No `if: always()` on the sbom job, unlike the parallel-build workflows: a failed
bake uploads no artifact and the reusable workflow errors on an empty download,
which would report the same failure twice.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@markcor
markcor merged commit f550c0d into main Aug 11, 2026
3 checks passed
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.

1 participant