Repository navigation
ci: add the manual Windows prerelease workflow - #550
Merged
Merged
Conversation
Add .github/workflows/release.yml as the Wave entry "Windows 0.1.0-alpha Prereleases" authorizes. It starts only by hand and refuses any ref but main-v2, and splits the token by job: - build (contents: read) restores in locked mode with the pinned SDK, runs the Windows scenarios without WindowsHostTiming, runs package.ps1 without its development switches, and records the runner image and native build chain in build-info.json and the run summary; - attest (id-token and attestations: write) attests both zips; - draft (contents: write) verifies the checksums and commit, refuses an existing tag or release, and creates a draft prerelease targeting the built commit with both zips and their checksums. Artifacts between jobs expire after one day. Actions are pinned by SHA. Refs: #506
- Project posture: unsupported 0.1.0-alpha prereleases are published. - Registry: the tag scheme v<version> and the symbols archive. - Windows design: a Release Workflow section, and the build-chain sentence now allows the owner-accepted floating hosted chain with recorded versions. - Validation strategy and user stories: the primary journey blocks the first supported, non-prerelease release; the release run's scenario filter and claim limits. - Threat model: the release workflow's per-job token and attestation in the build and CI-token row; the .tm7 is unchanged. - Controls: a windows-release-workflow control at the release point. - READMEs and CONTRIBUTING: prereleases and the shared MISE_VERSION. - Convert the completed host test record, its record family and its index row into completed evidence. Refs: #506, #482
- Keep "must pin" as the general build-chain rule and state the owner's floating-chain decision as the 0.1.0-alpha exception only; drop the unrequested local-build rule (RS-W1). - Say that only the main-v2 copy of the workflow refuses other refs, and have the release review check the run's and attestation's source ref and workflow, in the design, threat model and control (RS-W2). - Describe prereleases as ones that may be published (RS-W3). - Find Visual Studio with vswhere -prerelease as ILCompiler does, and label the recorded chain as the installed chain the linker is inferred to use (RE-W1). - Treat only HTTP 404 as an absent tag or release, fail on any other error, and also refuse an existing draft for the version. Refs: #506
The step that refuses an existing version ran under GitHub's default bash -e without pipefail, so a failed paginated draft lookup counted as zero drafts. Run it with shell: bash (-eo pipefail), and name the draft refusal in the control's invariant. Refs: #506
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
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Implements delegated items 1 and 2 of the Delivery Wave entry "Windows 0.1.0-alpha Prereleases" (merged in #549): the manual release workflow and the record updates. No prerelease is created by this PR; the first run happens after merge, followed by the item 3 release review and the owner's publication.
Authorization and Governing Records
main-v2(2e0f736), with the owner decisions recorded in #549's disposition comment.Scope and Non-Goals
.github/workflows/release.yml:workflow_dispatchonly; refuses any ref butrefs/heads/main-v2;permissions: {}at the top and per-job tokens (buildcontents: read; attestid-token: write,attestations: write; draftcontents: write); actions pinned by SHA (checkout and mise-action as incheck.yml; upload-artifact v7.0.2, download-artifact v8.0.2, attest-build-provenance v4.2.2); no tool cache restored; scenarios withTestCategory!=WindowsHostTiming;package.ps1without development switches;build-info.jsonwith runner image, .NET SDK, Visual Studio, MSVC,link.exeand Windows SDK versions; artifacts withretention-days: 1; draft verifies checksums and the recorded commit, refuses an existing tag or release, and createsv<version>targeting the built commit with both zips and.sha256files..tm7unchanged), awindows-release-workflowcontrol at thereleaseexecution point, READMEs,CONTRIBUTING.md, and conversion of the completed host-test record, family (portable-package-host-test-evidence) and index row.Record-System Impact
Changed families: workflows, project policy, operational-identity registry, design records, validation strategy, product user stories, threat model, control catalog (new control), record-family catalog (family renamed and its concern and consumers updated), research evidence, contributor interface, portal and landing.
Evidence and Reasoning
actions/attestdocumentation (id-token: writefor the Sigstore OIDC token,attestations: writeto persist);artifact-metadata: writeis needed only for registry storage records, which this workflow does not create.vswhere,Microsoft.VCToolsVersion.default.txt,link.exe's version resource and the Windows KitsLibdirectories; it records all installed SDK versions because MSBuild selects the newest by default.Identity and Security Effects
No product change. The workflow's write permissions are split per job; no job persists checkout credentials.
Validation
actionlintandhk check --allpassed.workflow_dispatchruns from the default branch); its first run after merge is the first evidence, reviewed under item 3.Review and Disposition
Accepted target-branch authorities used:
origin/main-v2(2e0f736) AGENTS.md, governance policies and catalogs, the Wave entry and its owner dispositions in #549, the experiment policy, and both review Skills. This PR adds a control (windows-release-workflow) and renames a record family (portable-package-host-test-protocoltoportable-package-host-test-evidence); the owner's merge accepts both.0.1.0-alphaexception only; the local-build sentence dropped.main-v2guard only in themain-v2copy): design, threat model and control now say so; the release review checks the run's and attestation's source ref and workflow.vswhere -prereleaseas ILCompiler; the record is labeled an inference.client-profile: this PR implements public distribution of the bundled Profile). The Azure DevOps Entra OAuth guidance is unchanged (updated2026-05-08T17:05:00Z,f7bd73f); the evidence stays bounded existing-state (docs(research): record the portable package host test results #548); the external Client Profile gate stays open under decision 0003's prerelease exception; no conclusion changes. RECHECK-008 does not fire (publishing mode, target and pins unchanged; the floating hosted chain is the owner's RS-2 decision). RECHECK-001, 002, 003, 004, 006, 009, 010 fire only at each prerelease and belong to the item 3 release review. RECHECK-005 does not fire.bash -ewithoutpipefail, so a failed lookup counted as zero drafts. Triage: true positive (8/10), no owner decision. Fixed in 783ff34 (shell: bash, which runs-eo pipefail; control invariant names the draft refusal).windows-release-workflowcontrol and the family rename.Upstream Provenance
None.