AzLocal.UpdateManagement v0.8.78: pipeline-summary UX polish (JUnit reclassification, Up-to-Date surfacing, download-artifact@v7)#84
Merged
Conversation
Three improvements driven by operator feedback on Step.07: 1. JUnit reclassification - ScheduleBlocked / SideloadedBlocked / ExcludedByTag are designed gate-respect outcomes, not failures. Export-ResultsToJUnitXml now renders them as <skipped> instead of <failure>, so dorny/test-reporter no longer flips Step.07 RED on otherwise-successful schedule-aware / sideload-gated / tag-excluded runs. HealthCheckBlocked stays a failure (real operational issue). 2. Apply Updates summary shows the FULL ring picture - new optional -UpToDateCount / -NotReadyCount parameters on Add-AzLocalApplyUpdatesStepSummary add 'Already Up to Date' and 'Not Ready (needs attention before updating)' rows to the Readiness KPI table. Both apply-updates YAMLs (GHA + ADO) wire the upstream readiness.UpToDateCount / readiness.NotReadyCount outputs (emitted since v0.8.74) through to the summary task. 3. actions/download-artifact@v6 -> @v7 in GHA apply-updates.yml. Silences Node.js 20 deprecation warning. v7 deliberately chosen over v8 (v8 has breaking digest-mismatch=error default). Readiness gate verified ROBUST against operator question 'do we show Ready clusters that have a previously-failed in-progress run?' - the answer is no. Get-AzLocalClusterUpdateReadiness and Start-AzLocalClusterUpdate (Step 3) both predicate Ready on updateSummary.properties.state -in @('UpdateAvailable','Ready', 'ReadyToInstall'). NeedsAttention / UpdateInProgress / UpdateFailed / PreparationFailed clusters correctly land in Not-Ready (no code change needed). Tests: - Updated 'JUnit XML export handles ScheduleBlocked' / 'SideloadedBlocked' to assert <skipped> not <failure> + matching summary attrs (failures=0, skipped=1). - New 'Export-ResultsToJUnitXml renders ExcludedByTag as <skipped>' regression. - New 'Has v0.8.78 optional readiness-breakdown parameters UpToDateCount/NotReadyCount' on Add-AzLocalApplyUpdatesStepSummary. No public API change or new exports (still 60). All bundled pipeline templates bump GENERATED_AGAINST_MODULE_VERSION '0.8.77' -> '0.8.78'.
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
AzLocal.UpdateManagement v0.8.78 - patch release. Pipeline-summary UX polish driven by operator feedback on Step.07 (apply-updates). Three independent improvements, all backward-compatible.
Changes
1. JUnit reclassification: gate-respect != failure
Export-ResultsToJUnitXmlnow rendersScheduleBlocked,SideloadedBlocked, andExcludedByTagoutcomes as<skipped>instead of<failure>. These are by-design opt-in gates honoured by Start-AzLocalClusterUpdate; treating them as failures was misleading and causeddorny/test-reporterto flip Step.07 RED on otherwise-successful runs that exercised the schedule-aware / sideload-gated / tag-excluded paths.HealthCheckBlockeddeliberately stays a<failure>because a critical health failure IS an actionable operational issue.2. Apply Updates summary shows the FULL ring picture
New optional
-UpToDateCount/-NotReadyCountparameters onAdd-AzLocalApplyUpdatesStepSummaryadd Already Up to Date and Not Ready (needs attention before updating) rows to the Readiness KPI table. Both apply-updates YAMLs (GitHub Actions + Azure DevOps) wire the upstreamreadiness.UpToDateCount/readiness.NotReadyCountoutputs (emitted since v0.8.74) through to the summary task, so operators now see the full ring breakdown - eligible, started, skipped, blocked, up-to-date, needs-attention - all in one place.3.
actions/download-artifact@v6 -> @v7Silences the persistent Node.js 20 deprecation warning on every Step.07 run; v7 ships native Node 24. v7 chosen over v8 because v8 has a breaking
digest-mismatch=errordefault that would block legitimate cross-job artifact reuse.Readiness-gate verification
Operator question: "do we surface Ready clusters that have a previously-failed in-progress run?" Answer: no.
Get-AzLocalClusterUpdateReadinessandStart-AzLocalClusterUpdate(Step 3) both predicate Ready onupdateSummary.properties.state -in @('UpdateAvailable','Ready','ReadyToInstall').NeedsAttention/UpdateInProgress/UpdateFailed/PreparationFailedclusters all correctly land in the Not-Ready bucket. No code change required.Tests
'JUnit XML export handles ScheduleBlocked'andSideloadedBlockedContexts now assert<skipped>(not<failure>) and matching summary attrs (failures=0,skipped=1).'Export-ResultsToJUnitXml renders ExcludedByTag as <skipped> (v0.8.78)'.'Has v0.8.78 optional readiness-breakdown parameters UpToDateCount/NotReadyCount'onAdd-AzLocalApplyUpdatesStepSummary.0.8.78.Full suite locally: 1150 passed, 0 failed, 39 skipped, 1189 total. Exit 0.
Bundled pipelines
All 22 bundled pipeline templates bump
GENERATED_AGAINST_MODULE_VERSIONfrom'0.8.77'to'0.8.78'. Only the GitHub Actions and Azure DevOpsapply-updates.ymlYAMLs have body changes (UpToDateCount/NotReadyCount wiring + GHA download-artifact bump); the other 20 templates are version-marker-only.Public API surface
No change. Still 60 exported functions. Two new params on
Add-AzLocalApplyUpdatesStepSummaryare both[object] = -1(parser tolerates empty pipeline-macro strings), so callers omitting them see identical behaviour to v0.8.77.