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. ---