@skyhook-io/k8s-ui 1.8.10 → 1.8.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +7 -6
- package/src/assets/gitops/argocd.png +0 -0
- package/src/assets/gitops/flux.svg +7 -0
- package/src/components/applications/AppChips.tsx +10 -0
- package/src/components/applications/ApplicationDetail.test.tsx +697 -0
- package/src/components/applications/ApplicationDetail.tsx +3269 -474
- package/src/components/applications/ApplicationsView.tsx +62 -10
- package/src/components/applications/applications-view.test.tsx +47 -0
- package/src/components/applications/index.ts +1 -1
- package/src/components/audit/AuditAlerts.tsx +14 -10
- package/src/components/checks/ChecksView.tsx +2 -3
- package/src/components/checks/severity.ts +14 -10
- package/src/components/cluster-switcher/ClusterSwitcher.tsx +2 -2
- package/src/components/compare/CompareResourcePicker.tsx +2 -2
- package/src/components/gitops/GitOpsDetailLayout.tsx +13 -3
- package/src/components/gitops/GitOpsGraphFilterRail.tsx +2 -1
- package/src/components/gitops/GitOpsTableView.tsx +13 -6
- package/src/components/gitops/ManagedResourcesList.tsx +8 -11
- package/src/components/gitops/SyncCountdown.tsx +26 -17
- package/src/components/gitops/SyncOptionsDialog.test.ts +48 -0
- package/src/components/gitops/SyncOptionsDialog.tsx +190 -46
- package/src/components/gitops/insights/ArgoResourceDiff.tsx +172 -0
- package/src/components/gitops/insights/GitOpsInsightViews.tsx +474 -121
- package/src/components/gitops/insights/index.ts +1 -0
- package/src/components/gitops/insights/insights-helpers.test.ts +102 -1
- package/src/components/gitops/insights/insights-helpers.ts +74 -1
- package/src/components/gitops/tree/GitOpsTreeGraph.tsx +10 -2
- package/src/components/issues/IssuesView.tsx +91 -52
- package/src/components/issues/ResourceIssuesSection.test.tsx +39 -6
- package/src/components/issues/ResourceIssuesSection.tsx +46 -144
- package/src/components/issues/index.ts +3 -0
- package/src/components/issues/issue-timing.ts +53 -0
- package/src/components/issues/issues.test.ts +102 -1
- package/src/components/issues/severity.ts +3 -0
- package/src/components/logs/LogCore.tsx +14 -4
- package/src/components/logs/WorkloadLogsViewer.tsx +31 -6
- package/src/components/logs/useLogStream.ts +8 -1
- package/src/components/namespace-switcher/NamespacePicker.tsx +86 -107
- package/src/components/resources/ResourcesSidebar.test.tsx +71 -0
- package/src/components/resources/ResourcesSidebar.tsx +46 -46
- package/src/components/resources/ResourcesView.selected-kind.test.ts +143 -0
- package/src/components/resources/ResourcesView.tsx +233 -51
- package/src/components/resources/renderers/AWSMachineRenderer.tsx +3 -2
- package/src/components/resources/renderers/AWSManagedClusterRenderer.tsx +3 -2
- package/src/components/resources/renderers/AWSManagedControlPlaneRenderer.tsx +3 -2
- package/src/components/resources/renderers/AWSManagedMachinePoolRenderer.tsx +3 -2
- package/src/components/resources/renderers/AzureMachineRenderer.tsx +3 -2
- package/src/components/resources/renderers/AzureManagedControlPlaneRenderer.tsx +3 -2
- package/src/components/resources/renderers/AzureManagedMachinePoolRenderer.tsx +3 -2
- package/src/components/resources/renderers/CAPIClusterRenderer.tsx +3 -2
- package/src/components/resources/renderers/CAPIKubeadmControlPlaneRenderer.tsx +3 -2
- package/src/components/resources/renderers/CAPIMachineDeploymentRenderer.tsx +3 -2
- package/src/components/resources/renderers/CAPIMachineHealthCheckRenderer.tsx +3 -2
- package/src/components/resources/renderers/CAPIMachinePoolRenderer.tsx +3 -2
- package/src/components/resources/renderers/CAPIMachineRenderer.tsx +3 -2
- package/src/components/resources/renderers/CAPIMachineSetRenderer.tsx +3 -2
- package/src/components/resources/renderers/CertificateRenderer.tsx +3 -2
- package/src/components/resources/renderers/CertificateRequestRenderer.tsx +3 -2
- package/src/components/resources/renderers/ClusterComplianceReportRenderer.tsx +2 -2
- package/src/components/resources/renderers/CompositeRenderer.tsx +3 -2
- package/src/components/resources/renderers/CronWorkflowRenderer.tsx +99 -0
- package/src/components/resources/renderers/ExternalSecretRenderer.tsx +3 -2
- package/src/components/resources/renderers/GCPMachineRenderer.tsx +3 -2
- package/src/components/resources/renderers/GCPManagedControlPlaneRenderer.tsx +3 -2
- package/src/components/resources/renderers/GCPManagedMachinePoolRenderer.tsx +3 -2
- package/src/components/resources/renderers/GRPCRouteRenderer.tsx +7 -3
- package/src/components/resources/renderers/GatewayClassRenderer.tsx +3 -2
- package/src/components/resources/renderers/HTTPRouteRenderer.tsx +7 -3
- package/src/components/resources/renderers/JobRenderer.tsx +3 -1
- package/src/components/resources/renderers/KarpenterEC2NodeClassRenderer.tsx +3 -2
- package/src/components/resources/renderers/KarpenterNodeClaimRenderer.tsx +3 -2
- package/src/components/resources/renderers/KarpenterNodePoolRenderer.tsx +3 -2
- package/src/components/resources/renderers/KedaScaledJobRenderer.tsx +3 -2
- package/src/components/resources/renderers/KedaScaledObjectRenderer.tsx +3 -2
- package/src/components/resources/renderers/ManagedResourceRenderer.tsx +3 -2
- package/src/components/resources/renderers/PVCRenderer.tsx +3 -2
- package/src/components/resources/renderers/PrometheusRuleRenderer.tsx +2 -2
- package/src/components/resources/renderers/SbomReportRenderer.tsx +2 -2
- package/src/components/resources/renderers/SealedSecretRenderer.tsx +3 -2
- package/src/components/resources/renderers/SecretRenderer.tsx +2 -0
- package/src/components/resources/renderers/SecretStoreRenderer.tsx +3 -2
- package/src/components/resources/renderers/ServiceRenderer.tsx +58 -40
- package/src/components/resources/renderers/SimpleRouteRenderer.tsx +7 -3
- package/src/components/resources/renderers/VulnerabilityReportRenderer.tsx +2 -2
- package/src/components/resources/renderers/WorkflowRenderer.test.tsx +43 -0
- package/src/components/resources/renderers/WorkflowRenderer.tsx +60 -78
- package/src/components/resources/renderers/index.ts +1 -0
- package/src/components/resources/resource-utils-argo.test.ts +18 -1
- package/src/components/resources/resource-utils-argo.ts +8 -0
- package/src/components/resources/resource-utils-capi.ts +1 -1
- package/src/components/resources/resource-utils.ts +31 -0
- package/src/components/shared/DetailShell.tsx +2 -2
- package/src/components/shared/ResourceActionsBar.tsx +142 -111
- package/src/components/shared/ResourceRendererDispatch.tsx +33 -4
- package/src/components/shared/UnifiedDiff.tsx +51 -0
- package/src/components/shared/index.ts +1 -0
- package/src/components/timeline/TimelineList.tsx +375 -354
- package/src/components/timeline/TimelineStrip.test.tsx +194 -0
- package/src/components/timeline/TimelineStrip.tsx +836 -0
- package/src/components/timeline/TimelineSwimlanes.test.tsx +1028 -0
- package/src/components/timeline/TimelineSwimlanes.tsx +2498 -593
- package/src/components/timeline/TimelineToolbar.test.tsx +320 -0
- package/src/components/timeline/TimelineToolbar.tsx +759 -0
- package/src/components/timeline/TimelineToolbarState.test.tsx +88 -0
- package/src/components/timeline/index.ts +23 -0
- package/src/components/timeline/scrubber-math.test.ts +235 -0
- package/src/components/timeline/scrubber-math.ts +249 -0
- package/src/components/timeline/shared.test.tsx +219 -0
- package/src/components/timeline/shared.tsx +232 -447
- package/src/components/timeline/timeline-filters.test.ts +196 -0
- package/src/components/timeline/timeline-filters.ts +180 -0
- package/src/components/timeline/timeline-lane-sort.test.ts +97 -0
- package/src/components/timeline/timeline-lane-sort.ts +77 -0
- package/src/components/timeline/timeline-live.test.ts +131 -0
- package/src/components/timeline/timeline-live.ts +77 -0
- package/src/components/topology/GroupNode.tsx +9 -2
- package/src/components/topology/K8sResourceNode.test.ts +11 -0
- package/src/components/topology/K8sResourceNode.tsx +387 -243
- package/src/components/topology/TopologyBreadcrumb.tsx +30 -0
- package/src/components/topology/TopologyControls.tsx +3 -1
- package/src/components/topology/TopologyFilterSidebar.tsx +9 -0
- package/src/components/topology/TopologyGraph.tsx +149 -90
- package/src/components/topology/TopologyOverlayBar.tsx +30 -0
- package/src/components/topology/TopologySearch.tsx +25 -17
- package/src/components/topology/index.ts +2 -0
- package/src/components/topology/layout.ts +10 -2
- package/src/components/topology/topology.css +0 -92
- package/src/components/ui/Badge.tsx +6 -1
- package/src/components/ui/CodeViewer.tsx +2 -2
- package/src/components/ui/Collapse.tsx +59 -0
- package/src/components/ui/ConfirmDialog.tsx +7 -3
- package/src/components/ui/DialogPortal.tsx +31 -9
- package/src/components/ui/Input.tsx +24 -0
- package/src/components/ui/MultiSelectPicker.test.tsx +101 -0
- package/src/components/ui/MultiSelectPicker.tsx +167 -0
- package/src/components/ui/PaneLoader.tsx +10 -2
- package/src/components/ui/ResourceBar.tsx +68 -25
- package/src/components/ui/SearchBox.tsx +18 -4
- package/src/components/ui/SearchPillInput.tsx +2 -2
- package/src/components/ui/SelectMenu.tsx +81 -0
- package/src/components/ui/drawer-components.tsx +48 -32
- package/src/components/ui/index.ts +6 -0
- package/src/components/ui/severity-tone.ts +11 -4
- package/src/components/workload/ResourceDetailDrawer.tsx +6 -2
- package/src/components/workload/WorkloadView.tsx +2706 -475
- package/src/components/workload/index.ts +1 -1
- package/src/theme/tailwind-theme.css +1 -0
- package/src/theme/variables.css +2 -1
- package/src/types/core.ts +57 -4
- package/src/types/gitops-insights.ts +69 -1
- package/src/types/gitops.ts +3 -3
- package/src/utils/application-history.test.ts +538 -0
- package/src/utils/application-history.ts +257 -0
- package/src/utils/application-topology.test.ts +198 -0
- package/src/utils/application-topology.ts +261 -0
- package/src/utils/applications.test.ts +201 -1
- package/src/utils/applications.ts +1182 -393
- package/src/utils/index.ts +3 -0
- package/src/utils/navigation.test.ts +32 -1
- package/src/utils/navigation.ts +70 -0
- package/src/utils/resource-hierarchy.test.ts +1024 -1
- package/src/utils/resource-hierarchy.ts +925 -267
- package/src/utils/resource-icons.ts +2 -0
- package/src/utils/topology-neighborhood.test.ts +202 -1
- package/src/utils/topology-neighborhood.ts +194 -13
- package/src/utils/workflow-execution.test.ts +556 -0
- package/src/utils/workflow-execution.ts +814 -0
- package/src/utils/workload-colors.ts +2 -3
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { WorkloadView, type WorkloadTabType } from './WorkloadView'
|
|
1
|
+
export { WorkloadView, type ResourceOwnershipContext, type ServingResourceDetail, type WorkloadTabType } from './WorkloadView'
|
|
2
2
|
export { ResourceDetailDrawer } from './ResourceDetailDrawer'
|
|
@@ -20,6 +20,7 @@
|
|
|
20
20
|
--color-theme-text-secondary: var(--text-secondary);
|
|
21
21
|
--color-theme-text-tertiary: var(--text-tertiary);
|
|
22
22
|
--color-theme-text-disabled: var(--text-disabled);
|
|
23
|
+
--color-warning-text: var(--warning-text);
|
|
23
24
|
|
|
24
25
|
/* Borders */
|
|
25
26
|
--color-theme-border: var(--border-default);
|
package/src/theme/variables.css
CHANGED
|
@@ -49,6 +49,7 @@
|
|
|
49
49
|
--text-secondary: light-dark(#555860, #D8DAE0);
|
|
50
50
|
--text-tertiary: light-dark(#6B7080, #B0B5C0);
|
|
51
51
|
--text-disabled: light-dark(#A0A4AC, #6A7080);
|
|
52
|
+
--warning-text: light-dark(#92400E, #FBBF24);
|
|
52
53
|
|
|
53
54
|
/* ── Borders (lightly blue-tinted in light mode) ── */
|
|
54
55
|
--border-default: light-dark(#D8E0EE, #222840);
|
|
@@ -156,6 +157,6 @@
|
|
|
156
157
|
--shadow-sm: 0 1px 3px rgba(0,0,0,0.3), 0 1px 2px rgba(0,0,0,0.2), 0 0 0 1px rgba(255,255,255,0.06);
|
|
157
158
|
--shadow-md: 0 4px 12px -2px rgba(0,0,0,0.35), 0 2px 4px rgba(0,0,0,0.15), 0 0 0 1px rgba(255,255,255,0.06);
|
|
158
159
|
--shadow-lg: 0 12px 32px -6px rgba(0,0,0,0.3), 0 4px 8px rgba(0,0,0,0.1);
|
|
159
|
-
--shadow-drawer: -
|
|
160
|
+
--shadow-drawer: -12px 0 36px rgba(0,0,0,0.45), -4px 0 14px rgba(0,0,0,0.3), 0 0 0 1px rgba(255,255,255,0.06);
|
|
160
161
|
--topology-node-shadow: 0 2px 6px rgba(0,0,0,0.2), 0 6px 16px rgba(0,0,0,0.15);
|
|
161
162
|
}
|
package/src/types/core.ts
CHANGED
|
@@ -11,6 +11,7 @@ export interface ResourcePermissions {
|
|
|
11
11
|
statefulSets: boolean
|
|
12
12
|
replicaSets: boolean
|
|
13
13
|
ingresses: boolean
|
|
14
|
+
ingressClasses: boolean
|
|
14
15
|
configMaps: boolean
|
|
15
16
|
secrets: boolean
|
|
16
17
|
events: boolean
|
|
@@ -94,7 +95,6 @@ export interface Deployment {
|
|
|
94
95
|
// When adding a new kind here, also update:
|
|
95
96
|
// - ALL_NODE_KINDS in App.tsx
|
|
96
97
|
// - TopologyFilterSidebar.tsx RESOURCE_KINDS array
|
|
97
|
-
// - index.css .topology-icon-* class
|
|
98
98
|
// - K8sResourceNode.tsx NODE_DIMENSIONS
|
|
99
99
|
// - resource-icons.ts KIND_ICON_MAP
|
|
100
100
|
// - kindToPlural in navigation.ts (if irregular plural)
|
|
@@ -123,9 +123,17 @@ export type CoreNodeKind =
|
|
|
123
123
|
| 'PodGroup'
|
|
124
124
|
| 'ConfigMap'
|
|
125
125
|
| 'Secret'
|
|
126
|
+
| 'ServiceAccount'
|
|
127
|
+
| 'SealedSecret'
|
|
128
|
+
| 'ServiceMonitor'
|
|
129
|
+
| 'PodMonitor'
|
|
126
130
|
| 'HorizontalPodAutoscaler'
|
|
127
131
|
| 'Job'
|
|
128
132
|
| 'CronJob'
|
|
133
|
+
| 'Workflow'
|
|
134
|
+
| 'CronWorkflow'
|
|
135
|
+
| 'WorkflowTemplate'
|
|
136
|
+
| 'ClusterWorkflowTemplate'
|
|
129
137
|
| 'PersistentVolumeClaim'
|
|
130
138
|
| 'Node'
|
|
131
139
|
| 'Namespace'
|
|
@@ -168,6 +176,10 @@ export function displayKind(kind: string): string {
|
|
|
168
176
|
const shortNames: Record<string, string> = {
|
|
169
177
|
HorizontalPodAutoscaler: 'HPA',
|
|
170
178
|
PersistentVolumeClaim: 'PVC',
|
|
179
|
+
ServiceAccount: 'Service Account',
|
|
180
|
+
SealedSecret: 'Sealed Secret',
|
|
181
|
+
ServiceMonitor: 'Service Monitor',
|
|
182
|
+
PodMonitor: 'Pod Monitor',
|
|
171
183
|
EC2NodeClass: 'NodeClass',
|
|
172
184
|
KnativeService: 'Knative Svc',
|
|
173
185
|
KnativeConfiguration: 'Knative Config',
|
|
@@ -275,6 +287,10 @@ export interface TimelineEvent {
|
|
|
275
287
|
id: string
|
|
276
288
|
timestamp: string // ISO date string
|
|
277
289
|
source: EventSource // Where event originated: 'informer', 'k8s_event', 'historical'
|
|
290
|
+
// Store-assigned arrival number (monotonic per store instance). The delta
|
|
291
|
+
// cursor keys on it — arrival order, not event time, so late-arriving
|
|
292
|
+
// events can't slip behind a client's cursor.
|
|
293
|
+
seq?: number
|
|
278
294
|
|
|
279
295
|
// Resource identity
|
|
280
296
|
kind: string
|
|
@@ -339,6 +355,20 @@ export function isWorkloadKind(kind: string): boolean {
|
|
|
339
355
|
].includes(kind)
|
|
340
356
|
}
|
|
341
357
|
|
|
358
|
+
export function isDeploymentLikeWorkloadKind(kind: string, group = ''): boolean {
|
|
359
|
+
switch (kind) {
|
|
360
|
+
case 'Deployment':
|
|
361
|
+
case 'ReplicaSet':
|
|
362
|
+
case 'StatefulSet':
|
|
363
|
+
case 'DaemonSet':
|
|
364
|
+
return group === '' || group === 'apps'
|
|
365
|
+
case 'Rollout':
|
|
366
|
+
return group === '' || group === 'argoproj.io'
|
|
367
|
+
default:
|
|
368
|
+
return false
|
|
369
|
+
}
|
|
370
|
+
}
|
|
371
|
+
|
|
342
372
|
// Check if a resource kind is typically managed by another
|
|
343
373
|
export function isManagedKind(kind: string): boolean {
|
|
344
374
|
return ['ReplicaSet', 'Pod', 'Event'].includes(kind)
|
|
@@ -353,7 +383,7 @@ export interface TimelineFilters {
|
|
|
353
383
|
timeRange: TimeRange
|
|
354
384
|
}
|
|
355
385
|
|
|
356
|
-
export type TimeRange = '5m' | '30m' | '1h' | '6h' | '24h' | 'all'
|
|
386
|
+
export type TimeRange = '5m' | '30m' | '1h' | '6h' | '24h' | '7d' | '30d' | 'all'
|
|
357
387
|
|
|
358
388
|
// Cluster info
|
|
359
389
|
export interface ClusterInfo {
|
|
@@ -445,6 +475,7 @@ export interface Relationships {
|
|
|
445
475
|
configRefs?: ResourceRef[]
|
|
446
476
|
consumers?: ResourceRef[]
|
|
447
477
|
scalers?: ResourceRef[]
|
|
478
|
+
storageRefs?: ResourceRef[]
|
|
448
479
|
scaleTarget?: ResourceRef
|
|
449
480
|
pdbs?: ResourceRef[] // PodDisruptionBudgets protecting this workload
|
|
450
481
|
networkPolicies?: ResourceRef[] // NetworkPolicy / CiliumNetworkPolicy / ClusterNetworkPolicy variants selecting this workload
|
|
@@ -822,9 +853,11 @@ export interface UpgradeInfo {
|
|
|
822
853
|
// oci:// chart reference an OCI-sourced upgrade lives at (display only).
|
|
823
854
|
chartRef?: string
|
|
824
855
|
error?: string
|
|
856
|
+
// Machine-readable source-resolution failure, used to make the Helm drawer
|
|
857
|
+
// explain whether tracking an OCI source can help.
|
|
858
|
+
sourceIssue?: 'untracked' | 'repo_index_error' | 'ambiguous_repository'
|
|
825
859
|
// True only when the error is a genuinely untracked source (registering a
|
|
826
|
-
// chart source could fix it)
|
|
827
|
-
// classic ambiguity. Gates the "track source" affordance.
|
|
860
|
+
// chart source could fix it). Kept for compatibility; prefer sourceIssue.
|
|
828
861
|
untracked?: boolean
|
|
829
862
|
}
|
|
830
863
|
|
|
@@ -836,6 +869,8 @@ export interface BatchUpgradeInfo {
|
|
|
836
869
|
// Request body for applying new values to a release
|
|
837
870
|
export interface ApplyValuesRequest {
|
|
838
871
|
values: Record<string, unknown>
|
|
872
|
+
version?: string
|
|
873
|
+
repository?: string
|
|
839
874
|
}
|
|
840
875
|
|
|
841
876
|
// Response for previewing values changes
|
|
@@ -1234,10 +1269,28 @@ export interface ImageMetadata {
|
|
|
1234
1269
|
// ============================================================================
|
|
1235
1270
|
|
|
1236
1271
|
// Pod info returned from workload pods endpoint
|
|
1272
|
+
export interface WorkloadPodContainerInfo {
|
|
1273
|
+
name: string
|
|
1274
|
+
init?: boolean
|
|
1275
|
+
ready: boolean
|
|
1276
|
+
restartCount: number
|
|
1277
|
+
}
|
|
1278
|
+
|
|
1237
1279
|
export interface WorkloadPodInfo {
|
|
1238
1280
|
name: string
|
|
1239
1281
|
containers: string[]
|
|
1240
1282
|
ready: boolean
|
|
1283
|
+
phase?: string
|
|
1284
|
+
healthLevel?: HealthStatus
|
|
1285
|
+
reason?: string
|
|
1286
|
+
message?: string
|
|
1287
|
+
restartCount?: number
|
|
1288
|
+
lastTerminationReason?: string
|
|
1289
|
+
createdAt?: string
|
|
1290
|
+
containerStatuses?: WorkloadPodContainerInfo[]
|
|
1291
|
+
stepID?: string
|
|
1292
|
+
stepName?: string
|
|
1293
|
+
stepPhase?: string
|
|
1241
1294
|
}
|
|
1242
1295
|
|
|
1243
1296
|
// SSE event types for workload log streaming
|
|
@@ -32,7 +32,13 @@ export type GitOpsCategory =
|
|
|
32
32
|
| 'Suspended'
|
|
33
33
|
| 'Unknown'
|
|
34
34
|
|
|
35
|
-
|
|
35
|
+
// How a Drift's field entries were computed. `lastAppliedAnnotation` is the
|
|
36
|
+
// built-in path (kubectl.kubernetes.io/last-applied-configuration); `argocd-api`
|
|
37
|
+
// means the diff came from a connected Argo CD server's managed-resource diff.
|
|
38
|
+
// The `(string & {})` arm keeps the union open: a library consumer may lag the
|
|
39
|
+
// backend and receive a source it doesn't recognize — such values MUST render
|
|
40
|
+
// with the neutral fallback (no source label), never crash a switch.
|
|
41
|
+
export type GitOpsDriftSource = 'lastAppliedAnnotation' | 'argocd-api' | (string & {})
|
|
36
42
|
|
|
37
43
|
export interface GitOpsInsightSummary {
|
|
38
44
|
tool: GitOpsTool
|
|
@@ -66,6 +72,21 @@ export interface GitOpsInsightSummary {
|
|
|
66
72
|
// Finalizers blocking deletion. When stuck, naming the finalizer points
|
|
67
73
|
// the user at the controller they need to investigate.
|
|
68
74
|
finalizers?: string[]
|
|
75
|
+
// Argo comparison-coverage disclosure: the field exclusions declared in
|
|
76
|
+
// spec.ignoreDifferences that suppress drift from comparison (both Argo's
|
|
77
|
+
// and Radar's). Undefined for Flux roots and Applications without any
|
|
78
|
+
// exclusions. unsupportedRuleCount counts entries Radar does NOT evaluate
|
|
79
|
+
// (jqPathExpressions / managedFieldsManagers rules) — the
|
|
80
|
+
// drift panel may surface fields Argo's own UI suppresses.
|
|
81
|
+
ignoredDifferences?: GitOpsIgnoredDifferences
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
export interface GitOpsIgnoredDifferences {
|
|
85
|
+
ruleCount: number
|
|
86
|
+
unsupportedRuleCount: number
|
|
87
|
+
// Sorted unique "Group/Kind" targets ("Kind" for core resources,
|
|
88
|
+
// "group/*" for a group-wide rule that omits kind).
|
|
89
|
+
kinds: string[]
|
|
69
90
|
}
|
|
70
91
|
|
|
71
92
|
export interface GitOpsInsightRef {
|
|
@@ -192,6 +213,53 @@ export interface GitOpsCapabilities {
|
|
|
192
213
|
syncWithSource: boolean
|
|
193
214
|
selectiveSync: boolean
|
|
194
215
|
rollback: boolean
|
|
216
|
+
// True on an Argo CD Application detail when the Argo CD integration is
|
|
217
|
+
// connected, meaning the full Git-rendered desired-vs-live diff endpoint
|
|
218
|
+
// (/api/argo/applications/{ns}/{name}/resource-diff) can be called for this
|
|
219
|
+
// app's managed resources. Absent/false → offer only the last-applied field
|
|
220
|
+
// diff and (for disconnected Argo apps) the "connect Argo CD" hint.
|
|
221
|
+
argoDiffAvailable?: boolean
|
|
222
|
+
// True when the Argo CD integration has settings saved, even if the live
|
|
223
|
+
// connection is down / the token is rejected. Paired with argoDiffAvailable to
|
|
224
|
+
// tell "not set up" (offer Connect) from "set up but disconnected" (offer
|
|
225
|
+
// Reconnect) — instead of advertising a diff that would fail.
|
|
226
|
+
argoConfigured?: boolean
|
|
227
|
+
// True on an Argo CD Application detail when the integration is connected,
|
|
228
|
+
// meaning the revision-metadata endpoint can resolve Git commit details
|
|
229
|
+
// (author, message, signature) for this app's deployed revisions.
|
|
230
|
+
revisionMetadataAvailable?: boolean
|
|
195
231
|
unsupportedReason?: string
|
|
196
232
|
warnings?: string[]
|
|
197
233
|
}
|
|
234
|
+
|
|
235
|
+
// Response of GET /api/argo/applications/{ns}/{name}/revision-metadata — the Git
|
|
236
|
+
// commit metadata for one deployed revision. Every field is best-effort (varies
|
|
237
|
+
// across Argo CD versions); signatureInfo non-empty means a signature was checked.
|
|
238
|
+
export interface ArgoRevisionMetadata {
|
|
239
|
+
author?: string
|
|
240
|
+
date?: string
|
|
241
|
+
tags?: string[]
|
|
242
|
+
message?: string
|
|
243
|
+
signatureInfo?: string
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
// Response of GET /api/argo/applications/{ns}/{name}/resource-diff. `desired`
|
|
247
|
+
// is the Git-rendered manifest, `live` the normalized cluster state — both YAML
|
|
248
|
+
// for the line-by-line view. `fieldEntries` is the same diff structured per
|
|
249
|
+
// path for a compact summary. `redacted` is set when Secret values were masked
|
|
250
|
+
// server-side; `hook` marks Argo sync-hook resources.
|
|
251
|
+
export interface GitOpsResourceDiff {
|
|
252
|
+
source: string
|
|
253
|
+
desired: string
|
|
254
|
+
live: string
|
|
255
|
+
fieldEntries: GitOpsResourceDiffFieldEntry[]
|
|
256
|
+
redacted: boolean
|
|
257
|
+
hook: boolean
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
export interface GitOpsResourceDiffFieldEntry {
|
|
261
|
+
path: string
|
|
262
|
+
op: 'added' | 'removed' | 'changed'
|
|
263
|
+
desired?: string
|
|
264
|
+
live?: string
|
|
265
|
+
}
|
package/src/types/gitops.ts
CHANGED
|
@@ -254,7 +254,7 @@ export interface ArgoAppStatus {
|
|
|
254
254
|
* ArgoCD status patterns:
|
|
255
255
|
* - sync.status: Synced, OutOfSync, Unknown
|
|
256
256
|
* - health.status: Healthy, Progressing, Degraded, Suspended, Missing, Unknown
|
|
257
|
-
* - operationState.phase: Running, Succeeded, Failed, Error
|
|
257
|
+
* - operationState.phase: Running, Terminating, Succeeded, Failed, Error
|
|
258
258
|
*/
|
|
259
259
|
export function argoStatusToGitOpsStatus(status: ArgoAppStatus): GitOpsStatus {
|
|
260
260
|
const syncStatus = status.sync?.status
|
|
@@ -267,7 +267,7 @@ export function argoStatusToGitOpsStatus(status: ArgoAppStatus): GitOpsStatus {
|
|
|
267
267
|
sync = 'Synced'
|
|
268
268
|
} else if (syncStatus === 'OutOfSync') {
|
|
269
269
|
sync = 'OutOfSync'
|
|
270
|
-
} else if (opPhase === 'Running') {
|
|
270
|
+
} else if (opPhase === 'Running' || opPhase === 'Terminating') {
|
|
271
271
|
sync = 'Reconciling'
|
|
272
272
|
}
|
|
273
273
|
|
|
@@ -288,7 +288,7 @@ export function argoStatusToGitOpsStatus(status: ArgoAppStatus): GitOpsStatus {
|
|
|
288
288
|
}
|
|
289
289
|
|
|
290
290
|
// Override with operation state if active
|
|
291
|
-
if (opPhase === 'Running') {
|
|
291
|
+
if (opPhase === 'Running' || opPhase === 'Terminating') {
|
|
292
292
|
health = 'Progressing'
|
|
293
293
|
} else if (opPhase === 'Failed' || opPhase === 'Error') {
|
|
294
294
|
health = 'Degraded'
|