feat: center section divider to match table width (#2698)

The '========== Updated Releases ==========' header was a fixed 38
chars regardless of the table width below it. Now the divider line
is extended to match the table's visual width, with the title text
centered within the '=' borders.

- Add TableVisualWidth() to measure table width via runewidth
- Add HeaderDividerCentered() and HeaderDividerCenteredStyled()
  for centered dividers with optional bold+blue ANSI styling
- Refactor DisplayAffectedReleases to build the table first, then
  compute its width before logging the header
- Update all test snapshots and integration test output files

Signed-off-by: yxxhero <aiopsclub@163.com>
This commit is contained in:
yxxhero
2026-07-10 21:17:35 +08:00
committed by GitHub
parent 30f529f529
commit a9e4a8518a
59 changed files with 191 additions and 78 deletions
@@ -23,12 +23,12 @@ GROUP RELEASES
processing releases in group 1/1: default//foo
========== Updated Releases ==========
================== Updated Releases ===================
NAME NAMESPACE CHART VERSION DURATION
foo stable/mychart1 3.1.0 0s
========== Deleted Releases ==========
==== Deleted Releases =====
NAME NAMESPACE DURATION
bar 0s
@@ -26,12 +26,12 @@ GROUP RELEASES
processing releases in group 1/1: default//foo
WARNING: release foo needs bar, but bar is not installed due to installed: false. Either mark bar as installed or remove bar from foo's needs
========== Updated Releases ==========
================== Updated Releases ===================
NAME NAMESPACE CHART VERSION DURATION
foo stable/mychart1 3.1.0 0s
========== Deleted Releases ==========
==== Deleted Releases =====
NAME NAMESPACE DURATION
bar 0s
@@ -20,7 +20,7 @@ GROUP RELEASES
processing releases in group 1/2: default//bar
processing releases in group 2/2: default//foo
========== Deleted Releases ==========
==== Deleted Releases =====
NAME NAMESPACE DURATION
bar 0s
foo 0s
@@ -20,7 +20,7 @@ GROUP RELEASES
processing releases in group 1/2: default//foo
processing releases in group 2/2: default//bar
========== Deleted Releases ==========
==== Deleted Releases =====
NAME NAMESPACE DURATION
foo 0s
bar 0s
@@ -26,12 +26,12 @@ GROUP RELEASES
processing releases in group 1/1: default//bar
WARNING: release bar needs foo, but foo is not installed due to installed: false. Either mark foo as installed or remove foo from bar's needs
========== Updated Releases ==========
================== Updated Releases ===================
NAME NAMESPACE CHART VERSION DURATION
bar stable/mychart2 3.1.0 0s
========== Deleted Releases ==========
==== Deleted Releases =====
NAME NAMESPACE DURATION
foo 0s
@@ -23,12 +23,12 @@ GROUP RELEASES
processing releases in group 1/1: default//bar
========== Updated Releases ==========
================== Updated Releases ===================
NAME NAMESPACE CHART VERSION DURATION
bar stable/mychart2 3.1.0 0s
========== Deleted Releases ==========
==== Deleted Releases =====
NAME NAMESPACE DURATION
foo 0s
@@ -24,7 +24,7 @@ update strategy - sync success
processing releases in group 2/2: default//foo
getting deployed release version failed: Failed to get the version for: mychart1
========== Updated Releases ==========
================== Updated Releases ===================
NAME NAMESPACE CHART VERSION DURATION
baz stable/mychart3 3.1.0 0s
bar stable/mychart2 3.1.0 0s
@@ -24,7 +24,7 @@ update strategy - sync success
processing releases in group 2/2: default//foo
getting deployed release version failed: Failed to get the version for: mychart1
========== Updated Releases ==========
================== Updated Releases ===================
NAME NAMESPACE CHART VERSION DURATION
baz stable/mychart3 3.1.0 0s
bar stable/mychart2 3.1.0 0s
@@ -22,7 +22,7 @@ processing releases in group 1/2: default//baz, default//bar
processing releases in group 2/2: default//foo
getting deployed release version failed: Failed to get the version for: mychart1
========== Updated Releases ==========
================== Updated Releases ===================
NAME NAMESPACE CHART VERSION DURATION
baz stable/mychart3 3.1.0 0s
bar stable/mychart2 3.1.0 0s
@@ -22,7 +22,7 @@ processing releases in group 1/2: default//baz, default//bar
processing releases in group 2/2: default//foo
getting deployed release version failed: Failed to get the version for: mychart1
========== Updated Releases ==========
================== Updated Releases ===================
NAME NAMESPACE CHART VERSION DURATION
baz stable/mychart3 3.1.0 0s
bar stable/mychart2 3.1.0 0s
+1 -1
View File
@@ -24,7 +24,7 @@ getting deployed release version failed: unexpected list key: listkey(filter=^ba
processing releases in group 2/2: default//foo
getting deployed release version failed: unexpected list key: listkey(filter=^foo$,flags=--kube-context default --uninstalling --deployed --failed --pending) not found in
========== Updated Releases ==========
================== Updated Releases ===================
NAME NAMESPACE CHART VERSION DURATION
baz stable/mychart3 0s
bar stable/mychart2 0s
+2 -2
View File
@@ -46,7 +46,7 @@ processing releases in group 3/5: default//anotherbackend
processing releases in group 4/5: default//backend-v2
processing releases in group 5/5: default//frontend-v3
========== Updated Releases ==========
========================== Updated Releases ===========================
NAME NAMESPACE CHART VERSION DURATION
logging charts/fluent-bit 3.1.0 0s
front-proxy stable/envoy 3.1.0 0s
@@ -57,7 +57,7 @@ backend-v2 charts/backend 3.1.0 0s
frontend-v3 charts/frontend 3.1.0 0s
========== Deleted Releases ==========
======== Deleted Releases ========
NAME NAMESPACE DURATION
frontend-v1 0s
backend-v1 0s
@@ -22,7 +22,7 @@ getting deployed release version failed: Failed to get the version for: mychart1
processing releases in group 2/2: default/testNamespace/bar
getting deployed release version failed: Failed to get the version for: mychart2
========== Updated Releases ==========
==================== Updated Releases =====================
NAME NAMESPACE CHART VERSION DURATION
foo testNamespace stable/mychart1 0s
bar testNamespace stable/mychart2 0s
+1 -1
View File
@@ -22,7 +22,7 @@ getting deployed release version failed: Failed to get the version for: mychart1
processing releases in group 2/2: default//bar
getting deployed release version failed: Failed to get the version for: mychart2
========== Updated Releases ==========
================== Updated Releases ===================
NAME NAMESPACE CHART VERSION DURATION
foo stable/mychart1 0s
bar stable/mychart2 0s
@@ -22,7 +22,7 @@ getting deployed release version failed: Failed to get the version for: mychart2
processing releases in group 2/2: default/testNamespace/foo
getting deployed release version failed: Failed to get the version for: mychart1
========== Updated Releases ==========
==================== Updated Releases =====================
NAME NAMESPACE CHART VERSION DURATION
bar testNamespace stable/mychart2 0s
foo testNamespace stable/mychart1 0s
+1 -1
View File
@@ -22,7 +22,7 @@ getting deployed release version failed: Failed to get the version for: mychart2
processing releases in group 2/2: default//foo
getting deployed release version failed: Failed to get the version for: mychart1
========== Updated Releases ==========
================== Updated Releases ===================
NAME NAMESPACE CHART VERSION DURATION
bar stable/mychart2 0s
foo stable/mychart1 0s
@@ -28,13 +28,13 @@ getting deployed release version failed: Failed to get the version for: mychart2
processing releases in group 2/2: default/ns1/foo
getting deployed release version failed: Failed to get the version for: mychart1
========== Updated Releases ==========
================== Updated Releases ===================
NAME NAMESPACE CHART VERSION DURATION
bar ns1 stable/mychart2 0s
foo ns1 stable/mychart1 0s
========== Deleted Releases ==========
==== Deleted Releases =====
NAME NAMESPACE DURATION
bar ns2 0s
@@ -22,7 +22,7 @@ getting deployed release version failed: Failed to get the version for: mychart2
processing releases in group 2/2: default/ns1/foo
getting deployed release version failed: Failed to get the version for: mychart1
========== Updated Releases ==========
================== Updated Releases ===================
NAME NAMESPACE CHART VERSION DURATION
bar ns2 stable/mychart2 0s
foo ns1 stable/mychart1 0s
@@ -22,7 +22,7 @@ getting deployed release version failed: Failed to get the version for: mychart1
processing releases in group 2/2: default/ns2/bar
getting deployed release version failed: Failed to get the version for: mychart2
========== Updated Releases ==========
================== Updated Releases ===================
NAME NAMESPACE CHART VERSION DURATION
foo ns1 stable/mychart1 0s
bar ns2 stable/mychart2 0s
@@ -47,7 +47,7 @@ GROUP RELEASES
processing releases in group 1/2: default/default/external-secrets
processing releases in group 2/2: default/default/my-release
========== Updated Releases ==========
======================= Updated Releases ========================
NAME NAMESPACE CHART VERSION DURATION
external-secrets default incubator/raw 3.1.0 0s
my-release default incubator/raw 3.1.0 0s