argocd-app-patterns
Use when asking about ArgoCD applications, Helm chart deployment via ArgoCD, sync policies, or typed Helm values patterns.
15 stars
Best use case
argocd-app-patterns is best used when you need a repeatable AI agent workflow instead of a one-off prompt.
Use when asking about ArgoCD applications, Helm chart deployment via ArgoCD, sync policies, or typed Helm values patterns.
Teams using argocd-app-patterns should expect a more consistent output, faster repeated execution, less prompt rewriting.
When to use this skill
- You want a reusable workflow that can be run more than once with consistent structure.
When not to use this skill
- You only need a quick one-off answer and do not need a reusable workflow.
- You cannot install or maintain the underlying files, dependencies, or repository context.
Installation
Claude Code / Cursor / Codex
$curl -o ~/.claude/skills/argocd-app-patterns/SKILL.md --create-dirs "https://raw.githubusercontent.com/shepherdjerred/monorepo/main/packages/dotfiles/dot_agents/skills/argocd-app-patterns/SKILL.md"
Manual Installation
- Download SKILL.md from GitHub
- Place it in
.claude/skills/argocd-app-patterns/SKILL.mdinside your project - Restart your AI agent — it will auto-discover the skill
How argocd-app-patterns Compares
| Feature / Agent | argocd-app-patterns | Standard Approach |
|---|---|---|
| Platform Support | Not specified | Limited / Varies |
| Context Awareness | High | Baseline |
| Installation Complexity | Unknown | N/A |
Frequently Asked Questions
What does this skill do?
Use when asking about ArgoCD applications, Helm chart deployment via ArgoCD, sync policies, or typed Helm values patterns.
Where can I find the source code?
You can find the source code on GitHub using the link provided at the top of the page.
SKILL.md Source
# ArgoCD Application Patterns
## Overview
ArgoCD applications manage Helm charts and sync them to the cluster. All apps use typed Helm values via `HelmValuesForChart<"chart-name">` for compile-time safety.
## Standard Application Pattern
### Step 1: Create Application File
Create `src/cdk8s/src/resources/argo-applications/myapp.ts`:
```typescript
import { Chart } from "cdk8s";
import { Application } from "../../generated/imports/argoproj.io.ts";
import versions from "../../versions.ts";
import type { HelmValuesForChart } from "../../misc/typed-helm-parameters.ts";
import { createIngress } from "../../misc/tailscale.ts";
export function createMyAppApp(chart: Chart) {
// Optional: Create Tailscale ingress
createIngress(
chart,
"myapp-ingress",
"myapp",
"myapp-service",
8080,
["myapp"],
false,
);
// Define typed Helm values
const myAppValues: HelmValuesForChart<"myapp"> = {
replicaCount: 1,
service: {
type: "ClusterIP",
port: 8080,
},
persistence: {
enabled: true,
storageClass: "zfs-ssd",
size: "8Gi",
},
};
// Create ArgoCD Application
return new Application(chart, "myapp-app", {
metadata: {
name: "myapp",
},
spec: {
project: "default",
source: {
repoUrl: "https://charts.example.com",
targetRevision: versions["myapp"],
chart: "myapp",
helm: {
valuesObject: myAppValues,
},
},
destination: {
server: "https://kubernetes.default.svc",
namespace: "myapp",
},
syncPolicy: {
automated: {},
syncOptions: ["CreateNamespace=true"],
},
},
});
}
```
### Step 2: Add Version
Edit `src/cdk8s/src/versions.ts`:
```typescript
const versions = {
// renovate: datasource=helm registryUrl=https://charts.example.com versioning=semver
myapp: "1.2.3",
};
```
### Step 3: Register in Apps Chart
Edit `src/cdk8s/src/cdk8s-charts/apps.ts`:
```typescript
import { createMyAppApp } from "../resources/argo-applications/myapp.ts";
export async function createAppsChart(app: App) {
const chart = new Chart(app, "apps", {
namespace: "argocd",
disableResourceNameHashes: true,
});
// ... existing apps
createMyAppApp(chart);
}
```
## Sync Policy Options
### Basic Auto-Sync
```typescript
syncPolicy: {
automated: {},
syncOptions: ["CreateNamespace=true"],
}
```
### Aggressive Sync (Prune + Self-Heal)
```typescript
syncPolicy: {
automated: {
prune: true, // Delete removed resources
selfHeal: true, // Revert manual changes
},
syncOptions: ["CreateNamespace=true"],
}
```
### Server-Side Apply (Large Configs)
```typescript
syncPolicy: {
automated: {},
syncOptions: ["CreateNamespace=true", "ServerSideApply=true"],
}
```
## Namespace with Pod Security
```typescript
import { Namespace } from "cdk8s-plus-31";
new Namespace(chart, "myapp-namespace", {
metadata: {
name: "myapp",
labels: {
"pod-security.kubernetes.io/enforce": "restricted",
"pod-security.kubernetes.io/audit": "restricted",
"pod-security.kubernetes.io/warn": "restricted",
},
},
});
```
## Ignore Differences (CRD Status)
```typescript
return new Application(chart, "myapp-app", {
spec: {
// ... source, destination, syncPolicy
ignoreDifferences: [
{
group: "apiextensions.k8s.io",
kind: "CustomResourceDefinition",
jsonPointers: ["/status"],
},
],
},
});
```
## External Database Pattern
```typescript
import { createMyAppPostgreSQLDatabase } from "./myapp-postgres.ts";
export function createMyAppApp(chart: Chart) {
// Create PostgreSQL via postgres-operator
createMyAppPostgreSQLDatabase(chart);
const values: HelmValuesForChart<"myapp"> = {
postgresql: {
install: false, // Use external DB
},
global: {
psql: {
password: {
secret: "myapp.myapp-postgresql.credentials.postgresql.acid.zalan.do",
key: "password",
},
main: {
host: "myapp-postgresql",
port: 5432,
database: "myapp",
username: "myapp",
},
},
},
};
// ... create Application
}
```
## Complex Example: Prometheus Stack
```typescript
export async function createPrometheusApp(chart: Chart) {
const prometheusValues: HelmValuesForChart<"kube-prometheus-stack"> = {
// Disable unavailable components
kubeProxy: { enabled: false },
kubeScheduler: { enabled: false },
// Grafana with external PostgreSQL
grafana: {
"grafana.ini": {
database: {
type: "postgres",
host: "grafana-postgresql:5432",
},
},
persistence: {
enabled: true,
storageClassName: "zfs-ssd",
},
},
// Prometheus with long retention
prometheus: {
prometheusSpec: {
retention: "180d",
storageSpec: {
volumeClaimTemplate: {
spec: {
storageClassName: "zfs-ssd",
resources: {
requests: { storage: "128Gi" },
},
},
},
},
},
},
// Alertmanager with PagerDuty
alertmanager: {
config: {
receivers: [
{
name: "pagerduty",
pagerduty_configs: [{ routing_key_file: "/path/to/key" }],
},
],
},
},
};
return new Application(chart, "prometheus-app", {
metadata: { name: "prometheus" },
spec: {
source: {
repoUrl: "https://prometheus-community.github.io/helm-charts",
chart: "kube-prometheus-stack",
targetRevision: versions["kube-prometheus-stack"],
helm: { valuesObject: prometheusValues },
},
destination: {
server: "https://kubernetes.default.svc",
namespace: "prometheus",
},
syncPolicy: {
automated: {},
syncOptions: ["CreateNamespace=true", "ServerSideApply=true"],
},
},
});
}
```
## Key Files
- `src/cdk8s/src/resources/argo-applications/argocd.ts` - ArgoCD self-management
- `src/cdk8s/src/resources/argo-applications/prometheus.ts` - Complex example
- `src/cdk8s/src/resources/argo-applications/velero.ts` - Backup system
- `src/cdk8s/src/resources/argo-applications/gitlab.ts` - External DB example
- `src/cdk8s/src/cdk8s-charts/apps.ts` - Apps orchestrationRelated Skills
We are still matching the closest adjacent skills for this page. In the meantime, continue through the full directory.