specweave 0.3.13 → 0.4.1

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.
Files changed (168) hide show
  1. package/CLAUDE.md +506 -17
  2. package/README.md +100 -58
  3. package/bin/install-all.sh +9 -2
  4. package/bin/install-hooks.sh +57 -0
  5. package/bin/specweave.js +16 -0
  6. package/dist/adapters/adapter-base.d.ts +21 -0
  7. package/dist/adapters/adapter-base.d.ts.map +1 -1
  8. package/dist/adapters/adapter-base.js +28 -0
  9. package/dist/adapters/adapter-base.js.map +1 -1
  10. package/dist/adapters/adapter-interface.d.ts +41 -0
  11. package/dist/adapters/adapter-interface.d.ts.map +1 -1
  12. package/dist/adapters/claude/adapter.d.ts +36 -0
  13. package/dist/adapters/claude/adapter.d.ts.map +1 -1
  14. package/dist/adapters/claude/adapter.js +135 -0
  15. package/dist/adapters/claude/adapter.js.map +1 -1
  16. package/dist/adapters/copilot/adapter.d.ts +25 -0
  17. package/dist/adapters/copilot/adapter.d.ts.map +1 -1
  18. package/dist/adapters/copilot/adapter.js +112 -0
  19. package/dist/adapters/copilot/adapter.js.map +1 -1
  20. package/dist/adapters/cursor/adapter.d.ts +36 -0
  21. package/dist/adapters/cursor/adapter.d.ts.map +1 -1
  22. package/dist/adapters/cursor/adapter.js +140 -0
  23. package/dist/adapters/cursor/adapter.js.map +1 -1
  24. package/dist/adapters/generic/adapter.d.ts +25 -0
  25. package/dist/adapters/generic/adapter.d.ts.map +1 -1
  26. package/dist/adapters/generic/adapter.js +111 -0
  27. package/dist/adapters/generic/adapter.js.map +1 -1
  28. package/dist/cli/commands/init.d.ts.map +1 -1
  29. package/dist/cli/commands/init.js +103 -1
  30. package/dist/cli/commands/init.js.map +1 -1
  31. package/dist/cli/commands/plugin.d.ts +37 -0
  32. package/dist/cli/commands/plugin.d.ts.map +1 -0
  33. package/dist/cli/commands/plugin.js +296 -0
  34. package/dist/cli/commands/plugin.js.map +1 -0
  35. package/dist/core/agent-model-manager.d.ts +52 -0
  36. package/dist/core/agent-model-manager.d.ts.map +1 -0
  37. package/dist/core/agent-model-manager.js +120 -0
  38. package/dist/core/agent-model-manager.js.map +1 -0
  39. package/dist/core/cost-tracker.d.ts +108 -0
  40. package/dist/core/cost-tracker.d.ts.map +1 -0
  41. package/dist/core/cost-tracker.js +281 -0
  42. package/dist/core/cost-tracker.js.map +1 -0
  43. package/dist/core/model-selector.d.ts +57 -0
  44. package/dist/core/model-selector.d.ts.map +1 -0
  45. package/dist/core/model-selector.js +115 -0
  46. package/dist/core/model-selector.js.map +1 -0
  47. package/dist/core/phase-detector.d.ts +62 -0
  48. package/dist/core/phase-detector.d.ts.map +1 -0
  49. package/dist/core/phase-detector.js +229 -0
  50. package/dist/core/phase-detector.js.map +1 -0
  51. package/dist/core/plugin-detector.d.ts +96 -0
  52. package/dist/core/plugin-detector.d.ts.map +1 -0
  53. package/dist/core/plugin-detector.js +349 -0
  54. package/dist/core/plugin-detector.js.map +1 -0
  55. package/dist/core/plugin-loader.d.ts +111 -0
  56. package/dist/core/plugin-loader.d.ts.map +1 -0
  57. package/dist/core/plugin-loader.js +319 -0
  58. package/dist/core/plugin-loader.js.map +1 -0
  59. package/dist/core/plugin-manager.d.ts +144 -0
  60. package/dist/core/plugin-manager.d.ts.map +1 -0
  61. package/dist/core/plugin-manager.js +393 -0
  62. package/dist/core/plugin-manager.js.map +1 -0
  63. package/dist/core/schemas/plugin-manifest.schema.json +253 -0
  64. package/dist/core/types/plugin.d.ts +252 -0
  65. package/dist/core/types/plugin.d.ts.map +1 -0
  66. package/dist/core/types/plugin.js +48 -0
  67. package/dist/core/types/plugin.js.map +1 -0
  68. package/dist/integrations/jira/jira-mapper.d.ts +2 -2
  69. package/dist/integrations/jira/jira-mapper.js +2 -2
  70. package/dist/types/cost-tracking.d.ts +43 -0
  71. package/dist/types/cost-tracking.d.ts.map +1 -0
  72. package/dist/types/cost-tracking.js +8 -0
  73. package/dist/types/cost-tracking.js.map +1 -0
  74. package/dist/types/model-selection.d.ts +53 -0
  75. package/dist/types/model-selection.d.ts.map +1 -0
  76. package/dist/types/model-selection.js +12 -0
  77. package/dist/types/model-selection.js.map +1 -0
  78. package/dist/utils/cost-reporter.d.ts +58 -0
  79. package/dist/utils/cost-reporter.d.ts.map +1 -0
  80. package/dist/utils/cost-reporter.js +224 -0
  81. package/dist/utils/cost-reporter.js.map +1 -0
  82. package/dist/utils/pricing-constants.d.ts +70 -0
  83. package/dist/utils/pricing-constants.d.ts.map +1 -0
  84. package/dist/utils/pricing-constants.js +71 -0
  85. package/dist/utils/pricing-constants.js.map +1 -0
  86. package/package.json +13 -9
  87. package/src/adapters/adapter-base.ts +33 -0
  88. package/src/adapters/adapter-interface.ts +46 -0
  89. package/src/adapters/claude/adapter.ts +164 -0
  90. package/src/adapters/copilot/adapter.ts +138 -0
  91. package/src/adapters/cursor/adapter.ts +170 -0
  92. package/src/adapters/generic/adapter.ts +137 -0
  93. package/src/agents/architect/AGENT.md +3 -0
  94. package/src/agents/code-reviewer.md +156 -0
  95. package/src/agents/data-scientist/AGENT.md +181 -0
  96. package/src/agents/database-optimizer/AGENT.md +147 -0
  97. package/src/agents/devops/AGENT.md +3 -0
  98. package/src/agents/diagrams-architect/AGENT.md +3 -0
  99. package/src/agents/docs-writer/AGENT.md +3 -0
  100. package/src/agents/kubernetes-architect/AGENT.md +142 -0
  101. package/src/agents/ml-engineer/AGENT.md +150 -0
  102. package/src/agents/mlops-engineer/AGENT.md +201 -0
  103. package/src/agents/network-engineer/AGENT.md +149 -0
  104. package/src/agents/observability-engineer/AGENT.md +213 -0
  105. package/src/agents/payment-integration/AGENT.md +35 -0
  106. package/src/agents/performance/AGENT.md +3 -0
  107. package/src/agents/performance-engineer/AGENT.md +153 -0
  108. package/src/agents/pm/AGENT.md +3 -0
  109. package/src/agents/qa-lead/AGENT.md +3 -0
  110. package/src/agents/security/AGENT.md +3 -0
  111. package/src/agents/sre/AGENT.md +3 -0
  112. package/src/agents/tdd-orchestrator/AGENT.md +169 -0
  113. package/src/agents/tech-lead/AGENT.md +3 -0
  114. package/src/commands/specweave.costs.md +261 -0
  115. package/src/commands/specweave.increment.md +48 -4
  116. package/src/commands/specweave.ml-pipeline.md +292 -0
  117. package/src/commands/specweave.monitor-setup.md +501 -0
  118. package/src/commands/specweave.slo-implement.md +1055 -0
  119. package/src/commands/specweave.sync-github.md +1 -1
  120. package/src/commands/specweave.tdd-cycle.md +199 -0
  121. package/src/commands/specweave.tdd-green.md +842 -0
  122. package/src/commands/specweave.tdd-red.md +135 -0
  123. package/src/commands/specweave.tdd-refactor.md +165 -0
  124. package/src/hooks/post-increment-plugin-detect.sh +142 -0
  125. package/src/hooks/post-task-completion.sh +53 -11
  126. package/src/hooks/pre-task-plugin-detect.sh +96 -0
  127. package/src/skills/SKILLS-INDEX.md +18 -10
  128. package/src/skills/billing-automation/SKILL.md +559 -0
  129. package/src/skills/distributed-tracing/SKILL.md +438 -0
  130. package/src/skills/e2e-playwright/README.md +1 -1
  131. package/src/skills/e2e-playwright/package.json +1 -1
  132. package/src/skills/gitops-workflow/SKILL.md +285 -0
  133. package/src/skills/gitops-workflow/references/argocd-setup.md +134 -0
  134. package/src/skills/gitops-workflow/references/sync-policies.md +131 -0
  135. package/src/skills/grafana-dashboards/SKILL.md +369 -0
  136. package/src/skills/helm-chart-scaffolding/SKILL.md +544 -0
  137. package/src/skills/helm-chart-scaffolding/assets/Chart.yaml.template +42 -0
  138. package/src/skills/helm-chart-scaffolding/assets/values.yaml.template +185 -0
  139. package/src/skills/helm-chart-scaffolding/references/chart-structure.md +500 -0
  140. package/src/skills/helm-chart-scaffolding/scripts/validate-chart.sh +244 -0
  141. package/src/skills/k8s-manifest-generator/SKILL.md +511 -0
  142. package/src/skills/k8s-manifest-generator/assets/configmap-template.yaml +296 -0
  143. package/src/skills/k8s-manifest-generator/assets/deployment-template.yaml +203 -0
  144. package/src/skills/k8s-manifest-generator/assets/service-template.yaml +171 -0
  145. package/src/skills/k8s-manifest-generator/references/deployment-spec.md +753 -0
  146. package/src/skills/k8s-manifest-generator/references/service-spec.md +724 -0
  147. package/src/skills/k8s-security-policies/SKILL.md +334 -0
  148. package/src/skills/k8s-security-policies/assets/network-policy-template.yaml +177 -0
  149. package/src/skills/k8s-security-policies/references/rbac-patterns.md +187 -0
  150. package/src/skills/ml-pipeline-workflow/SKILL.md +245 -0
  151. package/src/skills/paypal-integration/SKILL.md +467 -0
  152. package/src/skills/pci-compliance/SKILL.md +466 -0
  153. package/src/skills/prometheus-configuration/SKILL.md +392 -0
  154. package/src/skills/slo-implementation/SKILL.md +329 -0
  155. package/src/skills/stripe-integration/SKILL.md +442 -0
  156. package/src/skills/tdd-workflow/SKILL.md +378 -0
  157. package/src/templates/README.md.template +1 -1
  158. package/src/skills/bmad-method-expert/SKILL.md +0 -626
  159. package/src/skills/bmad-method-expert/scripts/analyze-project.js +0 -318
  160. package/src/skills/bmad-method-expert/scripts/check-setup.js +0 -208
  161. package/src/skills/bmad-method-expert/scripts/generate-template.js +0 -1149
  162. package/src/skills/bmad-method-expert/scripts/validate-documents.js +0 -340
  163. package/src/skills/context-optimizer/SKILL.md +0 -588
  164. package/src/skills/figma-designer/SKILL.md +0 -149
  165. package/src/skills/figma-implementer/SKILL.md +0 -148
  166. package/src/skills/figma-mcp-connector/SKILL.md +0 -136
  167. package/src/skills/figma-to-code/SKILL.md +0 -128
  168. package/src/skills/spec-kit-expert/SKILL.md +0 -1010
