diff --git a/AzLocal.UpdateManagement/Automation-Pipeline-Examples/azure-devops/apply-updates-schedule-audit.yml b/AzLocal.UpdateManagement/Automation-Pipeline-Examples/azure-devops/apply-updates-schedule-audit.yml
index cf070a79..29713abe 100644
--- a/AzLocal.UpdateManagement/Automation-Pipeline-Examples/azure-devops/apply-updates-schedule-audit.yml
+++ b/AzLocal.UpdateManagement/Automation-Pipeline-Examples/azure-devops/apply-updates-schedule-audit.yml
@@ -87,7 +87,7 @@ parameters:
default: false
variables:
- GENERATED_AGAINST_MODULE_VERSION: '0.8.72'
+ GENERATED_AGAINST_MODULE_VERSION: '0.8.73'
REQUIRED_MODULE_VERSION: '${{ parameters.moduleVersion }}'
reportsPath: '$(Build.ArtifactStagingDirectory)/reports'
# v0.8.7 sideload advisor defaults. Override at the pipeline / variable-group
diff --git a/AzLocal.UpdateManagement/Automation-Pipeline-Examples/azure-devops/apply-updates.yml b/AzLocal.UpdateManagement/Automation-Pipeline-Examples/azure-devops/apply-updates.yml
index 8e209ef8..3cd3dd4d 100644
--- a/AzLocal.UpdateManagement/Automation-Pipeline-Examples/azure-devops/apply-updates.yml
+++ b/AzLocal.UpdateManagement/Automation-Pipeline-Examples/azure-devops/apply-updates.yml
@@ -120,7 +120,7 @@ variables:
# log if the YAML appears stale - prompting you to refresh via
# Copy-AzLocalPipelineExample -Update. See Automation-Pipeline-Examples/README.md section 5.
- name: GENERATED_AGAINST_MODULE_VERSION
- value: '0.8.72'
+ value: '0.8.73'
# Resolution order for the module version pin (leave all unset to install the latest,
# which is the default "fix-forward" behaviour): queue-time parameter > pipeline variable
# 'REQUIRED_MODULE_VERSION' overridden at queue time > empty (latest).
diff --git a/AzLocal.UpdateManagement/Automation-Pipeline-Examples/azure-devops/assess-update-readiness.yml b/AzLocal.UpdateManagement/Automation-Pipeline-Examples/azure-devops/assess-update-readiness.yml
index 5871a965..78478bb9 100644
--- a/AzLocal.UpdateManagement/Automation-Pipeline-Examples/azure-devops/assess-update-readiness.yml
+++ b/AzLocal.UpdateManagement/Automation-Pipeline-Examples/azure-devops/assess-update-readiness.yml
@@ -70,7 +70,7 @@ variables:
# the version actually installed and to the latest on PSGallery, and emits a warning
# log if the YAML appears stale - prompting you to refresh via
# Copy-AzLocalPipelineExample -Update. See Automation-Pipeline-Examples/README.md section 5.
- GENERATED_AGAINST_MODULE_VERSION: '0.8.72'
+ GENERATED_AGAINST_MODULE_VERSION: '0.8.73'
# Resolution order for the module version pin (leave all unset to install the latest,
# which is the default "fix-forward" behaviour): queue-time parameter > pipeline variable
# 'REQUIRED_MODULE_VERSION' overridden at queue time > empty (latest).
diff --git a/AzLocal.UpdateManagement/Automation-Pipeline-Examples/azure-devops/authentication-test.yml b/AzLocal.UpdateManagement/Automation-Pipeline-Examples/azure-devops/authentication-test.yml
index 6ec947ca..8eed01fa 100644
--- a/AzLocal.UpdateManagement/Automation-Pipeline-Examples/azure-devops/authentication-test.yml
+++ b/AzLocal.UpdateManagement/Automation-Pipeline-Examples/azure-devops/authentication-test.yml
@@ -60,7 +60,7 @@ variables:
# log if the YAML appears stale - prompting you to refresh via
# Copy-AzLocalPipelineExample -Update. See Automation-Pipeline-Examples/README.md section 5.
- name: GENERATED_AGAINST_MODULE_VERSION
- value: '0.8.72'
+ value: '0.8.73'
# Resolution order for the module version pin (leave all unset to install the latest,
# which is the default "fix-forward" behaviour): queue-time parameter > pipeline variable
# 'REQUIRED_MODULE_VERSION' overridden at queue time > empty (latest).
diff --git a/AzLocal.UpdateManagement/Automation-Pipeline-Examples/azure-devops/fleet-connectivity-status.yml b/AzLocal.UpdateManagement/Automation-Pipeline-Examples/azure-devops/fleet-connectivity-status.yml
index 5c3434ac..a43127aa 100644
--- a/AzLocal.UpdateManagement/Automation-Pipeline-Examples/azure-devops/fleet-connectivity-status.yml
+++ b/AzLocal.UpdateManagement/Automation-Pipeline-Examples/azure-devops/fleet-connectivity-status.yml
@@ -110,7 +110,7 @@ variables:
# the version actually installed and to the latest on PSGallery, and emits a warning
# log if the YAML appears stale - prompting you to refresh via
# Copy-AzLocalPipelineExample -Update. See Automation-Pipeline-Examples/README.md section 5.
- GENERATED_AGAINST_MODULE_VERSION: '0.8.72'
+ GENERATED_AGAINST_MODULE_VERSION: '0.8.73'
# Resolution order for the module version pin (leave all unset to install the latest,
# which is the default "fix-forward" behaviour): queue-time parameter > pipeline variable
# 'REQUIRED_MODULE_VERSION' overridden at queue time > empty (latest).
diff --git a/AzLocal.UpdateManagement/Automation-Pipeline-Examples/azure-devops/fleet-health-status.yml b/AzLocal.UpdateManagement/Automation-Pipeline-Examples/azure-devops/fleet-health-status.yml
index 355fe0d1..a25137ba 100644
--- a/AzLocal.UpdateManagement/Automation-Pipeline-Examples/azure-devops/fleet-health-status.yml
+++ b/AzLocal.UpdateManagement/Automation-Pipeline-Examples/azure-devops/fleet-health-status.yml
@@ -105,7 +105,7 @@ variables:
# the version actually installed and to the latest on PSGallery, and emits a warning
# log if the YAML appears stale - prompting you to refresh via
# Copy-AzLocalPipelineExample -Update. See Automation-Pipeline-Examples/README.md section 5.
- GENERATED_AGAINST_MODULE_VERSION: '0.8.72'
+ GENERATED_AGAINST_MODULE_VERSION: '0.8.73'
# Resolution order for the module version pin (leave all unset to install the latest,
# which is the default "fix-forward" behaviour): queue-time parameter > pipeline variable
# 'REQUIRED_MODULE_VERSION' overridden at queue time > empty (latest).
diff --git a/AzLocal.UpdateManagement/Automation-Pipeline-Examples/azure-devops/fleet-update-status.yml b/AzLocal.UpdateManagement/Automation-Pipeline-Examples/azure-devops/fleet-update-status.yml
index abd06ec3..f7532965 100644
--- a/AzLocal.UpdateManagement/Automation-Pipeline-Examples/azure-devops/fleet-update-status.yml
+++ b/AzLocal.UpdateManagement/Automation-Pipeline-Examples/azure-devops/fleet-update-status.yml
@@ -93,7 +93,7 @@ variables:
# the version actually installed and to the latest on PSGallery, and emits a warning
# log if the YAML appears stale - prompting you to refresh via
# Copy-AzLocalPipelineExample -Update. See Automation-Pipeline-Examples/README.md section 5.
- GENERATED_AGAINST_MODULE_VERSION: '0.8.72'
+ GENERATED_AGAINST_MODULE_VERSION: '0.8.73'
# Resolution order for the module version pin (leave all unset to install the latest,
# which is the default "fix-forward" behaviour): queue-time parameter > pipeline variable
# 'REQUIRED_MODULE_VERSION' overridden at queue time > empty (latest).
diff --git a/AzLocal.UpdateManagement/Automation-Pipeline-Examples/azure-devops/inventory-clusters.yml b/AzLocal.UpdateManagement/Automation-Pipeline-Examples/azure-devops/inventory-clusters.yml
index 77245905..1af6fba6 100644
--- a/AzLocal.UpdateManagement/Automation-Pipeline-Examples/azure-devops/inventory-clusters.yml
+++ b/AzLocal.UpdateManagement/Automation-Pipeline-Examples/azure-devops/inventory-clusters.yml
@@ -43,7 +43,7 @@ variables:
# log if the YAML appears stale - prompting you to refresh via
# Copy-AzLocalPipelineExample -Update. See Automation-Pipeline-Examples/README.md section 5.
- name: GENERATED_AGAINST_MODULE_VERSION
- value: '0.8.72'
+ value: '0.8.73'
# Resolution order for the module version pin (leave all unset to install the latest,
# which is the default "fix-forward" behaviour): queue-time parameter > pipeline variable
# 'REQUIRED_MODULE_VERSION' overridden at queue time > empty (latest).
diff --git a/AzLocal.UpdateManagement/Automation-Pipeline-Examples/azure-devops/manage-updatering-tags.yml b/AzLocal.UpdateManagement/Automation-Pipeline-Examples/azure-devops/manage-updatering-tags.yml
index 7a7e2532..1263ccc7 100644
--- a/AzLocal.UpdateManagement/Automation-Pipeline-Examples/azure-devops/manage-updatering-tags.yml
+++ b/AzLocal.UpdateManagement/Automation-Pipeline-Examples/azure-devops/manage-updatering-tags.yml
@@ -46,7 +46,7 @@ variables:
# log if the YAML appears stale - prompting you to refresh via
# Copy-AzLocalPipelineExample -Update. See Automation-Pipeline-Examples/README.md section 5.
- name: GENERATED_AGAINST_MODULE_VERSION
- value: '0.8.72'
+ value: '0.8.73'
# Resolution order for the module version pin (leave all unset to install the latest,
# which is the default "fix-forward" behaviour): queue-time parameter > pipeline variable
# 'REQUIRED_MODULE_VERSION' overridden at queue time > empty (latest).
diff --git a/AzLocal.UpdateManagement/Automation-Pipeline-Examples/azure-devops/monitor-updates.yml b/AzLocal.UpdateManagement/Automation-Pipeline-Examples/azure-devops/monitor-updates.yml
index 86cbe678..4a734bba 100644
--- a/AzLocal.UpdateManagement/Automation-Pipeline-Examples/azure-devops/monitor-updates.yml
+++ b/AzLocal.UpdateManagement/Automation-Pipeline-Examples/azure-devops/monitor-updates.yml
@@ -84,7 +84,7 @@ parameters:
default: ''
variables:
- GENERATED_AGAINST_MODULE_VERSION: '0.8.72'
+ GENERATED_AGAINST_MODULE_VERSION: '0.8.73'
REQUIRED_MODULE_VERSION: '${{ parameters.moduleVersion }}'
reportsPath: '$(Build.ArtifactStagingDirectory)/reports'
diff --git a/AzLocal.UpdateManagement/Automation-Pipeline-Examples/azure-devops/sideload-updates.yml b/AzLocal.UpdateManagement/Automation-Pipeline-Examples/azure-devops/sideload-updates.yml
index 0133b85d..f6f633fb 100644
--- a/AzLocal.UpdateManagement/Automation-Pipeline-Examples/azure-devops/sideload-updates.yml
+++ b/AzLocal.UpdateManagement/Automation-Pipeline-Examples/azure-devops/sideload-updates.yml
@@ -79,7 +79,7 @@ variables:
# the version actually installed and to the latest on PSGallery, and emits a warning
# log if the YAML appears stale - prompting you to refresh via
# Copy-AzLocalPipelineExample -Update. See Automation-Pipeline-Examples/README.md section 5.
- GENERATED_AGAINST_MODULE_VERSION: '0.8.72'
+ GENERATED_AGAINST_MODULE_VERSION: '0.8.73'
# Resolution order for the module version pin (leave all unset to install the latest,
# which is the default "fix-forward" behaviour): queue-time parameter > pipeline variable
# 'REQUIRED_MODULE_VERSION' overridden at queue time > empty (latest).
diff --git a/AzLocal.UpdateManagement/Automation-Pipeline-Examples/github-actions/apply-updates-schedule-audit.yml b/AzLocal.UpdateManagement/Automation-Pipeline-Examples/github-actions/apply-updates-schedule-audit.yml
index a678472a..4565014c 100644
--- a/AzLocal.UpdateManagement/Automation-Pipeline-Examples/github-actions/apply-updates-schedule-audit.yml
+++ b/AzLocal.UpdateManagement/Automation-Pipeline-Examples/github-actions/apply-updates-schedule-audit.yml
@@ -96,7 +96,7 @@ env:
# this to the version actually installed and to the latest on PSGallery, and emits a
# ::notice annotation if the YAML appears stale - prompting you to refresh via
# Copy-AzLocalPipelineExample -Update. See Automation-Pipeline-Examples/README.md section 5.
- GENERATED_AGAINST_MODULE_VERSION: '0.8.72'
+ GENERATED_AGAINST_MODULE_VERSION: '0.8.73'
REQUIRED_MODULE_VERSION: ${{ github.event.inputs.module_version || vars.REQUIRED_MODULE_VERSION || '' }}
# v0.8.4 - opt this workflow into Node.js 24 for all JavaScript actions
# (actions/checkout, actions/download-artifact, actions/upload-artifact,
diff --git a/AzLocal.UpdateManagement/Automation-Pipeline-Examples/github-actions/apply-updates.yml b/AzLocal.UpdateManagement/Automation-Pipeline-Examples/github-actions/apply-updates.yml
index 5ecb9b58..dafd80de 100644
--- a/AzLocal.UpdateManagement/Automation-Pipeline-Examples/github-actions/apply-updates.yml
+++ b/AzLocal.UpdateManagement/Automation-Pipeline-Examples/github-actions/apply-updates.yml
@@ -135,7 +135,7 @@ env:
# this to the version actually installed and to the latest on PSGallery, and emits a
# ::notice annotation if the YAML appears stale - prompting you to refresh via
# Copy-AzLocalPipelineExample -Update. See Automation-Pipeline-Examples/README.md section 5.
- GENERATED_AGAINST_MODULE_VERSION: '0.8.72'
+ GENERATED_AGAINST_MODULE_VERSION: '0.8.73'
# Resolution order for the module version pin (leave all unset to install the latest,
# which is the default "fix-forward" behaviour): manual workflow_dispatch input >
# repository variable 'REQUIRED_MODULE_VERSION' > empty (latest).
diff --git a/AzLocal.UpdateManagement/Automation-Pipeline-Examples/github-actions/assess-update-readiness.yml b/AzLocal.UpdateManagement/Automation-Pipeline-Examples/github-actions/assess-update-readiness.yml
index 0a74ccb5..da6da90d 100644
--- a/AzLocal.UpdateManagement/Automation-Pipeline-Examples/github-actions/assess-update-readiness.yml
+++ b/AzLocal.UpdateManagement/Automation-Pipeline-Examples/github-actions/assess-update-readiness.yml
@@ -72,7 +72,7 @@ env:
# this to the version actually installed and to the latest on PSGallery, and emits a
# ::notice annotation if the YAML appears stale - prompting you to refresh via
# Copy-AzLocalPipelineExample -Update. See Automation-Pipeline-Examples/README.md section 5.
- GENERATED_AGAINST_MODULE_VERSION: '0.8.72'
+ GENERATED_AGAINST_MODULE_VERSION: '0.8.73'
# Resolution order for the module version pin (leave all unset to install the latest,
# which is the default "fix-forward" behaviour): manual workflow_dispatch input >
# repository variable 'REQUIRED_MODULE_VERSION' > empty (latest).
diff --git a/AzLocal.UpdateManagement/Automation-Pipeline-Examples/github-actions/authentication-test.yml b/AzLocal.UpdateManagement/Automation-Pipeline-Examples/github-actions/authentication-test.yml
index c15cae8a..c2c06ebe 100644
--- a/AzLocal.UpdateManagement/Automation-Pipeline-Examples/github-actions/authentication-test.yml
+++ b/AzLocal.UpdateManagement/Automation-Pipeline-Examples/github-actions/authentication-test.yml
@@ -79,7 +79,7 @@ env:
# this to the version actually installed and to the latest on PSGallery, and emits a
# ::notice annotation if the YAML appears stale - prompting you to refresh via
# Copy-AzLocalPipelineExample. See Automation-Pipeline-Examples/README.md section 5.
- GENERATED_AGAINST_MODULE_VERSION: '0.8.72'
+ GENERATED_AGAINST_MODULE_VERSION: '0.8.73'
# Resolution order for the module version pin (leave all unset to install the latest,
# which is the default "fix-forward" behaviour): manual workflow_dispatch input >
# repository variable 'REQUIRED_MODULE_VERSION' > empty (latest).
diff --git a/AzLocal.UpdateManagement/Automation-Pipeline-Examples/github-actions/fleet-connectivity-status.yml b/AzLocal.UpdateManagement/Automation-Pipeline-Examples/github-actions/fleet-connectivity-status.yml
index 44404dac..f7ecdf5d 100644
--- a/AzLocal.UpdateManagement/Automation-Pipeline-Examples/github-actions/fleet-connectivity-status.yml
+++ b/AzLocal.UpdateManagement/Automation-Pipeline-Examples/github-actions/fleet-connectivity-status.yml
@@ -116,7 +116,7 @@ env:
# PSGallery, and emits a ::notice annotation if the YAML appears stale -
# prompting you to refresh via Copy-AzLocalPipelineExample -Update. See
# Automation-Pipeline-Examples/README.md section 5.
- GENERATED_AGAINST_MODULE_VERSION: '0.8.72'
+ GENERATED_AGAINST_MODULE_VERSION: '0.8.73'
# Resolution order for the module version pin (leave all unset to install
# the latest, the default "fix-forward" behaviour): manual workflow_dispatch
# input > repository variable 'REQUIRED_MODULE_VERSION' > empty (latest).
diff --git a/AzLocal.UpdateManagement/Automation-Pipeline-Examples/github-actions/fleet-health-status.yml b/AzLocal.UpdateManagement/Automation-Pipeline-Examples/github-actions/fleet-health-status.yml
index 81ea6838..118b5236 100644
--- a/AzLocal.UpdateManagement/Automation-Pipeline-Examples/github-actions/fleet-health-status.yml
+++ b/AzLocal.UpdateManagement/Automation-Pipeline-Examples/github-actions/fleet-health-status.yml
@@ -116,7 +116,7 @@ env:
# this to the version actually installed and to the latest on PSGallery, and emits a
# ::notice annotation if the YAML appears stale - prompting you to refresh via
# Copy-AzLocalPipelineExample -Update. See Automation-Pipeline-Examples/README.md section 5.
- GENERATED_AGAINST_MODULE_VERSION: '0.8.72'
+ GENERATED_AGAINST_MODULE_VERSION: '0.8.73'
# Resolution order for the module version pin (leave all unset to install the latest,
# which is the default "fix-forward" behaviour): manual workflow_dispatch input >
# repository variable 'REQUIRED_MODULE_VERSION' > empty (latest).
diff --git a/AzLocal.UpdateManagement/Automation-Pipeline-Examples/github-actions/fleet-update-status.yml b/AzLocal.UpdateManagement/Automation-Pipeline-Examples/github-actions/fleet-update-status.yml
index 7bfdd19d..1aab4534 100644
--- a/AzLocal.UpdateManagement/Automation-Pipeline-Examples/github-actions/fleet-update-status.yml
+++ b/AzLocal.UpdateManagement/Automation-Pipeline-Examples/github-actions/fleet-update-status.yml
@@ -105,7 +105,7 @@ env:
# this to the version actually installed and to the latest on PSGallery, and emits a
# ::notice annotation if the YAML appears stale - prompting you to refresh via
# Copy-AzLocalPipelineExample -Update. See Automation-Pipeline-Examples/README.md section 5.
- GENERATED_AGAINST_MODULE_VERSION: '0.8.72'
+ GENERATED_AGAINST_MODULE_VERSION: '0.8.73'
# Resolution order for the module version pin (leave all unset to install the latest,
# which is the default "fix-forward" behaviour): manual workflow_dispatch input >
# repository variable 'REQUIRED_MODULE_VERSION' > empty (latest).
diff --git a/AzLocal.UpdateManagement/Automation-Pipeline-Examples/github-actions/inventory-clusters.yml b/AzLocal.UpdateManagement/Automation-Pipeline-Examples/github-actions/inventory-clusters.yml
index aba01f9a..380318e4 100644
--- a/AzLocal.UpdateManagement/Automation-Pipeline-Examples/github-actions/inventory-clusters.yml
+++ b/AzLocal.UpdateManagement/Automation-Pipeline-Examples/github-actions/inventory-clusters.yml
@@ -48,7 +48,7 @@ env:
# this to the version actually installed and to the latest on PSGallery, and emits a
# ::notice annotation if the YAML appears stale - prompting you to refresh via
# Copy-AzLocalPipelineExample. See Automation-Pipeline-Examples/README.md section 5.
- GENERATED_AGAINST_MODULE_VERSION: '0.8.72'
+ GENERATED_AGAINST_MODULE_VERSION: '0.8.73'
# Resolution order for the module version pin (leave all unset to install the latest,
# which is the default "fix-forward" behaviour): manual workflow_dispatch input >
# repository variable 'REQUIRED_MODULE_VERSION' > empty (latest).
diff --git a/AzLocal.UpdateManagement/Automation-Pipeline-Examples/github-actions/manage-updatering-tags.yml b/AzLocal.UpdateManagement/Automation-Pipeline-Examples/github-actions/manage-updatering-tags.yml
index 6a20e6c2..53a3520a 100644
--- a/AzLocal.UpdateManagement/Automation-Pipeline-Examples/github-actions/manage-updatering-tags.yml
+++ b/AzLocal.UpdateManagement/Automation-Pipeline-Examples/github-actions/manage-updatering-tags.yml
@@ -65,7 +65,7 @@ env:
# this to the version actually installed and to the latest on PSGallery, and emits a
# ::notice annotation if the YAML appears stale - prompting you to refresh via
# Copy-AzLocalPipelineExample -Update. See Automation-Pipeline-Examples/README.md section 5.
- GENERATED_AGAINST_MODULE_VERSION: '0.8.72'
+ GENERATED_AGAINST_MODULE_VERSION: '0.8.73'
# Resolution order for the module version pin (leave all unset to install the latest,
# which is the default "fix-forward" behaviour): manual workflow_dispatch input >
# repository variable 'REQUIRED_MODULE_VERSION' > empty (latest).
diff --git a/AzLocal.UpdateManagement/Automation-Pipeline-Examples/github-actions/monitor-updates.yml b/AzLocal.UpdateManagement/Automation-Pipeline-Examples/github-actions/monitor-updates.yml
index d5d7a0bb..e3ceb68c 100644
--- a/AzLocal.UpdateManagement/Automation-Pipeline-Examples/github-actions/monitor-updates.yml
+++ b/AzLocal.UpdateManagement/Automation-Pipeline-Examples/github-actions/monitor-updates.yml
@@ -86,7 +86,7 @@ env:
# this to the version actually installed and to the latest on PSGallery, and emits a
# ::notice annotation if the YAML appears stale - prompting you to refresh via
# Copy-AzLocalPipelineExample -Update. See Automation-Pipeline-Examples/README.md section 5.
- GENERATED_AGAINST_MODULE_VERSION: '0.8.72'
+ GENERATED_AGAINST_MODULE_VERSION: '0.8.73'
# Resolution order for the module version pin (leave all unset to install the latest,
# which is the default "fix-forward" behaviour): manual workflow_dispatch input >
# repository variable 'REQUIRED_MODULE_VERSION' > empty (latest).
diff --git a/AzLocal.UpdateManagement/Automation-Pipeline-Examples/github-actions/sideload-updates.yml b/AzLocal.UpdateManagement/Automation-Pipeline-Examples/github-actions/sideload-updates.yml
index 2b719ea5..53067284 100644
--- a/AzLocal.UpdateManagement/Automation-Pipeline-Examples/github-actions/sideload-updates.yml
+++ b/AzLocal.UpdateManagement/Automation-Pipeline-Examples/github-actions/sideload-updates.yml
@@ -83,7 +83,7 @@ env:
# this to the version actually installed and to the latest on PSGallery, and emits a
# ::notice annotation if the YAML appears stale - prompting you to refresh via
# Copy-AzLocalPipelineExample -Update. See Automation-Pipeline-Examples/README.md section 5.
- GENERATED_AGAINST_MODULE_VERSION: '0.8.72'
+ GENERATED_AGAINST_MODULE_VERSION: '0.8.73'
# Resolution order for the module version pin (leave all unset to install the latest,
# which is the default "fix-forward" behaviour): manual workflow_dispatch input >
# repository variable 'REQUIRED_MODULE_VERSION' > empty (latest).
diff --git a/AzLocal.UpdateManagement/AzLocal.UpdateManagement.psd1 b/AzLocal.UpdateManagement/AzLocal.UpdateManagement.psd1
index 48b8b6d8..8a628b24 100644
--- a/AzLocal.UpdateManagement/AzLocal.UpdateManagement.psd1
+++ b/AzLocal.UpdateManagement/AzLocal.UpdateManagement.psd1
@@ -3,7 +3,7 @@
RootModule = 'AzLocal.UpdateManagement.psm1'
# Version number of this module.
- ModuleVersion = '0.8.72'
+ ModuleVersion = '0.8.73'
# Supported PSEditions
CompatiblePSEditions = @('Desktop', 'Core')
@@ -307,6 +307,12 @@
# ReleaseNotes of this module
ReleaseNotes = @'
+## Version 0.8.73 - Cycle calendar: cluster counts folded INLINE into the "Eligible rings" column (Step.3 apply-updates schedule audit). No public API or export-count change (still 60).
+
+- **CHANGE**: `Get-AzLocalApplyUpdatesScheduleCycleCalendar` no longer renders a separate "Clusters in ring(s)" column when `-ClusterRingCounts` is supplied. Instead the "Eligible rings" header is relabelled "Eligible rings (cluster count)" and each ring token carries its count inline, e.g. `` `Prod` (9), `Canary` (3) ``. Dead days still render `_(none - dead day)_`. The per-ring projection table keeps its separate "Cluster count" column.
+- **FIX**: `Export-AzLocalApplyUpdatesScheduleAudit` (the Step.3 pipeline render path) now builds a ring -> tagged-cluster-count map from the cluster CSV and forwards it as `-ClusterRingCounts`. Previously this caller never passed the parameter, so the cluster counts never appeared in the rendered Step.3 cycle calendar even though the cmdlet supported them.
+- **All bundled pipeline templates** bump `GENERATED_AGAINST_MODULE_VERSION` from `'0.8.72'` to `'0.8.73'`.
+
## Version 0.8.72 - Patch: pipeline-template polish only. Schedule-file author guidance moved OUTSIDE the apply-updates.yml customise marker so it refreshes on existing consumers; single-digit Step.N display names zero-padded (Step.0 -> Step.00 ... Step.9 -> Step.09) so the GitHub Actions sidebar / Azure DevOps list sort in execution order. No public API or export-count change (still 60).
- **FIX**: `apply-updates.yml` (GitHub Actions + Azure DevOps) - the schedule-file author guidance comments were trapped INSIDE the `# BEGIN/END-AZLOCAL-CUSTOMIZE:schedule-triggers` block. Because `Update-AzLocalPipelineExample` preserves the marker body verbatim from the consumer's file, any correction to that guidance (e.g. the v0.8.71 `.github` -> `config` schedule-path fix) could never reach an already-deployed consumer. All author guidance is now ABOVE the marker; the marker body holds only the trigger directive (placeholder comment on GH, `trigger: none` on ADO).
diff --git a/AzLocal.UpdateManagement/AzLocal.UpdateManagement.psm1 b/AzLocal.UpdateManagement/AzLocal.UpdateManagement.psm1
index 2e4856b9..e5885012 100644
--- a/AzLocal.UpdateManagement/AzLocal.UpdateManagement.psm1
+++ b/AzLocal.UpdateManagement/AzLocal.UpdateManagement.psm1
@@ -151,7 +151,7 @@ Set-StrictMode -Version 1.0
# bumps to one but not the other are caught before release. Two consumers:
# - Start-AzLocalClusterUpdate emits this in the run log header.
# - Get-AzLocalFleetStatusData stamps it into exported fleet-state JSON.
-$script:ModuleVersion = '0.8.72'
+$script:ModuleVersion = '0.8.73'
$script:DefaultApiVersion = '2025-10-01'
$script:DefaultLogFolder = Join-Path -Path $env:ProgramData -ChildPath 'AzLocal.UpdateManagement'
diff --git a/AzLocal.UpdateManagement/CHANGELOG.md b/AzLocal.UpdateManagement/CHANGELOG.md
index ebfae6b0..cc47d724 100644
--- a/AzLocal.UpdateManagement/CHANGELOG.md
+++ b/AzLocal.UpdateManagement/CHANGELOG.md
@@ -5,6 +5,19 @@ All notable changes to the AzLocal.UpdateManagement module (renamed from AzStack
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
+## [0.8.73] - 2026-06-11
+
+Cycle-calendar refinement. The Step.3 apply-updates schedule audit now shows the per-ring cluster count INLINE in the "Eligible rings" column instead of as a separate column, and the Step.3 pipeline render path actually populates those counts (previously the counts never reached the rendered calendar). No public API or export-count change (still 60).
+
+### Changed
+
+- **Cluster counts folded inline into the "Eligible rings" column** - `Get-AzLocalApplyUpdatesScheduleCycleCalendar` no longer adds a separate "Clusters in ring(s)" column when `-ClusterRingCounts` is supplied. Instead the per-day calendar relabels the header "Eligible rings" -> "Eligible rings (cluster count)" and appends each ring's count inline to its token, e.g. `` `Prod` (9), `Canary` (3) ``. Dead days still render `_(none - dead day)_`. The per-ring projection table (when `-IncludePerRingSummary` is set) keeps its separate "Cluster count" column unchanged.
+- All bundled pipeline templates bump `GENERATED_AGAINST_MODULE_VERSION` from `'0.8.72'` to `'0.8.73'`.
+
+### Fixed
+
+- **Step.3 cycle calendar never showed cluster counts** - `Export-AzLocalApplyUpdatesScheduleAudit` (the cmdlet the Step.3 `apply-updates-schedule-audit` pipeline calls) never forwarded `-ClusterRingCounts` to the cycle-calendar cmdlet, so the cluster-count enrichment was silently absent from every rendered Step.3 summary even though the cmdlet supported it. The Export wrapper now builds a ring -> tagged-cluster-count map from the supplied cluster CSV and forwards it, so the inline counts appear whenever a `-ClusterCsvPath` is provided.
+
## [0.8.72] - 2026-06-11
Patch release. Pipeline-template polish only - no module code, public API, or export-count change (still 60). Moves the `apply-updates.yml` schedule-file author guidance out of the customise marker so it can be refreshed on already-deployed consumers, and zero-pads single-digit step numbers in pipeline display names so the GitHub Actions sidebar and Azure DevOps pipelines list sort in execution order.
diff --git a/AzLocal.UpdateManagement/Public/Export-AzLocalApplyUpdatesScheduleAudit.ps1 b/AzLocal.UpdateManagement/Public/Export-AzLocalApplyUpdatesScheduleAudit.ps1
index 634c5148..d75439f4 100644
--- a/AzLocal.UpdateManagement/Public/Export-AzLocalApplyUpdatesScheduleAudit.ps1
+++ b/AzLocal.UpdateManagement/Public/Export-AzLocalApplyUpdatesScheduleAudit.ps1
@@ -589,6 +589,7 @@ function Export-AzLocalApplyUpdatesScheduleAudit {
$calendarMd = $null
$cronFiringsByDate = $null
$windowMatchByRingAndDate = $null
+ $clusterRingCountMap = $null
try {
$schedForCalendar = if ($sched) { $sched } else { Get-AzLocalApplyUpdatesScheduleConfig -Path $SchedulePath -ErrorAction Stop }
@@ -637,6 +638,24 @@ function Export-AzLocalApplyUpdatesScheduleAudit {
if ($haveCsv) {
$clusters = @(Import-Csv -LiteralPath $ClusterCsvPath -ErrorAction Stop)
+ # Build a ring -> tagged-cluster-count map so the
+ # cycle calendar can fold the count inline into the
+ # "Eligible rings (cluster count)" column.
+ $clusterRingCountMap = @{}
+ foreach ($c in $clusters) {
+ $cr = ''
+ if ($c.PSObject.Properties.Name -contains 'UpdateRing' -and $null -ne $c.UpdateRing) {
+ $cr = ([string]$c.UpdateRing).Trim()
+ }
+ if ([string]::IsNullOrWhiteSpace($cr)) { continue }
+ if ($clusterRingCountMap.ContainsKey($cr)) {
+ $clusterRingCountMap[$cr] = [int]$clusterRingCountMap[$cr] + 1
+ } else {
+ $clusterRingCountMap[$cr] = 1
+ }
+ }
+ if ($clusterRingCountMap.Count -eq 0) { $clusterRingCountMap = $null }
+
# Pre-parse each cluster's UpdateStartWindow once.
$ringsToClusters = New-Object 'System.Collections.Generic.Dictionary[string,System.Collections.Generic.List[psobject]]' ([System.StringComparer]::OrdinalIgnoreCase)
foreach ($c in $clusters) {
@@ -711,6 +730,7 @@ function Export-AzLocalApplyUpdatesScheduleAudit {
Write-Warning "Failed to build cycle-calendar enrichment columns: $($_.Exception.Message)"
$cronFiringsByDate = $null
$windowMatchByRingAndDate = $null
+ $clusterRingCountMap = $null
}
$calArgs = @{
@@ -721,6 +741,7 @@ function Export-AzLocalApplyUpdatesScheduleAudit {
}
if ($cronFiringsByDate) { $calArgs.CronFiringsByDate = $cronFiringsByDate }
if ($windowMatchByRingAndDate) { $calArgs.WindowMatchByRingAndDate = $windowMatchByRingAndDate }
+ if ($clusterRingCountMap) { $calArgs.ClusterRingCounts = $clusterRingCountMap }
$calendarMd = Get-AzLocalApplyUpdatesScheduleCycleCalendar @calArgs
}
catch {
diff --git a/AzLocal.UpdateManagement/Public/Get-AzLocalApplyUpdatesScheduleCycleCalendar.ps1 b/AzLocal.UpdateManagement/Public/Get-AzLocalApplyUpdatesScheduleCycleCalendar.ps1
index c16cd503..fc8a8224 100644
--- a/AzLocal.UpdateManagement/Public/Get-AzLocalApplyUpdatesScheduleCycleCalendar.ps1
+++ b/AzLocal.UpdateManagement/Public/Get-AzLocalApplyUpdatesScheduleCycleCalendar.ps1
@@ -54,9 +54,11 @@ function Get-AzLocalApplyUpdatesScheduleCycleCalendar {
.PARAMETER ClusterRingCounts
Optional hashtable mapping ring name (case-insensitive) to the
count of clusters currently tagged with that UpdateRing. When
- supplied AND -AsMarkdown is set, the per-day calendar table and
- the per-ring projection table both gain a "Clusters in ring(s)"
- / "Cluster count" column so operators can see at a glance how
+ supplied AND -AsMarkdown is set, the per-day calendar table's
+ "Eligible rings" column is relabelled "Eligible rings (cluster
+ count)" and each ring token gains an inline count (e.g.
+ `Prod` (5)); the per-ring projection table gains a separate
+ "Cluster count" column. This lets operators see at a glance how
many clusters each upcoming firing will touch. Pure cmdlet -
callers (e.g. Test-AzLocalApplyUpdatesScheduleCoverage / Step.3
yml) build this dictionary from their cluster CSV or live tag
@@ -335,7 +337,10 @@ function Get-AzLocalApplyUpdatesScheduleCycleCalendar {
}
# Header pieces: build incrementally so a future 3rd optional
# column slots in cleanly. Order MUST be:
- # Date | [Cron firings] | Day | CycleWeek | Eligible rings | [Window match] | [Cluster counts] | AllowedUpdateVersions
+ # Date | [Cron firings] | Day | CycleWeek | Eligible rings | [Window match] | AllowedUpdateVersions
+ # When -ClusterRingCounts is supplied the count is folded INLINE
+ # into the Eligible rings tokens (header relabelled to
+ # "Eligible rings (cluster count)"), not added as a separate column.
$headerCells = New-Object System.Collections.Generic.List[string]
$alignCells = New-Object System.Collections.Generic.List[string]
[void]$headerCells.Add('Date (UTC)'); [void]$alignCells.Add('---')
@@ -345,15 +350,15 @@ function Get-AzLocalApplyUpdatesScheduleCycleCalendar {
}
[void]$headerCells.Add('Day'); [void]$alignCells.Add('---')
[void]$headerCells.Add('CycleWeek'); [void]$alignCells.Add('---')
- [void]$headerCells.Add('Eligible rings'); [void]$alignCells.Add('---')
+ # When cluster counts are supplied the count is folded INLINE into
+ # each ring token (e.g. `Prod` (5)), so the header is relabelled
+ # rather than adding a separate column.
+ $ringsHeader = if ($hasCounts) { 'Eligible rings (cluster count)' } else { 'Eligible rings' }
+ [void]$headerCells.Add($ringsHeader); [void]$alignCells.Add('---')
if ($hasWindowMatch) {
[void]$headerCells.Add('Tag Start Window Match (>=95%)')
[void]$alignCells.Add('---')
}
- if ($hasCounts) {
- [void]$headerCells.Add('Clusters in ring(s)')
- [void]$alignCells.Add('---')
- }
[void]$headerCells.Add('AllowedUpdateVersions'); [void]$alignCells.Add('---')
[void]$sb.AppendLine('| ' + ($headerCells -join ' | ') + ' |')
[void]$sb.AppendLine('|' + (($alignCells | ForEach-Object { $_ }) -join '|') + '|')
@@ -361,7 +366,15 @@ function Get-AzLocalApplyUpdatesScheduleCycleCalendar {
$dateKey = $r.DateUtc.ToString('yyyy-MM-dd')
$isDead = (-not $r.Rings -or @($r.Rings).Count -eq 0)
$ringsCell = if (-not $isDead) {
- (@($r.Rings) | ForEach-Object { '`' + $_ + '`' }) -join ', '
+ (@($r.Rings) | ForEach-Object {
+ if ($hasCounts) {
+ $cnt = 0
+ if ($ringCounts.ContainsKey($_)) { $cnt = $ringCounts[$_] }
+ '`' + $_ + '` (' + $cnt + ')'
+ } else {
+ '`' + $_ + '`'
+ }
+ }) -join ', '
} else {
'_(none - dead day)_'
}
@@ -415,26 +428,6 @@ function Get-AzLocalApplyUpdatesScheduleCycleCalendar {
$matchCell = ($parts -join '; ')
}
}
- $countCell = $null
- if ($hasCounts) {
- $countCell = if (-not $isDead) {
- $cparts = @()
- $total = 0
- foreach ($rg in @($r.Rings)) {
- $cnt = 0
- if ($ringCounts.ContainsKey($rg)) { $cnt = $ringCounts[$rg] }
- $cparts += "``$rg``: $cnt"
- $total += $cnt
- }
- if (@($r.Rings).Count -gt 1) {
- (($cparts -join ', ') + " (total: $total)")
- } else {
- ($cparts -join ', ')
- }
- } else {
- '_(0 - dead day)_'
- }
- }
# Assemble cells in the same order as the header.
$rowCells = New-Object System.Collections.Generic.List[string]
[void]$rowCells.Add($dateKey)
@@ -443,7 +436,6 @@ function Get-AzLocalApplyUpdatesScheduleCycleCalendar {
[void]$rowCells.Add([string]$r.CycleWeekLabel)
[void]$rowCells.Add($ringsCell)
if ($hasWindowMatch) { [void]$rowCells.Add($matchCell) }
- if ($hasCounts) { [void]$rowCells.Add($countCell) }
[void]$rowCells.Add($allowCell)
[void]$sb.AppendLine('| ' + ($rowCells -join ' | ') + ' |')
}
diff --git a/AzLocal.UpdateManagement/README.md b/AzLocal.UpdateManagement/README.md
index 2fca2606..b66d7bc9 100644
--- a/AzLocal.UpdateManagement/README.md
+++ b/AzLocal.UpdateManagement/README.md
@@ -2,7 +2,7 @@
> ⚠️ **Disclaimer**: This module is **NOT** a Microsoft supported service offering or product. It is provided as example code only, with no warranty or official support. Refer to the [MIT license](https://github.com/NeilBird/Azure-Local/blob/main/LICENSE) for further information.
-**Latest Version:** v0.8.72 - [Published in PowerShell Gallery](https://www.powershellgallery.com/packages/AzLocal.UpdateManagement/0.8.72)
+**Latest Version:** v0.8.73 - [Published in PowerShell Gallery](https://www.powershellgallery.com/packages/AzLocal.UpdateManagement/0.8.73)
> 📢 **Renamed in v0.7.3**: this module was previously published as `AzStackHci.ManageUpdates`. The new module name aligns with the Azure Local product name (_Microsoft retired the *Azure Stack HCI* brand in late 2024_). The module GUID is preserved across the rename. If you have the old name installed, run:
>
@@ -23,9 +23,7 @@ Azure Local REST API specification (includes update management endpoints): https
**This README (overview + most-recent release notes):**
- [Where to Start](#where-to-start)
-- [What's New in v0.8.72](#whats-new-in-v0872)
-- [What's New in v0.8.7](#whats-new-in-v087)
-- [What's New in v0.8.4](#whats-new-in-v084)
+- [What's New in v0.8.73](#whats-new-in-v0873)
- [Files](#files)
- [Prerequisites](#prerequisites)
- [RBAC Requirements](#rbac-requirements) (summary; full reference in [docs/rbac.md](docs/rbac.md))
@@ -88,16 +86,16 @@ If you are new to this module, work through these in order from a regular PowerS
> Most CI/CD pipelines in [Automation-Pipeline-Examples/](Automation-Pipeline-Examples/) are direct implementations of one of these workflows. Start there if you want a copy-pasteable end-to-end pipeline.
-## What's New in v0.8.72
+## What's New in v0.8.73
-**Patch release: pipeline-template polish only.** Moves the `apply-updates.yml` schedule-file author guidance out of the customise marker so corrections reach already-deployed consumers, and zero-pads single-digit step numbers in pipeline display names so the GitHub Actions sidebar / Azure DevOps pipelines list sort in execution order. No public API or export-count change (still 60).
+**Cycle-calendar refinement.** The Step.3 apply-updates schedule audit now shows the per-ring cluster count INLINE in the "Eligible rings" column (instead of a separate column), and the Step.3 pipeline render path actually populates those counts. No public API or export-count change (still 60).
-1. **Fixed**: `apply-updates.yml` (GitHub Actions + Azure DevOps) - the schedule-file author guidance was trapped INSIDE the `# BEGIN/END-AZLOCAL-CUSTOMIZE:schedule-triggers` block. `Update-AzLocalPipelineExample` preserves the marker body verbatim from the consumer's file, so corrections to that guidance (e.g. the v0.8.71 `.github` -> `config` schedule-path fix) could never reach an already-deployed consumer. All guidance is now ABOVE the marker; the marker body holds only the trigger directive (a placeholder comment on GitHub, `trigger: none` on Azure DevOps).
-2. **Changed (display only)**: single-digit pipeline step numbers zero-padded to two digits in all display names / titles - GitHub Actions workflow `name:` fields, Azure DevOps `name:` / stage `displayName:` labels, and the `# Step.N - ` header comments (`Step.0` -> `Step.00` ... `Step.9` -> `Step.09`; `Step.10` unchanged). The GitHub Actions sidebar and Azure DevOps pipelines list sort alphabetically by display name, so `Step.10` previously sorted between `Step.1` and `Step.2`. Functional identifiers (artifact names `azlocal-step.N-*`) and cross-reference prose are unchanged.
+1. **Changed**: `Get-AzLocalApplyUpdatesScheduleCycleCalendar` no longer adds a separate "Clusters in ring(s)" column when `-ClusterRingCounts` is supplied. Instead the per-day calendar relabels the header "Eligible rings" -> "Eligible rings (cluster count)" and appends each ring's count inline to its token, e.g. `` `Prod` (9), `Canary` (3) ``. Dead days still render `_(none - dead day)_`. The per-ring projection table (with `-IncludePerRingSummary`) keeps its separate "Cluster count" column.
+2. **Fixed**: `Export-AzLocalApplyUpdatesScheduleAudit` (the cmdlet the Step.3 `apply-updates-schedule-audit` pipeline calls) never forwarded `-ClusterRingCounts` to the cycle-calendar cmdlet, so the cluster-count enrichment was silently absent from every rendered Step.3 summary. The Export wrapper now builds a ring -> tagged-cluster-count map from the supplied cluster CSV and forwards it, so the inline counts appear whenever a `-ClusterCsvPath` is provided.
-`GENERATED_AGAINST_MODULE_VERSION` bumped from `0.8.71` to `0.8.72` across all bundled pipeline templates.
+`GENERATED_AGAINST_MODULE_VERSION` bumped from `0.8.72` to `0.8.73` across all bundled pipeline templates.
-See [CHANGELOG.md](CHANGELOG.md#0872---2026-06-11) for the full v0.8.72 entry. See [`What's New in v0.8.71`](#whats-new-in-v0871) in the Release History section below for the previous release.
+See [CHANGELOG.md](CHANGELOG.md#0873---2026-06-11) for the full v0.8.73 entry. See [`What's New in v0.8.72`](#whats-new-in-v0872) in the Release History section below for the previous release.
## Files
@@ -576,7 +574,13 @@ This code is provided as-is for educational and reference purposes.
The full What's-New history (v0.7.81 and earlier) has moved to [docs/release-history.md](docs/release-history.md).
-The most recent release notes for **v0.8.72** stay above under [`What's New in v0.8.72`](#whats-new-in-v0872).
+The most recent release notes for **v0.8.73** stay above under [`What's New in v0.8.73`](#whats-new-in-v0873).
+
+### What's New in v0.8.72
+
+**Patch release: pipeline-template polish only.** Moves the `apply-updates.yml` schedule-file author guidance out of the customise marker so corrections reach already-deployed consumers, and zero-pads single-digit step numbers in pipeline display names so the GitHub Actions sidebar / Azure DevOps pipelines list sort in execution order. No public API or export-count change (still 60). `apply-updates.yml` author guidance was trapped inside the `# BEGIN/END-AZLOCAL-CUSTOMIZE:schedule-triggers` block (which `Update-AzLocalPipelineExample` preserves verbatim from the consumer's file), so corrections such as the v0.8.71 `.github` -> `config` schedule-path fix could never reach an already-deployed consumer; all guidance is now ABOVE the marker. Single-digit pipeline step numbers were zero-padded to two digits across all display names / titles (`Step.0` -> `Step.00` ... `Step.9` -> `Step.09`; `Step.10` unchanged) so the GitHub Actions sidebar and Azure DevOps pipelines list sort in execution order.
+
+See [CHANGELOG.md](CHANGELOG.md#0872---2026-06-11) for the full v0.8.72 entry.
### What's New in v0.8.71
diff --git a/AzLocal.UpdateManagement/Tests/AzLocal.UpdateManagement.Tests.ps1 b/AzLocal.UpdateManagement/Tests/AzLocal.UpdateManagement.Tests.ps1
index d338d338..b31e5c61 100644
--- a/AzLocal.UpdateManagement/Tests/AzLocal.UpdateManagement.Tests.ps1
+++ b/AzLocal.UpdateManagement/Tests/AzLocal.UpdateManagement.Tests.ps1
@@ -34,8 +34,8 @@ Describe 'Module: AzLocal.UpdateManagement' {
$script:ModuleInfo | Should -Not -BeNullOrEmpty
}
- It 'Should have version 0.8.72' {
- $script:ModuleInfo.Version | Should -Be '0.8.72'
+ It 'Should have version 0.8.73' {
+ $script:ModuleInfo.Version | Should -Be '0.8.73'
}
It 'Module version constants are in sync between .psm1 and .psd1' {
@@ -88,6 +88,13 @@ Describe 'Module: AzLocal.UpdateManagement' {
$match.Success | Should -BeTrue -Because "README.md TOC must contain a main-body '- [What's New in vX.Y.Z](#whats-new-in-vXYZ)' entry"
$match.Groups['displayed'].Value | Should -Be $manifestVersion -Because 'the TOC main-body What''s New entry must point at the current manifest ModuleVersion'
$match.Groups['anchor'].Value | Should -Be $manifestVersionAnchor -Because "the TOC anchor must collapse to the manifest ModuleVersion (#whats-new-in-v$manifestVersionAnchor)"
+ # The TOC must list ONLY the current release's What's New entry.
+ # Prior versions live under the Release History sub-list (as
+ # indented ` - [...]` entries, which this top-level `^- ` pattern
+ # does not match). Stale top-level entries (e.g. a leftover
+ # "What's New in v0.8.7" from an earlier bump) must be removed.
+ $allTocMatches = [regex]::Matches($readmeContent, $pattern)
+ $allTocMatches.Count | Should -Be 1 -Because "the TOC must list only the current release What's New entry; prior versions belong under Release History (found: $(($allTocMatches | ForEach-Object { $_.Groups['displayed'].Value }) -join ', '))"
}
It 'README.md main body has exactly one "## What''s New" section, pointing at manifest ModuleVersion' {
@@ -7904,7 +7911,7 @@ schedule:
Test-AzLocalApplyUpdatesScheduleCoverage -View Recommend -PipelineYamlPath (Join-Path $calDir 'github-actions') -SchedulePath $schedule -ExportPath $out 6>$null | Out-Null
$md = Get-Content -Path $out -Raw
$md | Should -Match 'Cycle calendar - next 14 day\(s\) \(cycle length: 2 week\(s\)\)'
- $md | Should -Match '\| Date \(UTC\) \| Day \| CycleWeek \| Eligible rings \|( Clusters in ring\(s\) \|)? AllowedUpdateVersions \|'
+ $md | Should -Match '\| Date \(UTC\) \| Day \| CycleWeek \| Eligible rings(?: \(cluster count\))? \| AllowedUpdateVersions \|'
# Should have 14 data rows
$rowCount = ([regex]::Matches($md, '(?m)^\|\s*\d{4}-\d{2}-\d{2}\s*\|')).Count
$rowCount | Should -Be 14
@@ -12905,20 +12912,21 @@ schedule:
$md | Should -Match "$fridayDate.*Canary.*Ring1|$fridayDate.*Ring1.*Canary"
}
- It '-ClusterRingCounts adds a Clusters in ring(s) column on the calendar table' {
+ It '-ClusterRingCounts folds the count inline into the Eligible rings column' {
$counts = @{ Canary = 3; Ring1 = 2; Prod = 9 }
$md = Get-AzLocalApplyUpdatesScheduleCycleCalendar -Schedule $script:ccmd_multi -StartDate $script:ccmd_wk1Mon -AsMarkdown -ClusterRingCounts $counts
- $md | Should -Match '\| Date \(UTC\) \| Day \| CycleWeek \| Eligible rings \| Clusters in ring\(s\) \| AllowedUpdateVersions \|'
- # Day-0 (W1 Monday) has Canary -> count of 3 should appear in the row cell
+ $md | Should -Match '\| Date \(UTC\) \| Day \| CycleWeek \| Eligible rings \(cluster count\) \| AllowedUpdateVersions \|'
+ # Day-0 (W1 Monday) has Canary -> inline count of (3) should appear in the row cell
$w1MonStr = $script:ccmd_wk1Mon.ToString('yyyy-MM-dd')
- $md | Should -Match "$w1MonStr.*``Canary``: 3"
+ $md | Should -Match "$w1MonStr.*``Canary`` \(3\)"
}
- It '-ClusterRingCounts on an overlap day shows per-ring counts plus a (total: N) aggregate' {
+ It '-ClusterRingCounts on an overlap day shows each ring with its own inline count' {
$counts = @{ Canary = 3; Ring1 = 2; Prod = 9 }
$md = Get-AzLocalApplyUpdatesScheduleCycleCalendar -Schedule $script:ccmd_multi -StartDate $script:ccmd_wk1Mon -Days 5 -AsMarkdown -ClusterRingCounts $counts
- # Friday of W1: Canary + Ring1, total = 5
- $md | Should -Match 'total: 5'
+ # Friday of W1: Canary + Ring1, each with its own inline count.
+ $md | Should -Match '`Canary` \(3\)'
+ $md | Should -Match '`Ring1` \(2\)'
}
It '-ClusterRingCounts with -IncludePerRingSummary adds Cluster count column on the per-ring projection table' {
@@ -12931,9 +12939,10 @@ schedule:
$md | Should -Match '\| `Prod` \| 9 \|'
}
- It '-ClusterRingCounts omitted: the legacy 5-column calendar header is used' {
+ It '-ClusterRingCounts omitted: the legacy Eligible rings header (no inline count) is used' {
$md = Get-AzLocalApplyUpdatesScheduleCycleCalendar -Schedule $script:ccmd_multi -StartDate $script:ccmd_wk1Mon -AsMarkdown
- # Must NOT contain the 6-column header.
+ # Must NOT relabel the Eligible rings header or add the old separate column.
+ ($md -match '\| Eligible rings \(cluster count\) \|') | Should -Be $false
($md -match '\| Clusters in ring\(s\) \|') | Should -Be $false
}
@@ -12941,7 +12950,7 @@ schedule:
$counts = @{ canary = 7 }
$md = Get-AzLocalApplyUpdatesScheduleCycleCalendar -Schedule $script:ccmd_clean -StartDate $script:ccmd_wk1Mon -AsMarkdown -ClusterRingCounts $counts
$w1MonStr = $script:ccmd_wk1Mon.ToString('yyyy-MM-dd')
- $md | Should -Match "$w1MonStr.*``Canary``: 7"
+ $md | Should -Match "$w1MonStr.*``Canary`` \(7\)"
}
It '-ClusterRingCounts on dead days shows the dead-day cell' {
@@ -12949,7 +12958,7 @@ schedule:
# Day-1 (Tuesday) in the clean fixture is a dead day.
$md = Get-AzLocalApplyUpdatesScheduleCycleCalendar -Schedule $script:ccmd_clean -StartDate $script:ccmd_wk1Mon -Days 2 -AsMarkdown -ClusterRingCounts $counts
$tueStr = $script:ccmd_wk1Mon.AddDays(1).ToString('yyyy-MM-dd')
- $md | Should -Match "$tueStr.*_\(0 - dead day\)_"
+ $md | Should -Match "$tueStr.*_\(none - dead day\)_"
}
It 'Cycle-wrap row renders the (cycle wraps) annotation in CycleWeek cell' {
@@ -13127,13 +13136,13 @@ schedule:
$md | Should -Match '\| 02:00 \|'
}
- It 'Three optional columns (Cron + Cluster counts + Window match) coexist; Window match sits immediately after Eligible rings' {
+ It 'Optional columns coexist: Cron + inline cluster counts + Window match; Window match sits immediately after Eligible rings' {
$cron = @{ ($script:cccol_wk1Mon.ToString('yyyy-MM-dd')) = @('02:00') }
$rc = @{ Cdn = 30; Prod = 40 }
$wm = @{ Cdn = @{ ($script:cccol_wk1Mon.ToString('yyyy-MM-dd')) = @{ Matching = 30; Total = 30 } } }
$md = Get-AzLocalApplyUpdatesScheduleCycleCalendar -Schedule $script:cccol_cfg -StartDate $script:cccol_wk1Mon -Days 1 -AsMarkdown `
-CronFiringsByDate $cron -ClusterRingCounts $rc -WindowMatchByRingAndDate $wm
- $md | Should -Match '\| Date \(UTC\) \| Ring CRON Start Time
\(apply-updates pipeline\) \| Day \| CycleWeek \| Eligible rings \| Tag Start Window Match \(>=95%\) \| Clusters in ring\(s\) \| AllowedUpdateVersions \|'
+ $md | Should -Match '\| Date \(UTC\) \| Ring CRON Start Time
\(apply-updates pipeline\) \| Day \| CycleWeek \| Eligible rings \(cluster count\) \| Tag Start Window Match \(>=95%\) \| AllowedUpdateVersions \|'
}
}
@@ -16326,6 +16335,8 @@ on:
($allTimes | Sort-Object -Unique) | Should -Contain '02:00'
# WindowMatch should be ABSENT because we didn't supply a ClusterCsvPath.
$global:_s3_calArgs.ContainsKey('WindowMatchByRingAndDate') | Should -BeFalse
+ # ClusterRingCounts is also CSV-derived, so it must be absent too.
+ $global:_s3_calArgs.ContainsKey('ClusterRingCounts') | Should -BeFalse
}
It 'v0.8.6: When PipelineYamlPath AND ClusterCsvPath are both supplied, the cycle calendar gets both new dicts' {
@@ -16404,6 +16415,11 @@ on:
$sample['Total'] | Should -Be 2
# Exactly 1 of the 2 clusters' windows covers 02:00 UTC.
$sample['Matching'] | Should -Be 1
+ # ClusterRingCounts is also forwarded (CSV-derived): 2 Cdn clusters.
+ $global:_s3_calArgs.ContainsKey('ClusterRingCounts') | Should -BeTrue
+ $rc = $global:_s3_calArgs['ClusterRingCounts']
+ $rc | Should -BeOfType 'hashtable'
+ [int]$rc['Cdn'] | Should -Be 2
}
finally {
if (Test-Path -LiteralPath $csvPath) { Remove-Item -LiteralPath $csvPath -Force -ErrorAction SilentlyContinue }
diff --git a/AzLocal.UpdateManagement/docs/release-history.md b/AzLocal.UpdateManagement/docs/release-history.md
index 13154b8c..1c3e68d6 100644
--- a/AzLocal.UpdateManagement/docs/release-history.md
+++ b/AzLocal.UpdateManagement/docs/release-history.md
@@ -4,7 +4,7 @@
>
> **For older releases**, this is the canonical reference; the main README intentionally stays slim so the most recent block is easy to find.
>
-> **For v0.8.72 (the current release)**, see the main [README.md](../README.md#whats-new-in-v0872) `What's New in v0.8.72` section.
+> **For v0.8.73 (the current release)**, see the main [README.md](../README.md#whats-new-in-v0873) `What's New in v0.8.73` section.
---