
Angularjs Unit Testing
- 23 installs
- 12 repo stars
- Updated June 28, 2026
- greedychipmunk/agent-skills
Packages and deploys Kubernetes applications with Helm charts and releases, keeping deployments reproducible and auditable across environments.
About
Despite its slug, the documented skill is 'helm': it covers Helm install/upgrade/rollback, chart authoring, repositories, and release management. A developer uses it for reproducible, safe Helm-based Kubernetes deployments.
- Intent router points to install, command cookbook, authoring, and release refs
- Quick-start covers repo add, search, values inspection, install, and upgrade
Angularjs Unit Testing by the numbers
- 23 all-time installs (skills.sh)
- Ranked #896 of 1,435 DevOps & CI/CD skills by installs in the Skillselion catalog
- Data as of Jul 13, 2026 (Skillselion catalog sync)
npx skills add https://github.com/greedychipmunk/agent-skills --skill angularjs-unit-testingAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 23 |
|---|---|
| repo stars | ★ 12 |
| Last updated | June 28, 2026 |
| Repository | greedychipmunk/agent-skills ↗ |
What it does
Packages and deploys Kubernetes applications with Helm charts and releases, keeping deployments reproducible and auditable across environments.
Files
helm
Use this skill to keep Helm-based Kubernetes deployments reproducible, auditable, and safe across environments.
Intent Router
| Request | Reference | Load When |
|---|---|---|
| Install Helm, add repos, configure registries | resources/install-and-setup.md | User needs to install Helm or configure repositories |
| install/upgrade/list/rollback/template commands | resources/command-cookbook.md | User needs day-to-day Helm release operations |
| Chart.yaml, templates, values, helpers | resources/chart-authoring.md | User wants to author or modify a Helm chart |
| Release lifecycle, --atomic, --wait, diff plugin | resources/release-management.md | User asks about release management or upgrade strategies |
Quick Start
# Add a chart repository
helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo update
# Search for a chart
helm search repo bitnami/nginx
# Inspect default values
helm show values bitnami/nginx
# Install with custom values
helm install my-nginx bitnami/nginx --set service.type=ClusterIP -n my-namespace
# Upgrade with a values file
helm upgrade my-nginx bitnami/nginx -f values.yaml -n my-namespace
# List releases
helm list -ACore Command Tracks
- Install:
helm install <release> <chart> [flags]— create a new release - Upgrade:
helm upgrade --install <release> <chart>— create or update release - Rollback:
helm rollback <release> [revision]— revert to previous revision - Template:
helm template <release> <chart>— render manifests locally without applying - Values:
helm get values <release>— inspect values used by a deployed release - Status:
helm status <release>— show release info and notes - Uninstall:
helm uninstall <release>— remove release and resources
Safety Guardrails
- Always run
helm upgrade --dry-run --debugorhelm templatebefore applying changes to production. - Use the helm diff plugin (
helm diff upgrade) to inspect what will change before applying. - Use
--atomicin CI pipelines so failed upgrades automatically roll back. - Never pass secrets via
--set; use a secrets manager or the helm-secrets plugin. - Always specify
--namespaceexplicitly; do not rely on the default namespace. - Pin chart versions with
--versionin production to ensure reproducibility. - Confirm before running
helm uninstall; it removes all resources managed by the release.
Workflow
1. Add and update chart repository: helm repo add and helm repo update. 2. Inspect default values: helm show values <chart>. 3. Create a values.yaml override file for environment-specific configuration. 4. Render and review manifests: helm template <release> <chart> -f values.yaml. 5. Install or upgrade: helm upgrade --install <release> <chart> -f values.yaml --atomic --wait. 6. Verify: helm list, helm status <release>, kubectl get pods -n <namespace>. 7. On failure, check: helm history <release> and helm rollback <release>.
# Troubleshoot a failed upgrade: inspect history and roll back
helm history my-nginx -n my-namespace
helm rollback my-nginx 1 -n my-namespace
helm status my-nginx -n my-namespaceRelated Skills
- kubectl — inspect and manage Kubernetes resources created by Helm
- docker — build container images referenced in Helm chart values
References
resources/install-and-setup.mdresources/command-cookbook.mdresources/chart-authoring.mdresources/release-management.md- Official docs: <https://helm.sh/docs/>
- Chart hub: <https://artifacthub.io/>
helm — Chart Authoring
Chart Scaffold
# Create a new chart
helm create mychart
# Resulting structure:
# mychart/
# Chart.yaml — chart metadata
# values.yaml — default values
# charts/ — chart dependencies
# templates/ — Kubernetes manifest templates
# templates/NOTES.txt — post-install notes (printed to stdout)
# templates/_helpers.tpl — named templates (partials)Chart.yaml Required Fields
apiVersion: v2 # Helm 3 charts use v2
name: mychart # chart name (must match directory name)
version: 0.1.0 # chart version (SemVer)
appVersion: "1.16.0" # version of the application being packagedOptional fields:
description: A Helm chart for myapp
type: application # or "library" for shared template charts
keywords:
- myapp
home: https://myapp.example.com
sources:
- https://github.com/myorg/myapp
maintainers:
- name: My Name
email: me@example.com
dependencies:
- name: postgresql
version: "13.x.x"
repository: https://charts.bitnami.com/bitnami
condition: postgresql.enabledvalues.yaml
Default values are defined in values.yaml and can be overridden by users:
replicaCount: 1
image:
repository: nginx
tag: "latest"
pullPolicy: IfNotPresent
service:
type: ClusterIP
port: 80
resources:
limits:
cpu: 100m
memory: 128Mi
requests:
cpu: 100m
memory: 128MiValues hierarchy (highest to lowest priority):
1. --set flags 2. -f custom-values.yaml (last file wins) 3. values.yaml in chart
Template Syntax
Templates use Go text/template with Helm's Sprig functions:
# templates/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ include "mychart.fullname" . }}
labels:
{{- include "mychart.labels" . | nindent 4 }}
spec:
replicas: {{ .Values.replicaCount }}
selector:
matchLabels:
{{- include "mychart.selectorLabels" . | nindent 6 }}
template:
metadata:
labels:
{{- include "mychart.selectorLabels" . | nindent 8 }}
spec:
containers:
- name: {{ .Chart.Name }}
image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}"
imagePullPolicy: {{ .Values.image.pullPolicy }}
ports:
- containerPort: {{ .Values.service.port }}Built-in Objects
| Object | Description |
|---|---|
.Release.Name | Name of the release |
.Release.Namespace | Namespace of the release |
.Release.IsInstall | True on first install |
.Release.IsUpgrade | True on upgrade |
.Values | Values from values.yaml and overrides |
.Chart | Contents of Chart.yaml |
.Capabilities.KubeVersion | Kubernetes version |
_helpers.tpl and Named Templates
{{/*
Expand the name of the chart.
*/}}
{{- define "mychart.name" -}}
{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }}
{{- end }}
{{/*
Common labels
*/}}
{{- define "mychart.labels" -}}
helm.sh/chart: {{ include "mychart.chart" . }}
{{ include "mychart.selectorLabels" . }}
app.kubernetes.io/managed-by: {{ .Release.Service }}
{{- end }}Use named templates with include:
labels:
{{- include "mychart.labels" . | nindent 4 }}NOTES.txt
Displayed after helm install or helm upgrade:
Thank you for installing {{ .Chart.Name }}.
Your release is named {{ .Release.Name }}.
To get the application URL:
kubectl get svc --namespace {{ .Release.Namespace }} {{ include "mychart.fullname" . }}Lint and Package
# Lint chart for errors and best practices
helm lint ./mychart
# Lint with specific values
helm lint ./mychart -f custom-values.yaml
# Package chart into .tgz archive
helm package ./mychart
# Package with specific version
helm package ./mychart --version 1.2.3Dependencies
# Add dependency to Chart.yaml, then fetch
helm dependency update ./mychart
# List dependencies
helm dependency list ./mychart
# Build dependencies (use vendored charts in charts/)
helm dependency build ./mycharthelm — Command Cookbook
Install and Upgrade
# Install a new release
helm install my-release bitnami/nginx -n my-namespace
# Upgrade existing release
helm upgrade my-release bitnami/nginx -n my-namespace
# Install or upgrade (idempotent)
helm upgrade --install my-release bitnami/nginx -n my-namespace --create-namespace
# Install specific chart version
helm upgrade --install my-release bitnami/nginx --version 15.3.0 -n my-namespaceDry Run and Debug
# Dry run (server-side validation)
helm upgrade --install my-release bitnami/nginx --dry-run
# Dry run with rendered manifest output and debug info
helm upgrade --install my-release bitnami/nginx --dry-run --debug
# Render manifests locally (no cluster connection required)
helm template my-release bitnami/nginx -f values.yaml
helm template my-release bitnami/nginx -f values.yaml > rendered.yamlValues Management
# Pass single value
helm upgrade --install my-release bitnami/nginx --set replicaCount=3
# Pass multiple values
helm upgrade --install my-release bitnami/nginx \
--set replicaCount=3 \
--set service.type=LoadBalancer
# Use values file
helm upgrade --install my-release bitnami/nginx -f values.yaml
# Use multiple values files (later files override earlier)
helm upgrade --install my-release bitnami/nginx -f values.yaml -f values-prod.yaml
# Mix -f and --set (--set takes highest precedence)
helm upgrade --install my-release bitnami/nginx -f values.yaml --set image.tag=v2.0List and Status
# List releases in current namespace
helm list
# List releases in specific namespace
helm list -n my-namespace
# List all releases across all namespaces
helm list -A
# List failed releases
helm list -A --failed
# Show release status and notes
helm status my-release -n my-namespace
# Show status with all resources
helm status my-release -n my-namespace --show-resourcesUninstall
# Uninstall a release (removes all managed resources)
helm uninstall my-release -n my-namespace
# Keep history after uninstall
helm uninstall my-release -n my-namespace --keep-historyRollback and History
# View release history
helm history my-release -n my-namespace
# Rollback to previous revision
helm rollback my-release -n my-namespace
# Rollback to specific revision
helm rollback my-release 2 -n my-namespaceInspect Release Details
# Get values used by deployed release
helm get values my-release -n my-namespace
# Get all values (including defaults)
helm get values my-release -n my-namespace --all
# Get rendered manifest of deployed release
helm get manifest my-release -n my-namespace
# Get release notes
helm get notes my-release -n my-namespace
# Get all release info
helm get all my-release -n my-namespaceShow Chart Info
# Show chart values (defaults)
helm show values bitnami/nginx
# Show chart README
helm show readme bitnami/nginx
# Show chart metadata
helm show chart bitnami/nginx
# Show all chart info
helm show all bitnami/nginxSearch
# Search configured repos
helm search repo nginx
helm search repo bitnami/nginx
helm search repo bitnami/nginx --versions # all versions
# Search Artifact Hub
helm search hub nginxPull Charts Locally
# Download chart archive
helm pull bitnami/nginx
# Download and extract
helm pull bitnami/nginx --untar
# Download specific version
helm pull bitnami/nginx --version 15.3.0 --untar --untardir ./charts
# Pull from OCI registry
helm pull oci://registry.example.com/charts/myapp --version 1.2.3OCI Chart Operations
# Pull from OCI registry
helm pull oci://ghcr.io/org/charts/myapp --version 1.0.0
# Install directly from OCI
helm install my-release oci://ghcr.io/org/charts/myapp --version 1.0.0
# Upgrade from OCI
helm upgrade my-release oci://ghcr.io/org/charts/myapp --version 1.1.0helm — Install and Setup
Install by Platform
Linux (binary)
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
helm versionmacOS (Homebrew)
brew install helm
helm versionDebian/Ubuntu (apt)
curl https://baltocdn.com/helm/signing.asc | gpg --dearmor | sudo tee /usr/share/keyrings/helm.gpg > /dev/null
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/helm.gpg] https://baltocdn.com/helm/stable/debian/ all main" | sudo tee /etc/apt/sources.list.d/helm-stable-debian.list
sudo apt-get update && sudo apt-get install helmasdf plugin
asdf plugin add helm https://github.com/Antiarchitect/asdf-helm.git
asdf install helm latest
asdf global helm latestVerify Installation
helm version
helm envKUBECONFIG Dependency
Helm uses the same kubeconfig as kubectl. Ensure your context is correct before running Helm commands:
kubectl config current-context
kubectl config get-contextsHelm Environment Variables
| Variable | Purpose |
|---|---|
HELM_DATA_HOME | Override data directory (default: ~/.local/share/helm) |
HELM_CACHE_HOME | Override cache directory (default: ~/.cache/helm) |
HELM_CONFIG_HOME | Override config directory (default: ~/.config/helm) |
HELM_NAMESPACE | Default namespace for Helm operations |
HELM_DEBUG | Enable verbose debug output |
helm env # show all Helm env vars
export HELM_DEBUG=true # enable debug globallyRepository Management
# Add a repository
helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo add stable https://charts.helm.sh/stable
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
# Update all repositories
helm repo update
# List configured repositories
helm repo list
# Remove a repository
helm repo remove bitnami
# Search for charts
helm search repo nginx
helm search repo bitnami/nginx --versionsOCI Registry Authentication
Helm 3.8+ supports OCI registries natively:
# Login to OCI registry
helm registry login registry.example.com --username myuser --password mypassword
# Login to AWS ECR
aws ecr get-login-password --region us-east-1 | helm registry login \
--username AWS \
--password-stdin \
123456789012.dkr.ecr.us-east-1.amazonaws.com
# Pull chart from OCI registry
helm pull oci://registry.example.com/charts/myapp --version 1.2.3
# Push chart to OCI registry
helm push myapp-1.2.3.tgz oci://registry.example.com/charts
# Logout
helm registry logout registry.example.comShell Completion
# bash
helm completion bash | sudo tee /etc/bash_completion.d/helm
# zsh
helm completion zsh > "${fpath[1]}/_helm"
# fish
helm completion fish | sourcehelm — Release Management
Release Lifecycle
A Helm release transitions through the following states:
| State | Description |
|---|---|
pending-install | Release is being installed for the first time |
deployed | Release is successfully installed and running |
pending-upgrade | An upgrade operation is in progress |
pending-rollback | A rollback is in progress |
failed | Last operation failed |
superseded | Previous revision of a release (replaced by newer) |
uninstalling | Uninstall in progress |
# View current state
helm list -A
helm status my-release -n my-namespace
# View full history of revisions
helm history my-release -n my-namespace--atomic Flag (Auto-Rollback)
--atomic waits for deployment to complete and automatically rolls back on failure:
helm upgrade --install my-release bitnami/nginx \
-f values.yaml \
--atomic \
--timeout 5m \
-n my-namespaceBest practice: always use --atomic in CI/CD pipelines to prevent partial deployments.
--wait Flag and Readiness Gates
--wait waits until all pods, services, and deployments are ready before marking the release as successful:
helm upgrade --install my-release bitnami/nginx \
-f values.yaml \
--wait \
--timeout 10m \
-n my-namespace--wait-for-jobs additionally waits for any Jobs to complete:
helm upgrade --install my-release bitnami/nginx \
--wait --wait-for-jobs --timeout 10m \
-n my-namespaceUpgrade Strategies
# Standard upgrade
helm upgrade my-release bitnami/nginx -f values.yaml -n my-namespace
# Force upgrade (deletes and recreates resources that cannot be updated in place)
helm upgrade my-release bitnami/nginx -f values.yaml --force -n my-namespace
# Reset values to chart defaults, then apply overrides
helm upgrade my-release bitnami/nginx -f values.yaml --reset-values -n my-namespace
# Reuse previously deployed values, then apply overrides
helm upgrade my-release bitnami/nginx -f values.yaml --reuse-values -n my-namespacehelm diff Plugin
The helm diff plugin previews what will change before an upgrade:
# Install plugin
helm plugin install https://github.com/databus23/helm-diff
# Preview upgrade diff
helm diff upgrade my-release bitnami/nginx -f values.yaml -n my-namespace
# Compare against a specific revision
helm diff revision my-release 1 2 -n my-namespaceRollback
# View revision history
helm history my-release -n my-namespace
# Rollback to previous revision
helm rollback my-release -n my-namespace
# Rollback to specific revision number
helm rollback my-release 3 -n my-namespace
# Rollback with wait
helm rollback my-release --wait --timeout 5m -n my-namespaceNamespace and --create-namespace
# Install into existing namespace
helm upgrade --install my-release bitnami/nginx -n my-namespace
# Create namespace if it does not exist
helm upgrade --install my-release bitnami/nginx \
-n my-namespace \
--create-namespaceHelm Secrets Plugin Overview
The helm-secrets plugin integrates with SOPS or Vault for encrypted values:
# Install plugin
helm plugin install https://github.com/jkroepke/helm-secrets
# Encrypt values file with SOPS
helm secrets encrypt secrets.yaml > secrets.enc.yaml
# Install using encrypted values
helm secrets upgrade --install my-release bitnami/nginx \
-f values.yaml \
-f secrets.enc.yaml \
-n my-namespaceMulti-Environment Values Pattern
charts/myapp/
values.yaml — base defaults
values-dev.yaml — development overrides
values-staging.yaml — staging overrides
values-prod.yaml — production overridesApply per environment:
# Development
helm upgrade --install myapp ./charts/myapp -f values.yaml -f values-dev.yaml -n dev
# Production
helm upgrade --install myapp ./charts/myapp -f values.yaml -f values-prod.yaml -n production --atomicRelease Naming Conventions
- Use consistent, descriptive release names:
<app>-<env>e.g.nginx-prod - Keep release names unique within a namespace
- Avoid generic names like
testormyappin shared namespaces - Use
--generate-namefor ephemeral test installs:
helm install --generate-name bitnami/nginxUninstall and Cleanup
# Uninstall release (removes all managed Kubernetes resources)
helm uninstall my-release -n my-namespace
# Retain release history after uninstall (allows rollback)
helm uninstall my-release -n my-namespace --keep-history
# Confirm removal
helm list -A | grep my-release
kubectl get all -n my-namespace