@@ -0,0 +1,285 @@
1
+ ---
2
+ name: gitops-workflow
3
+ description: Implement GitOps workflows with ArgoCD and Flux for automated, declarative Kubernetes deployments with continuous reconciliation. Use when implementing GitOps practices, automating Kubernetes deployments, or setting up declarative infrastructure management.
4
+ ---
5
+
6
+ # GitOps Workflow
7
+
8
+ Complete guide to implementing GitOps workflows with ArgoCD and Flux for automated Kubernetes deployments.
9
+
10
+ ## Purpose
11
+
12
+ Implement declarative, Git-based continuous delivery for Kubernetes using ArgoCD or Flux CD, following OpenGitOps principles.
13
+
14
+ ## When to Use This Skill
15
+
16
+ - Set up GitOps for Kubernetes clusters
17
+ - Automate application deployments from Git
18
+ - Implement progressive delivery strategies
19
+ - Manage multi-cluster deployments
20
+ - Configure automated sync policies
21
+ - Set up secret management in GitOps
22
+
23
+ ## OpenGitOps Principles
24
+
25
+ 1. **Declarative** - Entire system described declaratively
26
+ 2. **Versioned and Immutable** - Desired state stored in Git
27
+ 3. **Pulled Automatically** - Software agents pull desired state
28
+ 4. **Continuously Reconciled** - Agents reconcile actual vs desired state
29
+
30
+ ## ArgoCD Setup
31
+
32
+ ### 1. Installation
33
+
34
+ ```bash
35
+ # Create namespace
36
+ kubectl create namespace argocd
37
+
38
+ # Install ArgoCD
39
+ kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
40
+
41
+ # Get admin password
42
+ kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d
43
+ ```
44
+
45
+ **Reference:** See `references/argocd-setup.md` for detailed setup
46
+
47
+ ### 2. Repository Structure
48
+
49
+ ```
50
+ gitops-repo/
51
+ ├── apps/
52
+ │ ├── production/
53
+ │ │ ├── app1/
54
+ │ │ │ ├── kustomization.yaml
55
+ │ │ │ └── deployment.yaml
56
+ │ │ └── app2/
57
+ │ └── staging/
58
+ ├── infrastructure/
59
+ │ ├── ingress-nginx/
60
+ │ ├── cert-manager/
61
+ │ └── monitoring/
62
+ └── argocd/
63
+ ├── applications/
64
+ └── projects/
65
+ ```
66
+
67
+ ### 3. Create Application
68
+
69
+ ```yaml
70
+ # argocd/applications/my-app.yaml
71
+ apiVersion: argoproj.io/v1alpha1
72
+ kind: Application
73
+ metadata:
74
+ name: my-app
75
+ namespace: argocd
76
+ spec:
77
+ project: default
78
+ source:
79
+ repoURL: https://github.com/org/gitops-repo
80
+ targetRevision: main
81
+ path: apps/production/my-app
82
+ destination:
83
+ server: https://kubernetes.default.svc
84
+ namespace: production
85
+ syncPolicy:
86
+ automated:
87
+ prune: true
88
+ selfHeal: true
89
+ syncOptions:
90
+ - CreateNamespace=true
91
+ ```
92
+
93
+ ### 4. App of Apps Pattern
94
+
95
+ ```yaml
96
+ apiVersion: argoproj.io/v1alpha1
97
+ kind: Application
98
+ metadata:
99
+ name: applications
100
+ namespace: argocd
101
+ spec:
102
+ project: default
103
+ source:
104
+ repoURL: https://github.com/org/gitops-repo
105
+ targetRevision: main
106
+ path: argocd/applications
107
+ destination:
108
+ server: https://kubernetes.default.svc
109
+ namespace: argocd
110
+ syncPolicy:
111
+ automated: {}
112
+ ```
113
+
114
+ ## Flux CD Setup
115
+
116
+ ### 1. Installation
117
+
118
+ ```bash
119
+ # Install Flux CLI
120
+ curl -s https://fluxcd.io/install.sh | sudo bash
121
+
122
+ # Bootstrap Flux
123
+ flux bootstrap github \
124
+ --owner=org \
125
+ --repository=gitops-repo \
126
+ --branch=main \
127
+ --path=clusters/production \
128
+ --personal
129
+ ```
130
+
131
+ ### 2. Create GitRepository
132
+
133
+ ```yaml
134
+ apiVersion: source.toolkit.fluxcd.io/v1
135
+ kind: GitRepository
136
+ metadata:
137
+ name: my-app
138
+ namespace: flux-system
139
+ spec:
140
+ interval: 1m
141
+ url: https://github.com/org/my-app
142
+ ref:
143
+ branch: main
144
+ ```
145
+
146
+ ### 3. Create Kustomization
147
+
148
+ ```yaml
149
+ apiVersion: kustomize.toolkit.fluxcd.io/v1
150
+ kind: Kustomization
151
+ metadata:
152
+ name: my-app
153
+ namespace: flux-system
154
+ spec:
155
+ interval: 5m
156
+ path: ./deploy
157
+ prune: true
158
+ sourceRef:
159
+ kind: GitRepository
160
+ name: my-app
161
+ ```
162
+
163
+ ## Sync Policies
164
+
165
+ ### Auto-Sync Configuration
166
+
167
+ **ArgoCD:**
168
+ ```yaml
169
+ syncPolicy:
170
+ automated:
171
+ prune: true # Delete resources not in Git
172
+ selfHeal: true # Reconcile manual changes
173
+ allowEmpty: false
174
+ retry:
175
+ limit: 5
176
+ backoff:
177
+ duration: 5s
178
+ factor: 2
179
+ maxDuration: 3m
180
+ ```
181
+
182
+ **Flux:**
183
+ ```yaml
184
+ spec:
185
+ interval: 1m
186
+ prune: true
187
+ wait: true
188
+ timeout: 5m
189
+ ```
190
+
191
+ **Reference:** See `references/sync-policies.md`
192
+
193
+ ## Progressive Delivery
194
+
195
+ ### Canary Deployment with ArgoCD Rollouts
196
+
197
+ ```yaml
198
+ apiVersion: argoproj.io/v1alpha1
199
+ kind: Rollout
200
+ metadata:
201
+ name: my-app
202
+ spec:
203
+ replicas: 5
204
+ strategy:
205
+ canary:
206
+ steps:
207
+ - setWeight: 20
208
+ - pause: {duration: 1m}
209
+ - setWeight: 50
210
+ - pause: {duration: 2m}
211
+ - setWeight: 100
212
+ ```
213
+
214
+ ### Blue-Green Deployment
215
+
216
+ ```yaml
217
+ strategy:
218
+ blueGreen:
219
+ activeService: my-app
220
+ previewService: my-app-preview
221
+ autoPromotionEnabled: false
222
+ ```
223
+
224
+ ## Secret Management
225
+
226
+ ### External Secrets Operator
227
+
228
+ ```yaml
229
+ apiVersion: external-secrets.io/v1beta1
230
+ kind: ExternalSecret
231
+ metadata:
232
+ name: db-credentials
233
+ spec:
234
+ refreshInterval: 1h
235
+ secretStoreRef:
236
+ name: aws-secrets-manager
237
+ kind: SecretStore
238
+ target:
239
+ name: db-credentials
240
+ data:
241
+ - secretKey: password
242
+ remoteRef:
243
+ key: prod/db/password
244
+ ```
245
+
246
+ ### Sealed Secrets
247
+
248
+ ```bash
249
+ # Encrypt secret
250
+ kubeseal --format yaml < secret.yaml > sealed-secret.yaml
251
+
252
+ # Commit sealed-secret.yaml to Git
253
+ ```
254
+
255
+ ## Best Practices
256
+
257
+ 1. **Use separate repos or branches** for different environments
258
+ 2. **Implement RBAC** for Git repositories
259
+ 3. **Enable notifications** for sync failures
260
+ 4. **Use health checks** for custom resources
261
+ 5. **Implement approval gates** for production
262
+ 6. **Keep secrets out of Git** (use External Secrets)
263
+ 7. **Use App of Apps pattern** for organization
264
+ 8. **Tag releases** for easy rollback
265
+ 9. **Monitor sync status** with alerts
266
+ 10. **Test changes** in staging first
267
+
268
+ ## Troubleshooting
269
+
270
+ **Sync failures:**
271
+ ```bash
272
+ argocd app get my-app
273
+ argocd app sync my-app --prune
274
+ ```
275
+
276
+ **Out of sync status:**
277
+ ```bash
278
+ argocd app diff my-app
279
+ argocd app sync my-app --force
280
+ ```
281
+
282
+ ## Related Skills
283
+
284
+ - `k8s-manifest-generator` - For creating manifests
285
+ - `helm-chart-scaffolding` - For packaging applications
@@ -0,0 +1,134 @@
1
+ # ArgoCD Setup and Configuration
2
+
3
+ ## Installation Methods
4
+
5
+ ### 1. Standard Installation
6
+ ```bash
7
+ kubectl create namespace argocd
8
+ kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
9
+ ```
10
+
11
+ ### 2. High Availability Installation
12
+ ```bash
13
+ kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/ha/install.yaml
14
+ ```
15
+
16
+ ### 3. Helm Installation
17
+ ```bash
18
+ helm repo add argo https://argoproj.github.io/argo-helm
19
+ helm install argocd argo/argo-cd -n argocd --create-namespace
20
+ ```
21
+
22
+ ## Initial Configuration
23
+
24
+ ### Access ArgoCD UI
25
+ ```bash
26
+ # Port forward
27
+ kubectl port-forward svc/argocd-server -n argocd 8080:443
28
+
29
+ # Get initial admin password
30
+ argocd admin initial-password -n argocd
31
+ ```
32
+
33
+ ### Configure Ingress
34
+ ```yaml
35
+ apiVersion: networking.k8s.io/v1
36
+ kind: Ingress
37
+ metadata:
38
+ name: argocd-server-ingress
39
+ namespace: argocd
40
+ annotations:
41
+ cert-manager.io/cluster-issuer: letsencrypt-prod
42
+ nginx.ingress.kubernetes.io/ssl-passthrough: "true"
43
+ nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"
44
+ spec:
45
+ ingressClassName: nginx
46
+ rules:
47
+ - host: argocd.example.com
48
+ http:
49
+ paths:
50
+ - path: /
51
+ pathType: Prefix
52
+ backend:
53
+ service:
54
+ name: argocd-server
55
+ port:
56
+ number: 443
57
+ tls:
58
+ - hosts:
59
+ - argocd.example.com
60
+ secretName: argocd-secret
61
+ ```
62
+
63
+ ## CLI Configuration
64
+
65
+ ### Login
66
+ ```bash
67
+ argocd login argocd.example.com --username admin
68
+ ```
69
+
70
+ ### Add Repository
71
+ ```bash
72
+ argocd repo add https://github.com/org/repo --username user --password token
73
+ ```
74
+
75
+ ### Create Application
76
+ ```bash
77
+ argocd app create my-app \
78
+ --repo https://github.com/org/repo \
79
+ --path apps/my-app \
80
+ --dest-server https://kubernetes.default.svc \
81
+ --dest-namespace production
82
+ ```
83
+
84
+ ## SSO Configuration
85
+
86
+ ### GitHub OAuth
87
+ ```yaml
88
+ apiVersion: v1
89
+ kind: ConfigMap
90
+ metadata:
91
+ name: argocd-cm
92
+ namespace: argocd
93
+ data:
94
+ url: https://argocd.example.com
95
+ dex.config: |
96
+ connectors:
97
+ - type: github
98
+ id: github
99
+ name: GitHub
100
+ config:
101
+ clientID: $GITHUB_CLIENT_ID
102
+ clientSecret: $GITHUB_CLIENT_SECRET
103
+ orgs:
104
+ - name: my-org
105
+ ```
106
+
107
+ ## RBAC Configuration
108
+ ```yaml
109
+ apiVersion: v1
110
+ kind: ConfigMap
111
+ metadata:
112
+ name: argocd-rbac-cm
113
+ namespace: argocd
114
+ data:
115
+ policy.default: role:readonly
116
+ policy.csv: |
117
+ p, role:developers, applications, *, */dev, allow
118
+ p, role:operators, applications, *, */*, allow
119
+ g, my-org:devs, role:developers
120
+ g, my-org:ops, role:operators
121
+ ```
122
+
123
+ ## Best Practices
124
+
125
+ 1. Enable SSO for production
126
+ 2. Implement RBAC policies
127
+ 3. Use separate projects for teams
128
+ 4. Enable audit logging
129
+ 5. Configure notifications
130
+ 6. Use ApplicationSets for multi-cluster
131
+ 7. Implement resource hooks
132
+ 8. Configure health checks
133
+ 9. Use sync windows for maintenance
134
+ 10. Monitor with Prometheus metrics
@@ -0,0 +1,131 @@
1
+ # GitOps Sync Policies
2
+
3
+ ## ArgoCD Sync Policies
4
+
5
+ ### Automated Sync
6
+ ```yaml
7
+ syncPolicy:
8
+ automated:
9
+ prune: true # Delete resources removed from Git
10
+ selfHeal: true # Reconcile manual changes
11
+ allowEmpty: false # Prevent empty sync
12
+ ```
13
+
14
+ ### Manual Sync
15
+ ```yaml
16
+ syncPolicy:
17
+ syncOptions:
18
+ - PrunePropagationPolicy=foreground
19
+ - CreateNamespace=true
20
+ ```
21
+
22
+ ### Sync Windows
23
+ ```yaml
24
+ syncWindows:
25
+ - kind: allow
26
+ schedule: "0 8 * * *"
27
+ duration: 1h
28
+ applications:
29
+ - my-app
30
+ - kind: deny
31
+ schedule: "0 22 * * *"
32
+ duration: 8h
33
+ applications:
34
+ - '*'
35
+ ```
36
+
37
+ ### Retry Policy
38
+ ```yaml
39
+ syncPolicy:
40
+ retry:
41
+ limit: 5
42
+ backoff:
43
+ duration: 5s
44
+ factor: 2
45
+ maxDuration: 3m
46
+ ```
47
+
48
+ ## Flux Sync Policies
49
+
50
+ ### Kustomization Sync
51
+ ```yaml
52
+ apiVersion: kustomize.toolkit.fluxcd.io/v1
53
+ kind: Kustomization
54
+ metadata:
55
+ name: my-app
56
+ spec:
57
+ interval: 5m
58
+ prune: true
59
+ wait: true
60
+ timeout: 5m
61
+ retryInterval: 1m
62
+ force: false
63
+ ```
64
+
65
+ ### Source Sync Interval
66
+ ```yaml
67
+ apiVersion: source.toolkit.fluxcd.io/v1
68
+ kind: GitRepository
69
+ metadata:
70
+ name: my-app
71
+ spec:
72
+ interval: 1m
73
+ timeout: 60s
74
+ ```
75
+
76
+ ## Health Assessment
77
+
78
+ ### Custom Health Checks
79
+ ```yaml
80
+ # ArgoCD
81
+ apiVersion: v1
82
+ kind: ConfigMap
83
+ metadata:
84
+ name: argocd-cm
85
+ namespace: argocd
86
+ data:
87
+ resource.customizations.health.MyCustomResource: |
88
+ hs = {}
89
+ if obj.status ~= nil then
90
+ if obj.status.conditions ~= nil then
91
+ for i, condition in ipairs(obj.status.conditions) do
92
+ if condition.type == "Ready" and condition.status == "False" then
93
+ hs.status = "Degraded"
94
+ hs.message = condition.message
95
+ return hs
96
+ end
97
+ if condition.type == "Ready" and condition.status == "True" then
98
+ hs.status = "Healthy"
99
+ hs.message = condition.message
100
+ return hs
101
+ end
102
+ end
103
+ end
104
+ end
105
+ hs.status = "Progressing"
106
+ hs.message = "Waiting for status"
107
+ return hs
108
+ ```
109
+
110
+ ## Sync Options
111
+
112
+ ### Common Sync Options
113
+ - `PrunePropagationPolicy=foreground` - Wait for pruned resources to be deleted
114
+ - `CreateNamespace=true` - Auto-create namespace
115
+ - `Validate=false` - Skip kubectl validation
116
+ - `PruneLast=true` - Prune resources after sync
117
+ - `RespectIgnoreDifferences=true` - Honor ignore differences
118
+ - `ApplyOutOfSyncOnly=true` - Only apply out-of-sync resources
119
+
120
+ ## Best Practices
121
+
122
+ 1. Use automated sync for non-production
123
+ 2. Require manual approval for production
124
+ 3. Configure sync windows for maintenance
125
+ 4. Implement health checks for custom resources
126
+ 5. Use selective sync for large applications
127
+ 6. Configure appropriate retry policies
128
+ 7. Monitor sync failures with alerts
129
+ 8. Use prune with caution in production
130
+ 9. Test sync policies in staging
131
+ 10. Document sync behavior for teams