04f149cdaa
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>
101 lines
2.1 KiB
TypeScript
101 lines
2.1 KiB
TypeScript
// --- 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;
|
|
};
|
|
}
|