feat(ApplicationsList): implement ArgoCD Applications List view
Implement the Applications List view for headlamp-argocd-plugin (PRI-189). - Add src/components/ApplicationsList.tsx with table of all ArgoCD Applications showing: app name, namespace, project, health status, sync status, target revision, and last synced time - Health/sync status badges using ArgoCD color conventions - Filter controls: health dropdown, sync dropdown, project dropdown - Friendly "ArgoCD not detected" error state when ArgoCD is unreachable - Add src/api/argocd.ts with ArgoCD API types (Application, ApplicationsList) - Add unit tests in src/__tests__/ApplicationsList.test.tsx: - Pure function tests for healthStatusToColor and syncStatusToColor - Filter logic unit tests - Component smoke tests (loading, error, data, empty states) - Replace stub view in src/index.tsx with ApplicationsList component Co-Authored-By: Paperclip <noreply@paperclip.ing>
This commit is contained in:
@@ -0,0 +1,100 @@
|
||||
// --- ArgoCD API types ---
|
||||
|
||||
/**
|
||||
* Health status values returned by ArgoCD Application status.
|
||||
*/
|
||||
export type ArgoCDHealthStatus =
|
||||
| "Healthy"
|
||||
| "Degraded"
|
||||
| "Progressing"
|
||||
| "Missing"
|
||||
| "Unknown";
|
||||
|
||||
/**
|
||||
* Sync status values returned by ArgoCD Application status.
|
||||
*/
|
||||
export type ArgoCDSyncStatus = "Synced" | "OutOfSync" | "Unknown";
|
||||
|
||||
/**
|
||||
* An ArgoCD Application resource.
|
||||
* Matches the ArgoCD server API /api/v1/applications response shape.
|
||||
*/
|
||||
export interface ArgoCDApplication {
|
||||
metadata: {
|
||||
name: string;
|
||||
namespace: string;
|
||||
uid?: string;
|
||||
labels?: Record<string, string>;
|
||||
annotations?: Record<string, string>;
|
||||
creationTimestamp?: string;
|
||||
};
|
||||
spec: {
|
||||
project: string;
|
||||
sourceRepoURL?: string;
|
||||
targetRevision?: string;
|
||||
path?: string;
|
||||
destination?: {
|
||||
server?: string;
|
||||
namespace?: string;
|
||||
name?: string;
|
||||
};
|
||||
sources?: Array<{
|
||||
repoURL?: string;
|
||||
targetRevision?: string;
|
||||
path?: string;
|
||||
}>;
|
||||
};
|
||||
status: {
|
||||
health?: {
|
||||
status: ArgoCDHealthStatus;
|
||||
message?: string;
|
||||
};
|
||||
sync?: {
|
||||
status: ArgoCDSyncStatus;
|
||||
comparedTo?: {
|
||||
destination?: {
|
||||
server?: string;
|
||||
namespace?: string;
|
||||
};
|
||||
source?: {
|
||||
repoURL?: string;
|
||||
path?: string;
|
||||
targetRevision?: string;
|
||||
};
|
||||
};
|
||||
};
|
||||
history?: Array<{
|
||||
dexKey: string; // ISO 8601 timestamp
|
||||
id: number;
|
||||
revision: string;
|
||||
deployStartedAt?: string;
|
||||
triggeredBy?: string;
|
||||
}>;
|
||||
resources?: Array<{
|
||||
kind: string;
|
||||
namespace?: string;
|
||||
name: string;
|
||||
group?: string;
|
||||
status?: string;
|
||||
health?: {
|
||||
status: ArgoCDHealthStatus;
|
||||
};
|
||||
}>;
|
||||
sourceType?: string;
|
||||
summary?: {
|
||||
externalURLs?: string[];
|
||||
images?: string[];
|
||||
};
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Response envelope for the ArgoCD Applications list API.
|
||||
*/
|
||||
export interface ArgoCDApplicationsList {
|
||||
items: ArgoCDApplication[];
|
||||
metadata?: {
|
||||
resourceVersion?: string;
|
||||
remainingItemCount?: number;
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user