opencode-skills-collection 4.0.67 → 4.0.69
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.
- package/bundled-skills/.antigravity-install-manifest.json +281 -1
- package/bundled-skills/access-review/SKILL.md +394 -0
- package/bundled-skills/access-review/references/details.md +121 -0
- package/bundled-skills/agent-evals/SKILL.md +420 -0
- package/bundled-skills/agent-observability/SKILL.md +346 -0
- package/bundled-skills/agent-observability/references/details.md +786 -0
- package/bundled-skills/ai-agent-security/SKILL.md +393 -0
- package/bundled-skills/ai-agent-security/references/details.md +912 -0
- package/bundled-skills/ai-coding-agent-guardrails/SKILL.md +442 -0
- package/bundled-skills/ai-coding-agent-guardrails/references/details.md +753 -0
- package/bundled-skills/ai-inference-service-mesh/SKILL.md +449 -0
- package/bundled-skills/ai-pipeline-orchestration/SKILL.md +287 -0
- package/bundled-skills/ai-red-teaming/SKILL.md +409 -0
- package/bundled-skills/ai-security-hardening/SKILL.md +343 -0
- package/bundled-skills/ai-sre-incident-response/SKILL.md +336 -0
- package/bundled-skills/alerting-oncall/SKILL.md +458 -0
- package/bundled-skills/alerting-oncall/references/details.md +84 -0
- package/bundled-skills/anti-slop-design/SKILL.md +393 -0
- package/bundled-skills/antigravity-maintainer-batch-release/SKILL.md +1 -0
- package/bundled-skills/apk-redteam-pipeline/SKILL.md +446 -0
- package/bundled-skills/argocd-gitops/SKILL.md +469 -0
- package/bundled-skills/arm-templates/SKILL.md +438 -0
- package/bundled-skills/arm-templates/references/details.md +64 -0
- package/bundled-skills/artifact-yylo/SKILL.md +122 -0
- package/bundled-skills/asset-inventory/SKILL.md +412 -0
- package/bundled-skills/asset-inventory/references/details.md +127 -0
- package/bundled-skills/audit-logging/SKILL.md +476 -0
- package/bundled-skills/aws-cloudtrail/SKILL.md +486 -0
- package/bundled-skills/aws-cost-optimization/SKILL.md +331 -0
- package/bundled-skills/aws-ec2/SKILL.md +426 -0
- package/bundled-skills/aws-ecs-fargate/SKILL.md +388 -0
- package/bundled-skills/aws-iam/SKILL.md +463 -0
- package/bundled-skills/aws-lambda/SKILL.md +428 -0
- package/bundled-skills/aws-rds/SKILL.md +380 -0
- package/bundled-skills/aws-s3/SKILL.md +434 -0
- package/bundled-skills/aws-secrets-manager/SKILL.md +486 -0
- package/bundled-skills/aws-vpc/SKILL.md +436 -0
- package/bundled-skills/azure-ai-document-intelligence-ts/SKILL.md +1 -1
- package/bundled-skills/azure-aks/SKILL.md +423 -0
- package/bundled-skills/azure-devops/SKILL.md +457 -0
- package/bundled-skills/azure-functions-devsec/SKILL.md +436 -0
- package/bundled-skills/azure-keyvault/SKILL.md +455 -0
- package/bundled-skills/azure-keyvault/references/details.md +83 -0
- package/bundled-skills/azure-monitor-audit/SKILL.md +379 -0
- package/bundled-skills/azure-networking/SKILL.md +448 -0
- package/bundled-skills/azure-networking/references/details.md +135 -0
- package/bundled-skills/azure-sql/SKILL.md +413 -0
- package/bundled-skills/azure-sql/references/details.md +113 -0
- package/bundled-skills/azure-vms/SKILL.md +402 -0
- package/bundled-skills/azure-vms/references/details.md +134 -0
- package/bundled-skills/backup-recovery/SKILL.md +388 -0
- package/bundled-skills/bb-methodology/SKILL.md +451 -0
- package/bundled-skills/bb-methodology/references/details.md +120 -0
- package/bundled-skills/block-storage/SKILL.md +371 -0
- package/bundled-skills/blue-green-deploy/SKILL.md +453 -0
- package/bundled-skills/blue-green-deploy/references/details.md +90 -0
- package/bundled-skills/bug-bounty/SKILL.md +447 -0
- package/bundled-skills/bug-bounty/references/details.md +1316 -0
- package/bundled-skills/bugcrowd-reporting/SKILL.md +351 -0
- package/bundled-skills/business-continuity/SKILL.md +463 -0
- package/bundled-skills/career-ops/SKILL.md +186 -0
- package/bundled-skills/cdn-setup/SKILL.md +374 -0
- package/bundled-skills/change-management/SKILL.md +438 -0
- package/bundled-skills/change-management/references/details.md +105 -0
- package/bundled-skills/circleci/SKILL.md +475 -0
- package/bundled-skills/cis-benchmarks/SKILL.md +150 -0
- package/bundled-skills/cloudflare-pages/SKILL.md +318 -0
- package/bundled-skills/cloudflare-r2/SKILL.md +353 -0
- package/bundled-skills/cloudflare-workers/SKILL.md +415 -0
- package/bundled-skills/cloudflare-zero-trust/SKILL.md +361 -0
- package/bundled-skills/cloudformation/SKILL.md +461 -0
- package/bundled-skills/constraint-driven-development/SKILL.md +335 -0
- package/bundled-skills/constraint-driven-development/references/floor-guard.md +99 -0
- package/bundled-skills/container-hardening/SKILL.md +126 -0
- package/bundled-skills/container-registries/SKILL.md +435 -0
- package/bundled-skills/container-scanning/SKILL.md +416 -0
- package/bundled-skills/convex-backend/SKILL.md +338 -0
- package/bundled-skills/dast-scanning/SKILL.md +437 -0
- package/bundled-skills/database-backups/SKILL.md +425 -0
- package/bundled-skills/datadog/SKILL.md +487 -0
- package/bundled-skills/dependency-scanning/SKILL.md +457 -0
- package/bundled-skills/devcontainers-nix/SKILL.md +416 -0
- package/bundled-skills/disaster-recovery/SKILL.md +374 -0
- package/bundled-skills/disaster-recovery/references/details.md +219 -0
- package/bundled-skills/dns-management/SKILL.md +375 -0
- package/bundled-skills/docker-compose/SKILL.md +482 -0
- package/bundled-skills/docker-management/SKILL.md +426 -0
- package/bundled-skills/ebpf-observability/SKILL.md +436 -0
- package/bundled-skills/ebpf-observability/references/details.md +542 -0
- package/bundled-skills/elk-stack/SKILL.md +487 -0
- package/bundled-skills/enterprise-vpn-attack/SKILL.md +395 -0
- package/bundled-skills/evidence-hygiene/SKILL.md +404 -0
- package/bundled-skills/feature-flags/SKILL.md +426 -0
- package/bundled-skills/feature-flags/references/details.md +86 -0
- package/bundled-skills/fedramp-compliance/SKILL.md +453 -0
- package/bundled-skills/firebase-app-platform/SKILL.md +381 -0
- package/bundled-skills/firewall-config/SKILL.md +479 -0
- package/bundled-skills/gcp-audit-logs/SKILL.md +452 -0
- package/bundled-skills/gcp-audit-logs/references/details.md +56 -0
- package/bundled-skills/gcp-cloud-functions/SKILL.md +284 -0
- package/bundled-skills/gcp-cloud-sql/SKILL.md +277 -0
- package/bundled-skills/gcp-compute/SKILL.md +319 -0
- package/bundled-skills/gcp-gke/SKILL.md +307 -0
- package/bundled-skills/gcp-networking/SKILL.md +293 -0
- package/bundled-skills/gcp-secret-manager/SKILL.md +421 -0
- package/bundled-skills/gcp-secret-manager/references/details.md +131 -0
- package/bundled-skills/gdpr-compliance/SKILL.md +451 -0
- package/bundled-skills/gdpr-compliance/references/details.md +145 -0
- package/bundled-skills/geo-audit/SKILL.md +368 -0
- package/bundled-skills/geo-brand-mentions/SKILL.md +68 -0
- package/bundled-skills/geo-brand-mentions/references/details.md +471 -0
- package/bundled-skills/geo-citability/SKILL.md +350 -0
- package/bundled-skills/geo-compare/SKILL.md +340 -0
- package/bundled-skills/geo-content/SKILL.md +383 -0
- package/bundled-skills/geo-crawlers/SKILL.md +408 -0
- package/bundled-skills/geo-llmstxt/SKILL.md +464 -0
- package/bundled-skills/geo-platform-optimizer/SKILL.md +314 -0
- package/bundled-skills/geo-proposal/SKILL.md +378 -0
- package/bundled-skills/geo-prospect/SKILL.md +225 -0
- package/bundled-skills/geo-report/SKILL.md +436 -0
- package/bundled-skills/geo-report-pdf/SKILL.md +157 -0
- package/bundled-skills/geo-schema/SKILL.md +408 -0
- package/bundled-skills/geo-technical/SKILL.md +78 -0
- package/bundled-skills/geo-technical/references/details.md +543 -0
- package/bundled-skills/git-workflow/SKILL.md +460 -0
- package/bundled-skills/github-actions/SKILL.md +368 -0
- package/bundled-skills/gitlab-ci/SKILL.md +340 -0
- package/bundled-skills/google-no-code/SKILL.md +136 -0
- package/bundled-skills/gpu-kubernetes-operations/SKILL.md +468 -0
- package/bundled-skills/gpu-server-management/SKILL.md +236 -0
- package/bundled-skills/hashicorp-vault/SKILL.md +408 -0
- package/bundled-skills/helm-charts/SKILL.md +469 -0
- package/bundled-skills/hipaa-compliance/SKILL.md +451 -0
- package/bundled-skills/hunt-aspnet/SKILL.md +321 -0
- package/bundled-skills/hunt-ato/SKILL.md +184 -0
- package/bundled-skills/hunt-auth-bypass/SKILL.md +426 -0
- package/bundled-skills/hunt-auth-bypass/references/details.md +80 -0
- package/bundled-skills/hunt-brute-force/SKILL.md +341 -0
- package/bundled-skills/hunt-business-logic/SKILL.md +281 -0
- package/bundled-skills/hunt-cache-poison/SKILL.md +382 -0
- package/bundled-skills/hunt-captcha-bypass/SKILL.md +136 -0
- package/bundled-skills/hunt-cicd/SKILL.md +311 -0
- package/bundled-skills/hunt-clickjacking/SKILL.md +110 -0
- package/bundled-skills/hunt-cors/SKILL.md +335 -0
- package/bundled-skills/hunt-dom/SKILL.md +323 -0
- package/bundled-skills/hunt-exceptional-conditions/SKILL.md +111 -0
- package/bundled-skills/hunt-file-upload/SKILL.md +202 -0
- package/bundled-skills/hunt-fintech-graphql/SKILL.md +289 -0
- package/bundled-skills/hunt-forgot-password/SKILL.md +114 -0
- package/bundled-skills/hunt-grpc/SKILL.md +317 -0
- package/bundled-skills/hunt-host-header/SKILL.md +309 -0
- package/bundled-skills/hunt-html-injection/SKILL.md +106 -0
- package/bundled-skills/hunt-http-smuggling/SKILL.md +129 -0
- package/bundled-skills/hunt-http-smuggling/references/phase2h-smuggling-cachepoison.md +177 -0
- package/bundled-skills/hunt-idor/SKILL.md +434 -0
- package/bundled-skills/hunt-jwt-crypto/SKILL.md +221 -0
- package/bundled-skills/hunt-k8s/SKILL.md +337 -0
- package/bundled-skills/hunt-laravel/SKILL.md +255 -0
- package/bundled-skills/hunt-ldap/SKILL.md +351 -0
- package/bundled-skills/hunt-lfi/SKILL.md +311 -0
- package/bundled-skills/hunt-llm-ai/SKILL.md +289 -0
- package/bundled-skills/hunt-mfa-bypass/SKILL.md +177 -0
- package/bundled-skills/hunt-misc/SKILL.md +378 -0
- package/bundled-skills/hunt-nextjs/SKILL.md +299 -0
- package/bundled-skills/hunt-nodejs/SKILL.md +263 -0
- package/bundled-skills/hunt-nosqli/SKILL.md +210 -0
- package/bundled-skills/hunt-ntlm-info/SKILL.md +314 -0
- package/bundled-skills/hunt-oauth/SKILL.md +459 -0
- package/bundled-skills/hunt-open-redirect/SKILL.md +223 -0
- package/bundled-skills/hunt-race-condition/SKILL.md +381 -0
- package/bundled-skills/hunt-race-condition/references/details.md +159 -0
- package/bundled-skills/hunt-rag-vector/SKILL.md +212 -0
- package/bundled-skills/hunt-rce/SKILL.md +444 -0
- package/bundled-skills/hunt-rce/references/details.md +110 -0
- package/bundled-skills/hunt-saml/SKILL.md +156 -0
- package/bundled-skills/hunt-session/SKILL.md +342 -0
- package/bundled-skills/hunt-shadow-api/SKILL.md +198 -0
- package/bundled-skills/hunt-source-leak/SKILL.md +345 -0
- package/bundled-skills/hunt-spa-api/SKILL.md +163 -0
- package/bundled-skills/hunt-springboot/SKILL.md +285 -0
- package/bundled-skills/hunt-sqli/SKILL.md +466 -0
- package/bundled-skills/hunt-ssrf/SKILL.md +396 -0
- package/bundled-skills/hunt-ssrf/references/details.md +179 -0
- package/bundled-skills/hunt-ssti/SKILL.md +163 -0
- package/bundled-skills/hunt-subdomain/SKILL.md +379 -0
- package/bundled-skills/hunt-tls-network/SKILL.md +399 -0
- package/bundled-skills/hunt-xxe/SKILL.md +466 -0
- package/bundled-skills/i-have-adhd/SKILL.md +170 -0
- package/bundled-skills/idea-evaluator/SKILL.md +75 -0
- package/bundled-skills/idea-evaluator/idea-evaluator-con/SKILL.md +64 -0
- package/bundled-skills/idea-evaluator/idea-evaluator-pro/SKILL.md +64 -0
- package/bundled-skills/identity-access-management/SKILL.md +382 -0
- package/bundled-skills/identity-access-management/references/details.md +524 -0
- package/bundled-skills/incident-management/SKILL.md +484 -0
- package/bundled-skills/incident-response/SKILL.md +448 -0
- package/bundled-skills/incident-response/references/details.md +113 -0
- package/bundled-skills/interview-me/SKILL.md +248 -0
- package/bundled-skills/iso27001-compliance/SKILL.md +460 -0
- package/bundled-skills/jenkins/SKILL.md +462 -0
- package/bundled-skills/jev-use/SKILL.md +158 -0
- package/bundled-skills/kubernetes-hardening/SKILL.md +154 -0
- package/bundled-skills/kubernetes-ops/SKILL.md +449 -0
- package/bundled-skills/kubernetes-ops/references/details.md +108 -0
- package/bundled-skills/kustomize/SKILL.md +478 -0
- package/bundled-skills/ledger-tasks-yylo/SKILL.md +219 -0
- package/bundled-skills/linux-administration/SKILL.md +367 -0
- package/bundled-skills/linux-hardening/SKILL.md +154 -0
- package/bundled-skills/llm-app-security/SKILL.md +389 -0
- package/bundled-skills/llm-app-security/references/details.md +674 -0
- package/bundled-skills/llm-caching/SKILL.md +334 -0
- package/bundled-skills/llm-cost-optimization/SKILL.md +311 -0
- package/bundled-skills/llm-fine-tuning/SKILL.md +329 -0
- package/bundled-skills/llm-gateway/SKILL.md +282 -0
- package/bundled-skills/llm-inference-scaling/SKILL.md +286 -0
- package/bundled-skills/llmops-platform-engineering/SKILL.md +472 -0
- package/bundled-skills/load-balancing/SKILL.md +403 -0
- package/bundled-skills/loki-logging/SKILL.md +479 -0
- package/bundled-skills/loki-mode/examples/todo-app-generated/backend/package-lock.json +4 -4
- package/bundled-skills/loki-mode/examples/todo-app-generated/backend/package.json +1 -1
- package/bundled-skills/m365-entra-attack/SKILL.md +423 -0
- package/bundled-skills/mac-mini-llm-lab/SKILL.md +350 -0
- package/bundled-skills/mcp-server-security/SKILL.md +356 -0
- package/bundled-skills/mcp-server-security/references/details.md +745 -0
- package/bundled-skills/mdm-device-management/SKILL.md +404 -0
- package/bundled-skills/mdm-device-management/references/details.md +410 -0
- package/bundled-skills/meme-coin-audit/SKILL.md +402 -0
- package/bundled-skills/mid-engagement-ir-detection/SKILL.md +377 -0
- package/bundled-skills/model-registry-governance/SKILL.md +452 -0
- package/bundled-skills/model-serving-kubernetes/SKILL.md +339 -0
- package/bundled-skills/model-supply-chain-security/SKILL.md +427 -0
- package/bundled-skills/mongodb/SKILL.md +436 -0
- package/bundled-skills/multi-tenant-llm-hosting/SKILL.md +435 -0
- package/bundled-skills/multi-tenant-llm-hosting/references/details.md +211 -0
- package/bundled-skills/mysql/SKILL.md +390 -0
- package/bundled-skills/new-relic/SKILL.md +472 -0
- package/bundled-skills/nfs-storage/SKILL.md +356 -0
- package/bundled-skills/object-storage/SKILL.md +378 -0
- package/bundled-skills/offensive-osint/SKILL.md +443 -0
- package/bundled-skills/okta-attack/SKILL.md +436 -0
- package/bundled-skills/ollama-stack/SKILL.md +379 -0
- package/bundled-skills/openclaw-deployment-hardening/SKILL.md +135 -0
- package/bundled-skills/openclaw-local-mac-mini/SKILL.md +426 -0
- package/bundled-skills/openclaw-local-mac-mini/references/details.md +221 -0
- package/bundled-skills/openclaw-security-hardening/SKILL.md +135 -0
- package/bundled-skills/openshift/SKILL.md +485 -0
- package/bundled-skills/opentelemetry/SKILL.md +438 -0
- package/bundled-skills/opentelemetry/references/details.md +78 -0
- package/bundled-skills/opentofu-migration/SKILL.md +349 -0
- package/bundled-skills/osint-methodology/SKILL.md +460 -0
- package/bundled-skills/osint-methodology/references/details.md +1350 -0
- package/bundled-skills/pci-dss-compliance/SKILL.md +446 -0
- package/bundled-skills/penetration-testing/SKILL.md +152 -0
- package/bundled-skills/performance-tuning/SKILL.md +381 -0
- package/bundled-skills/plan-ledger-tasks-yylo/SKILL.md +52 -0
- package/bundled-skills/planetscale/SKILL.md +297 -0
- package/bundled-skills/platform-engineering/SKILL.md +348 -0
- package/bundled-skills/platform-engineering/references/details.md +944 -0
- package/bundled-skills/podman/SKILL.md +405 -0
- package/bundled-skills/policy-as-code/SKILL.md +434 -0
- package/bundled-skills/policy-as-code/references/details.md +204 -0
- package/bundled-skills/postgresql-devsec/SKILL.md +378 -0
- package/bundled-skills/prometheus-grafana/SKILL.md +469 -0
- package/bundled-skills/prompt-injection-defense/SKILL.md +483 -0
- package/bundled-skills/rag-infrastructure/SKILL.md +269 -0
- package/bundled-skills/rag-observability-evals/SKILL.md +444 -0
- package/bundled-skills/rag-observability-evals/references/details.md +92 -0
- package/bundled-skills/ralph-loop-yylo/SKILL.md +55 -0
- package/bundled-skills/ralph-loop-yylo/references/first_check.md +18 -0
- package/bundled-skills/ralph-loop-yylo/references/implement.md +60 -0
- package/bundled-skills/recon-scope-triage/SKILL.md +128 -0
- package/bundled-skills/redis/SKILL.md +421 -0
- package/bundled-skills/redteam-report-template/SKILL.md +370 -0
- package/bundled-skills/report-writing/SKILL.md +426 -0
- package/bundled-skills/report-writing/references/details.md +187 -0
- package/bundled-skills/resumable-implementation-contracts/SKILL.md +254 -0
- package/bundled-skills/reverse-proxy/SKILL.md +420 -0
- package/bundled-skills/runbook-creation/SKILL.md +438 -0
- package/bundled-skills/runbook-creation/references/details.md +71 -0
- package/bundled-skills/saas-security-posture/SKILL.md +415 -0
- package/bundled-skills/sast-scanning/SKILL.md +444 -0
- package/bundled-skills/sbom-supply-chain/SKILL.md +433 -0
- package/bundled-skills/security-arsenal/SKILL.md +446 -0
- package/bundled-skills/security-arsenal/references/details.md +540 -0
- package/bundled-skills/security-automation/SKILL.md +146 -0
- package/bundled-skills/semantic-versioning/SKILL.md +434 -0
- package/bundled-skills/semantic-versioning/references/details.md +83 -0
- package/bundled-skills/service-mesh/SKILL.md +422 -0
- package/bundled-skills/soc2-compliance/SKILL.md +409 -0
- package/bundled-skills/sops-encryption/SKILL.md +124 -0
- package/bundled-skills/sre-dashboards/SKILL.md +143 -0
- package/bundled-skills/ssh-configuration/SKILL.md +324 -0
- package/bundled-skills/ssl-tls-management/SKILL.md +428 -0
- package/bundled-skills/ssl-tls-management/references/details.md +99 -0
- package/bundled-skills/startup-it-troubleshooting/SKILL.md +415 -0
- package/bundled-skills/supply-chain-attack-recon/SKILL.md +453 -0
- package/bundled-skills/supply-chain-attack-recon/references/details.md +258 -0
- package/bundled-skills/systemd-services/SKILL.md +379 -0
- package/bundled-skills/terraform-aws/SKILL.md +125 -0
- package/bundled-skills/terraform-azure/SKILL.md +415 -0
- package/bundled-skills/terraform-azure/references/details.md +231 -0
- package/bundled-skills/terraform-gcp/SKILL.md +369 -0
- package/bundled-skills/threat-modeling/SKILL.md +487 -0
- package/bundled-skills/understand-project-yylo/SKILL.md +62 -0
- package/bundled-skills/user-management/SKILL.md +383 -0
- package/bundled-skills/using-agent-skills/SKILL.md +220 -0
- package/bundled-skills/vector-database-ops/SKILL.md +300 -0
- package/bundled-skills/vendor-management/SKILL.md +439 -0
- package/bundled-skills/vendor-management/references/details.md +109 -0
- package/bundled-skills/vercel-deployments/SKILL.md +296 -0
- package/bundled-skills/vllm-server/SKILL.md +236 -0
- package/bundled-skills/vmware-vcenter-attack/SKILL.md +412 -0
- package/bundled-skills/vpn-setup/SKILL.md +452 -0
- package/bundled-skills/vulnerability-scanning/SKILL.md +448 -0
- package/bundled-skills/waf-setup/SKILL.md +354 -0
- package/bundled-skills/waf-setup/references/details.md +211 -0
- package/bundled-skills/weather-model-data-fetching/SKILL.md +277 -0
- package/bundled-skills/weather-observation-fetching/SKILL.md +246 -0
- package/bundled-skills/web2-recon/SKILL.md +440 -0
- package/bundled-skills/web2-recon/references/details.md +319 -0
- package/bundled-skills/web3-audit/SKILL.md +445 -0
- package/bundled-skills/web3-audit/references/details.md +224 -0
- package/bundled-skills/wiki-yylo/SKILL.md +114 -0
- package/bundled-skills/windows-hardening/SKILL.md +454 -0
- package/bundled-skills/windows-hardening/references/details.md +204 -0
- package/bundled-skills/windows-server/SKILL.md +318 -0
- package/bundled-skills/workflow-yylo/SKILL.md +107 -0
- package/bundled-skills/zero-trust/SKILL.md +461 -0
- package/package.json +1 -1
- package/skills_index.json +6924 -0
|
@@ -0,0 +1,453 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: blue-green-deploy
|
|
3
|
+
description: Configure zero-downtime deployment strategies including blue-green, canary,
|
|
4
|
+
and rolling deployments.
|
|
5
|
+
category: devops
|
|
6
|
+
risk: critical
|
|
7
|
+
source: https://github.com/BagelHole/DevOps-Security-Agent-Skills
|
|
8
|
+
source_repo: BagelHole/DevOps-Security-Agent-Skills
|
|
9
|
+
source_type: community
|
|
10
|
+
date_added: '2026-09-20'
|
|
11
|
+
license: MIT
|
|
12
|
+
license_source: https://github.com/BagelHole/DevOps-Security-Agent-Skills/blob/main/LICENSE
|
|
13
|
+
compatibility: Requires the relevant platform CLIs (kubectl, helm, terraform, git,
|
|
14
|
+
CI runners) and authorized access to the target environment. Docs-only; helper scripts
|
|
15
|
+
and templates not bundled.
|
|
16
|
+
metadata:
|
|
17
|
+
author: devops-skills
|
|
18
|
+
version: '1.0'
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
# Blue-Green & Deployment Strategies
|
|
22
|
+
|
|
23
|
+
Implement zero-downtime deployment patterns for production systems.
|
|
24
|
+
|
|
25
|
+
## Prerequisites
|
|
26
|
+
|
|
27
|
+
- Load balancer or ingress controller
|
|
28
|
+
- Container orchestration (K8s) or cloud platform
|
|
29
|
+
- CI/CD pipeline
|
|
30
|
+
- Health check endpoints
|
|
31
|
+
|
|
32
|
+
## Deployment Strategy Overview
|
|
33
|
+
|
|
34
|
+
```
|
|
35
|
+
┌─────────────────────────────────────────────────────────────┐
|
|
36
|
+
│ DEPLOYMENT STRATEGIES │
|
|
37
|
+
├─────────────┬─────────────┬─────────────┬──────────────────┤
|
|
38
|
+
│ Blue-Green │ Canary │ Rolling │ Recreate │
|
|
39
|
+
├─────────────┼─────────────┼─────────────┼──────────────────┤
|
|
40
|
+
│ Full env │ Gradual % │ Pod by pod │ All at once │
|
|
41
|
+
│ swap │ rollout │ replacement │ │
|
|
42
|
+
├─────────────┼─────────────┼─────────────┼──────────────────┤
|
|
43
|
+
│ Instant │ Slow, safe │ Moderate │ Fast, risky │
|
|
44
|
+
│ rollback │ rollback │ rollback │ │
|
|
45
|
+
├─────────────┼─────────────┼─────────────┼──────────────────┤
|
|
46
|
+
│ 2x resources│ +10-25% │ Same │ Same │
|
|
47
|
+
│ needed │ resources │ resources │ │
|
|
48
|
+
└─────────────┴─────────────┴─────────────┴──────────────────┘
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
## Blue-Green Deployment
|
|
52
|
+
|
|
53
|
+
### Concept
|
|
54
|
+
|
|
55
|
+
```
|
|
56
|
+
Before:
|
|
57
|
+
┌─────────┐ ┌───────────────┐
|
|
58
|
+
│ Users │────▶│ Blue (v1) │ ◀── Active
|
|
59
|
+
└─────────┘ └───────────────┘
|
|
60
|
+
┌───────────────┐
|
|
61
|
+
│ Green (v2) │ ◀── Staging
|
|
62
|
+
└───────────────┘
|
|
63
|
+
|
|
64
|
+
After Switch:
|
|
65
|
+
┌─────────┐ ┌───────────────┐
|
|
66
|
+
│ Users │ │ Blue (v1) │ ◀── Standby
|
|
67
|
+
└─────────┘ └───────────────┘
|
|
68
|
+
│ ┌───────────────┐
|
|
69
|
+
└────────▶│ Green (v2) │ ◀── Active
|
|
70
|
+
└───────────────┘
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
### Kubernetes Implementation
|
|
74
|
+
|
|
75
|
+
```yaml
|
|
76
|
+
# blue-deployment.yaml
|
|
77
|
+
apiVersion: apps/v1
|
|
78
|
+
kind: Deployment
|
|
79
|
+
metadata:
|
|
80
|
+
name: myapp-blue
|
|
81
|
+
labels:
|
|
82
|
+
app: myapp
|
|
83
|
+
version: blue
|
|
84
|
+
spec:
|
|
85
|
+
replicas: 3
|
|
86
|
+
selector:
|
|
87
|
+
matchLabels:
|
|
88
|
+
app: myapp
|
|
89
|
+
version: blue
|
|
90
|
+
template:
|
|
91
|
+
metadata:
|
|
92
|
+
labels:
|
|
93
|
+
app: myapp
|
|
94
|
+
version: blue
|
|
95
|
+
spec:
|
|
96
|
+
containers:
|
|
97
|
+
- name: myapp
|
|
98
|
+
image: myapp:v1.0.0
|
|
99
|
+
ports:
|
|
100
|
+
- containerPort: 8080
|
|
101
|
+
readinessProbe:
|
|
102
|
+
httpGet:
|
|
103
|
+
path: /health
|
|
104
|
+
port: 8080
|
|
105
|
+
initialDelaySeconds: 5
|
|
106
|
+
periodSeconds: 5
|
|
107
|
+
---
|
|
108
|
+
# green-deployment.yaml
|
|
109
|
+
apiVersion: apps/v1
|
|
110
|
+
kind: Deployment
|
|
111
|
+
metadata:
|
|
112
|
+
name: myapp-green
|
|
113
|
+
labels:
|
|
114
|
+
app: myapp
|
|
115
|
+
version: green
|
|
116
|
+
spec:
|
|
117
|
+
replicas: 3
|
|
118
|
+
selector:
|
|
119
|
+
matchLabels:
|
|
120
|
+
app: myapp
|
|
121
|
+
version: green
|
|
122
|
+
template:
|
|
123
|
+
metadata:
|
|
124
|
+
labels:
|
|
125
|
+
app: myapp
|
|
126
|
+
version: green
|
|
127
|
+
spec:
|
|
128
|
+
containers:
|
|
129
|
+
- name: myapp
|
|
130
|
+
image: myapp:v2.0.0
|
|
131
|
+
ports:
|
|
132
|
+
- containerPort: 8080
|
|
133
|
+
readinessProbe:
|
|
134
|
+
httpGet:
|
|
135
|
+
path: /health
|
|
136
|
+
port: 8080
|
|
137
|
+
initialDelaySeconds: 5
|
|
138
|
+
periodSeconds: 5
|
|
139
|
+
---
|
|
140
|
+
# service.yaml - Switch by changing selector
|
|
141
|
+
apiVersion: v1
|
|
142
|
+
kind: Service
|
|
143
|
+
metadata:
|
|
144
|
+
name: myapp
|
|
145
|
+
spec:
|
|
146
|
+
selector:
|
|
147
|
+
app: myapp
|
|
148
|
+
version: blue # Change to 'green' to switch
|
|
149
|
+
ports:
|
|
150
|
+
- port: 80
|
|
151
|
+
targetPort: 8080
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
### Switch Script
|
|
155
|
+
|
|
156
|
+
```bash
|
|
157
|
+
#!/bin/bash
|
|
158
|
+
# blue-green-switch.sh
|
|
159
|
+
|
|
160
|
+
CURRENT=$(kubectl get svc myapp -o jsonpath='{.spec.selector.version}')
|
|
161
|
+
NEW_VERSION=$1
|
|
162
|
+
|
|
163
|
+
echo "Current version: $CURRENT"
|
|
164
|
+
echo "Switching to: $NEW_VERSION"
|
|
165
|
+
|
|
166
|
+
# Verify new deployment is ready
|
|
167
|
+
kubectl rollout status deployment/myapp-$NEW_VERSION
|
|
168
|
+
|
|
169
|
+
# Check health
|
|
170
|
+
HEALTH=$(kubectl exec -it deployment/myapp-$NEW_VERSION -- curl -s localhost:8080/health)
|
|
171
|
+
if [ "$HEALTH" != "ok" ]; then
|
|
172
|
+
echo "Health check failed"
|
|
173
|
+
exit 1
|
|
174
|
+
fi
|
|
175
|
+
|
|
176
|
+
# Switch traffic
|
|
177
|
+
kubectl patch svc myapp -p "{\"spec\":{\"selector\":{\"version\":\"$NEW_VERSION\"}}}"
|
|
178
|
+
|
|
179
|
+
echo "Switched to $NEW_VERSION"
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
### AWS ECS Blue-Green
|
|
183
|
+
|
|
184
|
+
```yaml
|
|
185
|
+
# AWS CodeDeploy appspec.yml
|
|
186
|
+
version: 0.0
|
|
187
|
+
Resources:
|
|
188
|
+
- TargetService:
|
|
189
|
+
Type: AWS::ECS::Service
|
|
190
|
+
Properties:
|
|
191
|
+
TaskDefinition: "arn:aws:ecs:region:account:task-definition/myapp:2"
|
|
192
|
+
LoadBalancerInfo:
|
|
193
|
+
ContainerName: "myapp"
|
|
194
|
+
ContainerPort: 8080
|
|
195
|
+
Hooks:
|
|
196
|
+
- BeforeInstall: "LambdaFunctionToValidateBeforeTrafficShift"
|
|
197
|
+
- AfterInstall: "LambdaFunctionToValidateAfterTrafficShift"
|
|
198
|
+
- AfterAllowTestTraffic: "LambdaFunctionToValidateTestTraffic"
|
|
199
|
+
- BeforeAllowTraffic: "LambdaFunctionToValidateBeforeAllowTraffic"
|
|
200
|
+
- AfterAllowTraffic: "LambdaFunctionToValidateAfterAllowTraffic"
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
## Canary Deployment
|
|
204
|
+
|
|
205
|
+
### Kubernetes with Istio
|
|
206
|
+
|
|
207
|
+
```yaml
|
|
208
|
+
# VirtualService for traffic splitting
|
|
209
|
+
apiVersion: networking.istio.io/v1beta1
|
|
210
|
+
kind: VirtualService
|
|
211
|
+
metadata:
|
|
212
|
+
name: myapp
|
|
213
|
+
spec:
|
|
214
|
+
hosts:
|
|
215
|
+
- myapp
|
|
216
|
+
http:
|
|
217
|
+
- match:
|
|
218
|
+
- headers:
|
|
219
|
+
x-canary:
|
|
220
|
+
exact: "true"
|
|
221
|
+
route:
|
|
222
|
+
- destination:
|
|
223
|
+
host: myapp
|
|
224
|
+
subset: canary
|
|
225
|
+
- route:
|
|
226
|
+
- destination:
|
|
227
|
+
host: myapp
|
|
228
|
+
subset: stable
|
|
229
|
+
weight: 90
|
|
230
|
+
- destination:
|
|
231
|
+
host: myapp
|
|
232
|
+
subset: canary
|
|
233
|
+
weight: 10
|
|
234
|
+
---
|
|
235
|
+
apiVersion: networking.istio.io/v1beta1
|
|
236
|
+
kind: DestinationRule
|
|
237
|
+
metadata:
|
|
238
|
+
name: myapp
|
|
239
|
+
spec:
|
|
240
|
+
host: myapp
|
|
241
|
+
subsets:
|
|
242
|
+
- name: stable
|
|
243
|
+
labels:
|
|
244
|
+
version: stable
|
|
245
|
+
- name: canary
|
|
246
|
+
labels:
|
|
247
|
+
version: canary
|
|
248
|
+
```
|
|
249
|
+
|
|
250
|
+
### Argo Rollouts
|
|
251
|
+
|
|
252
|
+
```yaml
|
|
253
|
+
apiVersion: argoproj.io/v1alpha1
|
|
254
|
+
kind: Rollout
|
|
255
|
+
metadata:
|
|
256
|
+
name: myapp
|
|
257
|
+
spec:
|
|
258
|
+
replicas: 5
|
|
259
|
+
strategy:
|
|
260
|
+
canary:
|
|
261
|
+
steps:
|
|
262
|
+
- setWeight: 10
|
|
263
|
+
- pause: {duration: 5m}
|
|
264
|
+
- setWeight: 25
|
|
265
|
+
- pause: {duration: 5m}
|
|
266
|
+
- setWeight: 50
|
|
267
|
+
- pause: {duration: 5m}
|
|
268
|
+
- setWeight: 75
|
|
269
|
+
- pause: {duration: 5m}
|
|
270
|
+
analysis:
|
|
271
|
+
templates:
|
|
272
|
+
- templateName: success-rate
|
|
273
|
+
startingStep: 2
|
|
274
|
+
args:
|
|
275
|
+
- name: service-name
|
|
276
|
+
value: myapp
|
|
277
|
+
selector:
|
|
278
|
+
matchLabels:
|
|
279
|
+
app: myapp
|
|
280
|
+
template:
|
|
281
|
+
metadata:
|
|
282
|
+
labels:
|
|
283
|
+
app: myapp
|
|
284
|
+
spec:
|
|
285
|
+
containers:
|
|
286
|
+
- name: myapp
|
|
287
|
+
image: myapp:v2.0.0
|
|
288
|
+
ports:
|
|
289
|
+
- containerPort: 8080
|
|
290
|
+
---
|
|
291
|
+
apiVersion: argoproj.io/v1alpha1
|
|
292
|
+
kind: AnalysisTemplate
|
|
293
|
+
metadata:
|
|
294
|
+
name: success-rate
|
|
295
|
+
spec:
|
|
296
|
+
args:
|
|
297
|
+
- name: service-name
|
|
298
|
+
metrics:
|
|
299
|
+
- name: success-rate
|
|
300
|
+
interval: 1m
|
|
301
|
+
successCondition: result[0] >= 0.95
|
|
302
|
+
failureLimit: 3
|
|
303
|
+
provider:
|
|
304
|
+
prometheus:
|
|
305
|
+
address: http://prometheus:9090
|
|
306
|
+
query: |
|
|
307
|
+
sum(rate(http_requests_total{service="{{args.service-name}}",status=~"2.*"}[5m]))
|
|
308
|
+
/
|
|
309
|
+
sum(rate(http_requests_total{service="{{args.service-name}}"}[5m]))
|
|
310
|
+
```
|
|
311
|
+
|
|
312
|
+
## Rolling Deployment
|
|
313
|
+
|
|
314
|
+
### Kubernetes Default
|
|
315
|
+
|
|
316
|
+
```yaml
|
|
317
|
+
apiVersion: apps/v1
|
|
318
|
+
kind: Deployment
|
|
319
|
+
metadata:
|
|
320
|
+
name: myapp
|
|
321
|
+
spec:
|
|
322
|
+
replicas: 5
|
|
323
|
+
strategy:
|
|
324
|
+
type: RollingUpdate
|
|
325
|
+
rollingUpdate:
|
|
326
|
+
maxSurge: 1 # Max pods above desired
|
|
327
|
+
maxUnavailable: 0 # Max pods unavailable
|
|
328
|
+
selector:
|
|
329
|
+
matchLabels:
|
|
330
|
+
app: myapp
|
|
331
|
+
template:
|
|
332
|
+
metadata:
|
|
333
|
+
labels:
|
|
334
|
+
app: myapp
|
|
335
|
+
spec:
|
|
336
|
+
containers:
|
|
337
|
+
- name: myapp
|
|
338
|
+
image: myapp:v2.0.0
|
|
339
|
+
ports:
|
|
340
|
+
- containerPort: 8080
|
|
341
|
+
readinessProbe:
|
|
342
|
+
httpGet:
|
|
343
|
+
path: /ready
|
|
344
|
+
port: 8080
|
|
345
|
+
initialDelaySeconds: 5
|
|
346
|
+
periodSeconds: 5
|
|
347
|
+
livenessProbe:
|
|
348
|
+
httpGet:
|
|
349
|
+
path: /health
|
|
350
|
+
port: 8080
|
|
351
|
+
initialDelaySeconds: 10
|
|
352
|
+
periodSeconds: 10
|
|
353
|
+
```
|
|
354
|
+
|
|
355
|
+
### Rolling Update Commands
|
|
356
|
+
|
|
357
|
+
```bash
|
|
358
|
+
# Update image
|
|
359
|
+
kubectl set image deployment/myapp myapp=myapp:v2.0.0
|
|
360
|
+
|
|
361
|
+
# Watch rollout
|
|
362
|
+
kubectl rollout status deployment/myapp
|
|
363
|
+
|
|
364
|
+
# Pause rollout
|
|
365
|
+
kubectl rollout pause deployment/myapp
|
|
366
|
+
|
|
367
|
+
# Resume rollout
|
|
368
|
+
kubectl rollout resume deployment/myapp
|
|
369
|
+
|
|
370
|
+
# Rollback
|
|
371
|
+
kubectl rollout undo deployment/myapp
|
|
372
|
+
|
|
373
|
+
# Rollback to specific revision
|
|
374
|
+
kubectl rollout undo deployment/myapp --to-revision=2
|
|
375
|
+
|
|
376
|
+
# View history
|
|
377
|
+
kubectl rollout history deployment/myapp
|
|
378
|
+
```
|
|
379
|
+
|
|
380
|
+
## Health Checks
|
|
381
|
+
|
|
382
|
+
### Comprehensive Health Endpoint
|
|
383
|
+
|
|
384
|
+
```python
|
|
385
|
+
# Flask health endpoint
|
|
386
|
+
from flask import Flask, jsonify
|
|
387
|
+
import psycopg2
|
|
388
|
+
import redis
|
|
389
|
+
|
|
390
|
+
app = Flask(__name__)
|
|
391
|
+
|
|
392
|
+
@app.route('/health')
|
|
393
|
+
def health():
|
|
394
|
+
"""Liveness probe - is the app running?"""
|
|
395
|
+
return jsonify({'status': 'healthy'}), 200
|
|
396
|
+
|
|
397
|
+
@app.route('/ready')
|
|
398
|
+
def ready():
|
|
399
|
+
"""Readiness probe - can the app serve traffic?"""
|
|
400
|
+
checks = {}
|
|
401
|
+
|
|
402
|
+
# Database check
|
|
403
|
+
try:
|
|
404
|
+
conn = psycopg2.connect(DATABASE_URL)
|
|
405
|
+
conn.close()
|
|
406
|
+
checks['database'] = 'ok'
|
|
407
|
+
except Exception as e:
|
|
408
|
+
checks['database'] = str(e)
|
|
409
|
+
return jsonify({'status': 'unhealthy', 'checks': checks}), 503
|
|
410
|
+
|
|
411
|
+
# Redis check
|
|
412
|
+
try:
|
|
413
|
+
r = redis.from_url(REDIS_URL)
|
|
414
|
+
r.ping()
|
|
415
|
+
checks['redis'] = 'ok'
|
|
416
|
+
except Exception as e:
|
|
417
|
+
checks['redis'] = str(e)
|
|
418
|
+
return jsonify({'status': 'unhealthy', 'checks': checks}), 503
|
|
419
|
+
|
|
420
|
+
return jsonify({'status': 'healthy', 'checks': checks}), 200
|
|
421
|
+
```
|
|
422
|
+
|
|
423
|
+
|
|
424
|
+
## Contents
|
|
425
|
+
|
|
426
|
+
- [Rollback Procedures](references/details.md)
|
|
427
|
+
- [Rollback Checklist](references/details.md)
|
|
428
|
+
- [Common Issues](references/details.md)
|
|
429
|
+
- [Best Practices](references/details.md)
|
|
430
|
+
- [Related Skills](references/details.md)
|
|
431
|
+
|
|
432
|
+
## When to Use This Skill
|
|
433
|
+
|
|
434
|
+
Use this skill when:
|
|
435
|
+
- Implementing zero-downtime deployments
|
|
436
|
+
- Reducing deployment risk
|
|
437
|
+
- Enabling instant rollbacks
|
|
438
|
+
- Running canary releases
|
|
439
|
+
- Performing A/B testing in production
|
|
440
|
+
|
|
441
|
+
## Limitations
|
|
442
|
+
|
|
443
|
+
- Guidance executes against real environments: confirm target, blast radius, and rollback plan before applying anything.
|
|
444
|
+
- Never deploy to production without explicit approval. Docs-only import: upstream scripts and templates not bundled.
|
|
445
|
+
|
|
446
|
+
### Example
|
|
447
|
+
|
|
448
|
+
```bash
|
|
449
|
+
git status && git diff --stat
|
|
450
|
+
kubectl diff -f manifest.yaml
|
|
451
|
+
```
|
|
452
|
+
|
|
453
|
+
> Adapted from [BagelHole/DevOps-Security-Agent-Skills](https://github.com/BagelHole/DevOps-Security-Agent-Skills) (MIT); frontmatter, When to Use/Limitations, and safety boundaries added for upstream compliance. Docs-only import: helper scripts and templates not bundled.
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
# Details (moved from SKILL.md)
|
|
2
|
+
|
|
3
|
+
> Extended reference content for `blue-green-deploy`, kept under `references/` so the entrypoint stays within the audit budget.
|
|
4
|
+
|
|
5
|
+
## Rollback Procedures
|
|
6
|
+
|
|
7
|
+
### Automated Rollback
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
#!/bin/bash
|
|
11
|
+
# auto-rollback.sh
|
|
12
|
+
|
|
13
|
+
DEPLOYMENT=$1
|
|
14
|
+
THRESHOLD=0.95
|
|
15
|
+
INTERVAL=60
|
|
16
|
+
|
|
17
|
+
echo "Monitoring deployment $DEPLOYMENT"
|
|
18
|
+
|
|
19
|
+
while true; do
|
|
20
|
+
# Get success rate from Prometheus
|
|
21
|
+
SUCCESS_RATE=$(curl -s "http://prometheus:9090/api/v1/query?query=sum(rate(http_requests_total{status=~\"2.*\"}[5m]))/sum(rate(http_requests_total[5m]))" | jq -r '.data.result[0].value[1]')
|
|
22
|
+
|
|
23
|
+
echo "Current success rate: $SUCCESS_RATE"
|
|
24
|
+
|
|
25
|
+
if (( $(echo "$SUCCESS_RATE < $THRESHOLD" | bc -l) )); then
|
|
26
|
+
echo "Success rate below threshold! Rolling back..."
|
|
27
|
+
kubectl rollout undo deployment/$DEPLOYMENT
|
|
28
|
+
exit 1
|
|
29
|
+
fi
|
|
30
|
+
|
|
31
|
+
sleep $INTERVAL
|
|
32
|
+
done
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
### Manual Rollback Checklist
|
|
36
|
+
|
|
37
|
+
```markdown
|
|
38
|
+
|
|
39
|
+
## Rollback Checklist
|
|
40
|
+
|
|
41
|
+
### Before Rollback
|
|
42
|
+
- [ ] Confirm issue is deployment-related
|
|
43
|
+
- [ ] Document current error rates
|
|
44
|
+
- [ ] Notify team in #deployments channel
|
|
45
|
+
|
|
46
|
+
### During Rollback
|
|
47
|
+
- [ ] Execute rollback command
|
|
48
|
+
- [ ] Monitor rollback progress
|
|
49
|
+
- [ ] Verify old version is serving traffic
|
|
50
|
+
|
|
51
|
+
### After Rollback
|
|
52
|
+
- [ ] Confirm error rates normalized
|
|
53
|
+
- [ ] Update incident ticket
|
|
54
|
+
- [ ] Schedule post-mortem
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
## Common Issues
|
|
59
|
+
|
|
60
|
+
### Issue: Slow Deployments
|
|
61
|
+
**Problem**: Rollout takes too long
|
|
62
|
+
**Solution**: Increase maxSurge, decrease minReadySeconds
|
|
63
|
+
|
|
64
|
+
### Issue: Failed Health Checks
|
|
65
|
+
**Problem**: Pods not becoming ready
|
|
66
|
+
**Solution**: Check probe endpoints, increase timeouts
|
|
67
|
+
|
|
68
|
+
### Issue: Traffic During Rollback
|
|
69
|
+
**Problem**: Errors during switch
|
|
70
|
+
**Solution**: Use connection draining, implement graceful shutdown
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
## Best Practices
|
|
74
|
+
|
|
75
|
+
- Always implement health checks
|
|
76
|
+
- Use connection draining
|
|
77
|
+
- Test rollback procedures regularly
|
|
78
|
+
- Monitor key metrics during deployment
|
|
79
|
+
- Implement circuit breakers
|
|
80
|
+
- Use deployment slots/environments
|
|
81
|
+
- Automate deployment verification
|
|
82
|
+
- Document rollback procedures
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
## Related Skills
|
|
86
|
+
|
|
87
|
+
- kubernetes-ops (`kubernetes-ops`) - K8s deployment basics
|
|
88
|
+
- argocd-gitops (`argocd-gitops`) - GitOps deployments
|
|
89
|
+
- feature-flags (`feature-flags`) - Progressive rollout
|
|
90
|
+
|