ci(windows): add manual Microsoft Store flight submission - #5346
ci(windows): add manual Microsoft Store flight submission#5346jensenpat wants to merge 6 commits into
Conversation
ten9876
left a comment
There was a problem hiding this comment.
Scope note first
Stacked draft on #5345, correctly disclosed: the GitHub diff includes the whole symbol-packaging base, so this review covers only the incremental commit d3fd0555 (+168/−3 across the workflow, docs, and publish-store.ps1). Everything else was reviewed on #5345 — including the still-open item there (the docs-vs-create-msix.ps1 duplicate-PDB invocation), which this branch inherits and which the post-merge rebase the body promises will need to pick up.
The increment
The isolation claims all verify in the diff itself: flight publication requires the explicit workflow_dispatch checkbox and github.repository == 'aethersdr/AetherSDR' and a nonempty AETHERSDR_STORE_FLIGHT_ID validated before authentication; a missing flight ID throws rather than falling back to production ("Refusing to fall back" is in the error text); the job holds permissions: contents: read and touches no release; and the production tag path keeps --noCommit untouched. The flight-version scheme is sound — run-number fourth component, 1..65535 guarded, monotonic per workflow — and the doc honestly covers the two sharp edges (the portal-created-first-draft trap, and the requirement that the next production release out-rank 26.9.1.* flight builds). The mocked-invocation validation rows are the right evidence for an untriggerable-from-PR-CI path.
Blockers
None in the increment. The governing constraint is the stacking itself: do not merge before #5345, and the rebase after its squash-merge must resolve #5345's outstanding review items, not just replay d3fd0555.
Nits (non-blocking)
-Commitwithout-FlightIdis a one-line-edit away from full production certification (inline). The script gains routine-Commitusage for flights, but nothing refuses the combination of-Commitand no flight — a future workflow edit that drops the-FlightIdline (or a copy-paste of the flight invocation into the production step) commits production straight to certification with no second gate. A guard requiring an explicit-CommitProduction(or refusing-Commitwhen-FlightIdis empty) makes the dangerous combination unsayable by accident.--verboseonmsstore publishin public Actions logs carries over from #5345 (flagged there) — the flight job doubles the exposure surface.- The body notes
AETHERSDR_STORE_FLIGHT_IDis not yet in the repository secret list — worth a checklist item on the merge so the first dispatch doesn't fail on configuration.
What was verified vs read
Every isolation claim was checked against the increment's own lines (conditions, permissions, validation ordering, artifact-count check); the Microsoft CLI behavior claims (--flightId + no --noCommit → flight commit API + poll) rest on the linked docs and the body's pinned-source reading, not on execution — this path cannot run from PR CI by design, and its first real execution will be the actual test. No multi-angle automated pass on this PR: 80% of the diff is #5345's content, which already received it; the increment got a focused manual pass instead — stated so the two aren't conflated.
| $UploadTimeoutSeconds.ToString([System.Globalization.CultureInfo]::InvariantCulture), | ||
| "--verbose" | ||
| ) | ||
| if (-not [string]::IsNullOrWhiteSpace($FlightId)) { |
There was a problem hiding this comment.
Nit (non-blocking, defense-in-depth): with flights making -Commit routine, nothing refuses -Commit + empty -FlightId — that combination is full production certification with no second gate, one dropped line away from the flight invocation. Making it unsayable by accident:
| if (-not [string]::IsNullOrWhiteSpace($FlightId)) { | |
| if (-not [string]::IsNullOrWhiteSpace($FlightId)) { | |
| $publishArgs += @("--flightId", $FlightId) | |
| } | |
| elseif ($Commit -and -not $CommitProduction) { | |
| throw "-Commit without -FlightId would send the PRODUCTION submission straight to certification. Pass -CommitProduction if that is genuinely intended." | |
| } |
(with a [switch]$CommitProduction param; the current tag path passes neither, so nothing changes for it).
|
Addressed the public-log security nit in 0cbb930: the shared Store publisher no longer passes --verbose, so both production drafts and manual developer-flight submissions use default CLI verbosity. The flight path still passes --uploadTimeout 300, --flightId, and -Commit; production still receives --noCommit. Documentation and the PR validation claims were updated accordingly. |
Dependency
This is a stacked PR built on #5345. The current GitHub diff therefore includes the symbol-packaging prerequisite from that PR. Do not merge this PR before #5345. After #5345 is squash-merged, this branch must be rebased onto the updated
mainso the diff contains only the manual-flight increment and its non-verbose logging follow-up.Summary
workflow_dispatchcheckbox to build Windows and fully submit the resulting.msixuploadto an existing Partner Center developer package flightAETHERSDR_STORE_FLIGHT_ID, passes it explicitly as--flightId, retains--uploadTimeout 300, and uses-Commitfor full automatic submission--verbosedisabled for production and manual-flight Store submissions so public Actions logs do not expand authentication or upload diagnosticsProduction isolation
The existing production path is unchanged:
v*tags still stage drafts with--noCommit. The flight job runs only for an explicit manual dispatch inaethersdr/AetherSDR, requires a nonempty flight secret before authentication, and fails rather than falling back to production.FlightIdhas no environment default in the PowerShell wrapper. The manual path has no schedule and does not create or attach to a GitHub Release. Neither path enables--verbose.The repository-level Actions secret list does not currently expose
AETHERSDR_STORE_FLIGHT_ID; it must be added before the workflow can publish unless an organization secret with that name is already scoped to this repository.Full-auto behavior
Microsoft documents
--flightIdas the package-flight target and--noCommitas the option that prevents automatic commit. The pinned CLI source confirms that a publish with a flight ID and without--noCommitcalls the flight-specific commit API and polls the resulting status.Validation
actionlint .github/workflows/windows-installer.ymlpackaging/windows/publish-store.ps1at the originalflight commit; the security follow-up removes only the
--verbosearrayelement and its preceding comma
--uploadTimeout 300 --noCommit, contains no flight ID, and does not include--verbose--uploadTimeout 300 --flightId TESTFLIGHT, omits--noCommit, and does not include--verbose26.9.1.203for source26.9.1and workflow run 203python3 tools/check_test_registration.py --strictpython3 tools/check_engine_boundary.py --strictgit diff --checkNo socket-based tests were run or added. No Microsoft Store submission was triggered.
Generated with OpenAI Codex (Daybreak Blue)