{
  "schema": "https://ai-atoms.com/schemas/skill-v1.json",
  "type": "skill",
  "id": "skill/gitops-workflow",
  "version": "1.0.0",
  "name": "Gitops Workflow",
  "description": "Implement GitOps workflows with ArgoCD and Flux for automated, declarative Kubernetes deployments with continuous reconciliation. Use when implementing GitOps practices, automating Kubernetes deplo...",
  "system_prompt_fragment": "# GitOps Workflow\n\nComplete guide to implementing GitOps workflows with ArgoCD and Flux for automated Kubernetes deployments.\n\n## Purpose\n\nImplement declarative, Git-based continuous delivery for Kubernetes using ArgoCD or Flux CD, following OpenGitOps principles.\n\n## Use this skill when\n\n- Set up GitOps for Kubernetes clusters\n- Automate application deployments from Git\n- Implement progressive delivery strategies\n- Manage multi-cluster deployments\n- Configure automated sync policies\n- Set up secret management in GitOps\n\n## Do not use this skill when\n\n- You need a one-off manual deployment\n- You cannot manage cluster access or repo permissions\n- You are not deploying to Kubernetes\n\n## Instructions\n\n1. Define repo layout and desired-state conventions.\n2. Install ArgoCD or Flux and connect clusters.\n3. Configure sync policies, environments, and promotion flow.\n4. Validate rollbacks and secret handling.\n\n## Safety\n\n- Avoid auto-sync to production without approvals.\n- Keep secrets out of Git and use sealed or external secret managers.\n\n## OpenGitOps Principles\n\n1. **Declarative** - Entire system described declaratively\n2. **Versioned and Immutable** - Desired state stored in Git\n3. **Pulled Automatically** - Software agents pull desired state\n4. **Continuously Reconciled** - Agents reconcile actual vs desired state\n\n## ArgoCD Setup\n\n### 1. Installation\n\n```bash\n# Create namespace\nkubectl create namespace argocd\n\n# Install ArgoCD\nkubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml\n\n# Get admin password\nkubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath=\"{.data.password}\" | base64 -d\n```\n\n**Reference:** See `references/argocd-setup.md` for detailed setup\n\n### 2. Repository Structure\n\n```\ngitops-repo/\n├── apps/\n│   ├── production/\n│   │   ├── app1/\n│   │   │   ├── kustomization.yaml\n│   │   │   └── deployment.yaml\n│   │   └── app2/\n│   └── staging/\n├── infrastructure/\n│   ├── ingress-nginx/\n│   ├── cert-manager/\n│   └── monitoring/\n└── argocd/\n    ├── applications/\n    └── projects/\n```\n\n### 3. Create Application\n\n```yaml\n# argocd/applications/my-app.yaml\napiVersion: argoproj.io/v1alpha1\nkind: Application\nmetadata:\n  name: my-app\n  namespace: argocd\nspec:\n  project: default\n  source:\n    repoURL: https://github.com/org/gitops-repo\n    targetRevision: main\n    path: apps/production/my-app\n  destination:\n    server: https://kubernetes.default.svc\n    namespace: production\n  syncPolicy:\n    automated:\n      prune: true\n      selfHeal: true\n    syncOptions:\n    - CreateNamespace=true\n```\n\n### 4. App of Apps Pattern\n\n```yaml\napiVersion: argoproj.io/v1alpha1\nkind: Application\nmetadata:\n  name: applications\n  namespace: argocd\nspec:\n  project: default\n  source:\n    repoURL: https://github.com/org/gitops-repo\n    targetRevision: main\n    path: argocd/applications\n  destination:\n    server: https://kubernetes.default.svc\n    namespace: argocd\n  syncPolicy:\n    automated: {}\n```\n\n## Flux CD Setup\n\n### 1. Installation\n\n```bash\n# Install Flux CLI\ncurl -s https://fluxcd.io/install.sh | sudo bash\n\n# Bootstrap Flux\nflux bootstrap github \\\n  --owner=org \\\n  --repository=gitops-repo \\\n  --branch=main \\\n  --path=clusters/production \\\n  --personal\n```\n\n### 2. Create GitRepository\n\n```yaml\napiVersion: source.toolkit.fluxcd.io/v1\nkind: GitRepository\nmetadata:\n  name: my-app\n  namespace: flux-system\nspec:\n  interval: 1m\n  url: https://github.com/org/my-app\n  ref:\n    branch: main\n```\n\n### 3. Create Kustomization\n\n```yaml\napiVersion: kustomize.toolkit.fluxcd.io/v1\nkind: Kustomization\nmetadata:\n  name: my-app\n  namespace: flux-system\nspec:\n  interval: 5m\n  path: ./deploy\n  prune: true\n  sourceRef:\n    kind: GitRepository\n    name: my-app\n```\n\n## Sync Policies\n\n### Auto-Sync Configuration\n\n**ArgoCD:**\n```yaml\nsyncPolicy:\n  automated:\n    prune: true      # Delete resources not in Git\n    selfHeal: true   # Reconcile manual changes\n    allowEmpty: false\n  retry:\n    limit: 5\n    backoff:\n      duration: 5s\n      factor: 2\n      maxDuration: 3m\n```\n\n**Flux:**\n```yaml\nspec:\n  interval: 1m\n  prune: true\n  wait: true\n  timeout: 5m\n```\n\n**Reference:** See `references/sync-policies.md`\n\n## Progressive Delivery\n\n### Canary Deployment with ArgoCD Rollouts\n\n```yaml\napiVersion: argoproj.io/v1alpha1\nkind: Rollout\nmetadata:\n  name: my-app\nspec:\n  replicas: 5\n  strategy:\n    canary:\n      steps:\n      - setWeight: 20\n      - pause: {duration: 1m}\n      - setWeight: 50\n      - pause: {duration: 2m}\n      - setWeight: 100\n```\n\n### Blue-Green Deployment\n\n```yaml\nstrategy:\n  blueGreen:\n    activeService: my-app\n    previewService: my-app-preview\n    autoPromotionEnabled: false\n```\n\n## Secret Management\n\n### External Secrets Operator\n\n```yaml\napiVersion: external-secrets.io/v1beta1\nkind: ExternalSecret\nmetadata:\n  name: db-credentials\nspec:\n  refreshInterval: 1h\n  secretStoreRef:\n    name: aws-secrets-manager\n    kind: SecretStore\n  target:\n    name: db-credentials\n  data:\n  - secretKey: password\n    remoteRef:\n      key: prod/db/password\n```\n\n### Sealed Secrets\n\n```bash\n# Encrypt secret\nkubeseal --format yaml < secret.yaml > sealed-secret.yaml\n\n# Commit sealed-secret.yaml to Git\n```\n\n## Best Practices\n\n1. **Use separate repos or branches** for different environments\n2. **Implement RBAC** for Git repositories\n3. **Enable notifications** for sync failures\n4. **Use health checks** for custom resources\n5. **Implement approval gates** for production\n6. **Keep secrets out of Git** (use External Secrets)\n7. **Use App of Apps pattern** for organization\n8. **Tag releases** for easy rollback\n9. **Monitor sync status** with alerts\n10. **Test changes** in staging first\n\n## Troubleshooting\n\n**Sync failures:**\n```bash\nargocd app get my-app\nargocd app sync my-app --prune\n```\n\n**Out of sync status:**\n```bash\nargocd app diff my-app\nargocd app sync my-app --force\n```\n\n## Related Skills\n\n- `k8s-manifest-generator` - For creating manifests\n- `helm-chart-scaffolding` - For packaging applications",
  "applicable_domains": [
    "devops"
  ],
  "category": "devops",
  "invocation": [
    "/gitops-workflow"
  ],
  "authored_by": "claudeskills.in community",
  "source_url": "https://claudeskills.in/skill/gitops-workflow",
  "provenance": {
    "source": "claudeskills.in",
    "source_url": "https://claudeskills.in/skill/gitops-workflow",
    "license": "unknown",
    "imported_at": "2026-09-03",
    "notes": "Aggregated by claudeskills.in from community GitHub lists."
  },
  "tags": [
    "claudeskills",
    "devops"
  ],
  "lifecycle": "draft"
}