google-agents-cli-scaffold
Project scaffolding, deployment configuration, and CI/CD setup for Google ADK agents.
helm-chart-scaffolding
Design, organize, and manage Helm charts for templating and packaging Kubernetes applications with reusable configurations. Use when creating Helm charts, packaging Kubernetes applications, or implementing templated deployments.
Full skill instructions
Comprehensive guidance for creating, organizing, and managing Helm charts for packaging and deploying Kubernetes applications.
This skill provides step-by-step instructions for building production-ready Helm charts, including chart structure, templating patterns, values management, and validation strategies.
Use this skill when you need to:
Before starting, classify your chart to determine the appropriate approach:
| Level | Characteristics | CI Handling | Example |
|---|---|---|---|
| Simple | Single container, no external deps, standard probes | Full lint + install | Static site, simple API |
| Standard | Multiple resources, ConfigMaps/Secrets, optional deps | Full lint + install | Web app with ingress |
| Complex | External services required, multi-port, JVM config | Lint only, skip install | OpenMetadata, data platforms |
| Operator | CRDs, webhooks, cluster-wide resources | Lint only, manual test | Prometheus Operator |
Quick Decision:
assets/patterns/multi-port-service.yamlassets/patterns/jvm-application.yamlDetails: See
references/chart-complexity.mdfor full classification guide and CI configuration.
Before creating a chart, research the application:
If documentation scraping fails, use alternative methods:
Details: See
references/research-strategy.mdfor complete fallback strategies and information gathering checklist.
For complex charts or when contributing to existing projects, use a structured approach:
| Chart Complexity | Official Chart Exists | Workflow |
|---|---|---|
| Simple/Standard | No | Fast Path - Quick research, create, validate |
| Simple/Standard | Yes (use as-is) | Skip - Use existing chart |
| Complex/Operator | No | Full Workflow - Research → Plan → Implement |
| Any | Yes (extend) | Full Workflow with contribution strategy |
Systematically investigate the application before creating templates:
Details: See
references/research-phase-workflow.md
Translate research into actionable implementation plan:
Details: See
references/planning-phase-workflow.md
Execute with quality gates and review checkpoints:
Details: See
references/implementation-workflow.md
When an official chart exists but needs improvements:
Details: See
references/extend-contribute-strategy.md
Helm is the package manager for Kubernetes that:
Create new chart:
helm create my-app
Standard chart structure:
my-app/
├── Chart.yaml # Chart metadata
├── values.yaml # Default configuration values
├── charts/ # Chart dependencies
├── templates/ # Kubernetes manifest templates
│ ├── NOTES.txt # Post-install notes
│ ├── _helpers.tpl # Template helpers
│ ├── deployment.yaml
│ ├── service.yaml
│ ├── ingress.yaml
│ ├── serviceaccount.yaml
│ ├── hpa.yaml
│ └── tests/
│ └── test-connection.yaml
└── .helmignore # Files to ignore
Chart metadata defines the package:
apiVersion: v2
name: my-app
description: A Helm chart for My Application
type: application
version: 1.0.0 # Chart version
appVersion: "2.1.0" # Application version
# Keywords for chart discovery
keywords:
- web
- api
- backend
# Maintainer information
maintainers:
- name: DevOps Team
email: [email protected]
url: https://github.com/example/my-app
# Source code repository
sources:
- https://github.com/example/my-app
# Homepage
home: https://example.com
# Chart icon
icon: https://example.com/icon.png
# Dependencies
dependencies:
- name: postgresql
version: "12.0.0"
repository: "https://charts.bitnami.com/bitnami"
condition: postgresql.enabled
- name: redis
version: "17.0.0"
repository: "https://charts.bitnami.com/bitnami"
condition: redis.enabled
Reference: See assets/Chart.yaml.template for complete example
Organize values hierarchically:
# Image configuration
image:
repository: myapp
tag: "1.0.0"
pullPolicy: IfNotPresent
# Number of replicas
replicaCount: 3
# Service configuration
service:
type: ClusterIP
port: 80
targetPort: 8080
# Ingress configuration
ingress:
enabled: false
className: nginx
hosts:
- host: app.example.com
paths:
- path: /
pathType: Prefix
# Resources
resources:
requests:
memory: "256Mi"
cpu: "250m"
limits:
memory: "512Mi"
cpu: "500m"
# Autoscaling
autoscaling:
enabled: false
minReplicas: 2
maxReplicas: 10
targetCPUUtilizationPercentage: 80
# Environment variables
env:
- name: LOG_LEVEL
value: "info"
# ConfigMap data
configMap:
data:
APP_MODE: production
# Dependencies
postgresql:
enabled: true
auth:
database: myapp
username: myapp
redis:
enabled: false
Reference: See assets/values.yaml.template for complete structure
Use Go templating with Helm functions:
templates/deployment.yaml:
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ include "my-app.fullname" . }}
labels:
{{- include "my-app.labels" . | nindent 4 }}
spec:
{{- if not .Values.autoscaling.enabled }}
replicas: {{ .Values.replicaCount }}
{{- end }}
selector:
matchLabels:
{{- include "my-app.selectorLabels" . | nindent 6 }}
template:
metadata:
labels:
{{- include "my-app.selectorLabels" . | nindent 8 }}
spec:
containers:
- name: {{ .Chart.Name }}
image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}"
imagePullPolicy: {{ .Values.image.pullPolicy }}
ports:
- name: http
containerPort: {{ .Values.service.targetPort }}
resources:
{{- toYaml .Values.resources | nindent 12 }}
env:
{{- toYaml .Values.env | nindent 12 }}
templates/_helpers.tpl:
{{/*
Expand the name of the chart.
*/}}
{{- define "my-app.name" -}}
{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }}
{{- end }}
{{/*
Create a default fully qualified app name.
*/}}
{{- define "my-app.fullname" -}}
{{- if .Values.fullnameOverride }}
{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" }}
{{- else }}
{{- $name := default .Chart.Name .Values.nameOverride }}
{{- if contains $name .Release.Name }}
{{- .Release.Name | trunc 63 | trimSuffix "-" }}
{{- else }}
{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" }}
{{- end }}
{{- end }}
{{- end }}
{{/*
Common labels
*/}}
{{- define "my-app.labels" -}}
helm.sh/chart: {{ include "my-app.chart" . }}
{{ include "my-app.selectorLabels" . }}
{{- if .Chart.AppVersion }}
app.kubernetes.io/version: {{ .Chart.AppVersion | quote }}
{{- end }}
app.kubernetes.io/managed-by: {{ .Release.Service }}
{{- end }}
{{/*
Selector labels
*/}}
{{- define "my-app.selectorLabels" -}}
app.kubernetes.io/name: {{ include "my-app.name" . }}
app.kubernetes.io/instance: {{ .Release.Name }}
{{- end }}
Add dependencies in Chart.yaml:
dependencies:
- name: postgresql
version: "12.0.0"
repository: "https://charts.bitnami.com/bitnami"
condition: postgresql.enabled
Update dependencies:
helm dependency update
helm dependency build
Override dependency values:
# values.yaml
postgresql:
enabled: true
auth:
database: myapp
username: myapp
password: changeme
primary:
persistence:
enabled: true
size: 10Gi
Validation commands:
# Lint the chart
helm lint my-app/
# Dry-run installation
helm install my-app ./my-app --dry-run --debug
# Template rendering
helm template my-app ./my-app
# Template with values
helm template my-app ./my-app -f values-prod.yaml
# Show computed values
helm show values ./my-app
Validation script:
#!/bin/bash
set -e
echo "Linting chart..."
helm lint .
echo "Testing template rendering..."
helm template test-release . --dry-run
echo "Checking for required values..."
helm template test-release . --validate
echo "All validations passed!"
Reference: See scripts/validate-chart.sh
Package the chart:
helm package my-app/
# Creates: my-app-1.0.0.tgz
Create chart repository:
# Create index
helm repo index .
# Upload to repository
# AWS S3 example
aws s3 sync . s3://my-helm-charts/ --exclude "*" --include "*.tgz" --include "index.yaml"
Use the chart:
helm repo add my-repo https://charts.example.com
helm repo update
helm install my-app my-repo/my-app
Environment-specific values files:
my-app/
├── values.yaml # Defaults
├── values-dev.yaml # Development
├── values-staging.yaml # Staging
└── values-prod.yaml # Production
values-prod.yaml:
replicaCount: 5
image:
tag: "2.1.0"
resources:
requests:
memory: "512Mi"
cpu: "500m"
limits:
memory: "1Gi"
cpu: "1000m"
autoscaling:
enabled: true
minReplicas: 3
maxReplicas: 20
ingress:
enabled: true
hosts:
- host: app.example.com
paths:
- path: /
pathType: Prefix
postgresql:
enabled: true
primary:
persistence:
size: 100Gi
Install with environment:
helm install my-app ./my-app -f values-prod.yaml --namespace production
Pre-install hook:
# templates/pre-install-job.yaml
apiVersion: batch/v1
kind: Job
metadata:
name: {{ include "my-app.fullname" . }}-db-setup
annotations:
"helm.sh/hook": pre-install
"helm.sh/hook-weight": "-5"
"helm.sh/hook-delete-policy": hook-succeeded
spec:
template:
spec:
containers:
- name: db-setup
image: postgres:15
command: ["psql", "-c", "CREATE DATABASE myapp"]
restartPolicy: Never
Test connection:
# templates/tests/test-connection.yaml
apiVersion: v1
kind: Pod
metadata:
name: "{{ include "my-app.fullname" . }}-test-connection"
annotations:
"helm.sh/hook": test
spec:
containers:
- name: wget
image: busybox
command: ['wget']
args: ['{{ include "my-app.fullname" . }}:{{ .Values.service.port }}']
restartPolicy: Never
Run tests:
helm test my-app
{{- if .Values.ingress.enabled }}
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: {{ include "my-app.fullname" . }}
spec:
# ...
{{- end }}
env:
{{- range .Values.env }}
- name: {{ .name }}
value: {{ .value | quote }}
{{- end }}
data:
config.yaml: |
{{- .Files.Get "config/application.yaml" | nindent 4 }}
global:
imageRegistry: docker.io
imagePullSecrets:
- name: regcred
# Use in templates:
image: {{ .Values.global.imageRegistry }}/{{ .Values.image.repository }}
Ready-to-use patterns for common scenarios. Copy values and template sections to your chart.
| Pattern | Use When | File |
|---|---|---|
| Database | Chart connects to MySQL or PostgreSQL | assets/patterns/external-database.yaml |
| Search | Chart connects to Elasticsearch or OpenSearch | assets/patterns/external-search.yaml |
| Messaging | Chart connects to Airflow, Kafka, RabbitMQ, or Redis | assets/patterns/external-messaging.yaml |
All patterns include:
existingSecret support| Pattern | Use When | File |
|---|---|---|
| Multi-Port Service | App has main + admin/metrics ports | assets/patterns/multi-port-service.yaml |
| JVM Application | Java/Kotlin/Scala app needing heap/GC config | assets/patterns/jvm-application.yaml |
| Health Probes (Multi-Port) | Different probes on different ports | assets/patterns/health-probes-multiport.yaml |
For port numbers, environment variables, and connection strings:
references/external-services.md - Common services reference tableTemplate rendering errors:
helm template my-app ./my-app --debug
Dependency issues:
helm dependency update
helm dependency list
Installation failures:
helm install my-app ./my-app --dry-run --debug
kubectl get events --sort-by='.lastTimestamp'
assets/Chart.yaml.template - Chart metadata templateassets/values.yaml.template - Values structure templateassets/patterns/external-database.yaml - MySQL/PostgreSQL configurationassets/patterns/external-search.yaml - Elasticsearch/OpenSearch configurationassets/patterns/external-messaging.yaml - Airflow/Kafka/RabbitMQ/Redis configurationassets/patterns/multi-port-service.yaml - Multiple ports patternassets/patterns/jvm-application.yaml - JVM heap/GC/JMX configurationassets/patterns/health-probes-multiport.yaml - Probes on different portsassets/templates/research-summary.md - Research findings documentationassets/templates/high-level-plan.md - High-level chart planassets/templates/phase-plan.md - Per-phase implementation planassets/templates/issue-structure.md - GitHub issue hierarchyreferences/chart-structure.md - Detailed chart organizationreferences/chart-complexity.md - Chart complexity classification guidereferences/research-strategy.md - Documentation research and fallback strategiesreferences/external-services.md - Common ports, env vars, connection stringsreferences/extend-contribute-strategy.md - Extending and contributing to existing chartsreferences/research-phase-workflow.md - Research phase structured workflowreferences/planning-phase-workflow.md - Planning phase structured workflowreferences/implementation-workflow.md - Implementation phase with checkpointsscripts/validate-chart.sh - Validation scriptk8s-manifest-generator - For creating base Kubernetes manifestsgitops-workflow - For automated Helm chart deploymentsProject scaffolding, deployment configuration, and CI/CD setup for Google ADK agents.
Set up tracing, logging, and monitoring for deployed ADK agents across Cloud Trace, BigQuery, and third-party platforms.
Enterprise Azure infrastructure architect generating Bicep or Terraform from workload descriptions.
Plan and configure production-ready Azure Kubernetes Service clusters with Day-0 and Day-1 best practices.
Raw mechanical interfaces fusing Swiss typographic print with military terminal aesthetics. Rigid grids, extreme type scale contrast, utilitarian color, analog degradation effects. For data-heavy dashboards, portfolios, or editorial sites that need to feel like declassified blueprints.
Web search, scraping, extraction, crawling, and monitoring via ScrapeGraph AI CLI.
Skill for working with Firebase Hosting (Classic). Use this when you want to deploy static web apps, Single Page Apps (SPAs), or simple microservices. Do NOT use for Firebase App Hosting.
Deploy and manage web apps with Firebase App Hosting. Use this skill when deploying Next.js/Angular apps with backends.
Deploy applications and websites to Vercel. Use when the user requests deployment actions like "deploy my app", "deploy and give me the link", "push this live", or "create a preview deployment".
Build SEO-optimized pages at scale using templates, data, and proven playbook patterns.
Design and build isolated, reusable Convex backend components with clear boundaries and app-facing wrappers.
Deploy and manage projects on Vercel using token-based authentication. Use when working with Vercel CLI using access tokens rather than interactive login — e.g. "deploy to vercel", "set up vercel", "add environment variables to vercel".
Opus.ai: Revolutionize Your Web Experience
Build a no-code AI app in minutes.
An IDE for code migration from legacy to modern frameworks through coding agents.
Automate CGI animation in live-action scenes
Branded artistic QR-code concepts
Launch a website in seconds with AI.
Streamline Your Coding Experience with AI Code Helper
Convert any screenshot or design to clean code.