.claude/skills/helm-charts/SKILL.md
Expert guidance for creating Helm charts with best practices. Use this skill when the user asks to create, modify, or review Helm charts, Kubernetes deployments, values.yaml files, or chart templates. Trigger keywords include "helm", "kubernetes chart", "k8s deployment", "helm template", "values.yaml".
npx skillsauth add aehrc/pathling helm-chartsInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
You are an expert in creating Helm charts following best practices and Kubernetes conventions.
pathling, sql-on-fhir).{{ .Release.Name }} concatenated with descriptive suffixes.
{{ .Release.Name }}-deployment, {{ .Release.Name }}-service, {{ .Release.Name }}-pvc.deployment.yaml, service.yaml, pvc.yaml.pvc.yaml not persistentvolumeclaim.yaml.imagePullPolicy, resourceLimits).resources, deployment, config.~) to explicitly indicate null or unset optional values.[]) as defaults for lists.{}) as defaults for maps.image key).resources: {} by default (unset), with commented examples showing how to configure.secretConfig or service account support unless the application specifically requires it.enabled: false.Example structure for a simple application chart:
sqlOnFhir:
image: "sql-on-fhir-server:latest"
imagePullPolicy: "Always"
replicas: 1
resources: {}
# requests:
# memory: "512Mi"
# cpu: "250m"
# limits:
# memory: "1Gi"
# cpu: "500m"
config: {}
persistence:
enabled: false
size: "1Gi"
{{ .Values.pathling.image | quote }}.toJson pattern without conditionals.
volumes: {{ toJson .Values.pathling.volumes }}[]), null values (~), and populated arrays.toJson handles all these cases correctly without needing length checks or indent filters.toJson for array/object fields.
{{- if gt (len .Values.pathling.volumes) 0 }} followed by {{ toJson .Values.pathling.volumes | indent 8 }}.toJson pattern is cleaner, more reliable, and easier to maintain.{{- if gt (len .Values.pathling.config) 0 }} when you want to completely omit the env: section if empty.{{- range $configKey, $configValue := .Values.pathling.config }}.--- on its own line.secretConfig is defined.{{- and -}} to control whitespace appropriately.Example of simple toJson pattern for complex types:
# These fields work perfectly with toJson and require no conditionals
volumes: { { toJson .Values.pathling.volumes } }
tolerations: { { toJson .Values.pathling.tolerations } }
affinity: { { toJson .Values.pathling.affinity } }
Example conditional block (for environment variables where you want to omit the entire section when empty):
{{- if gt (len .Values.pathling.config) 0 }}
env:
{{- range $configKey, $configValue := .Values.pathling.config }}
- name: {{ $configKey }}
value: {{ $configValue | quote }}
{{- end }}
{{- end }}
deployment.yaml, service.yaml, configmap.yaml.service.yaml.templates/ directory for all Kubernetes resource templates.templates/_helpers.tpl.Chart.yaml, values.yaml, README.md.README.md in every chart with the following sections:
pathling.resources.limits.memory).values.yaml).yaml, bash, etc.).values.yaml minimal; let the README provide detailed documentation.Example configuration table format:
| Parameter | Description | Default |
| ---------------------------------- | ---------------------------- | -------------------------- |
| pathling.image | Container image to use | pathling/pathling:latest |
| pathling.replicas | Number of replicas to deploy | 1 |
| pathling.resources.limits.memory | Memory limit for containers | 4Gi |
config for non-sensitive environment variables.secretConfig for sensitive values that should be stored in Kubernetes secrets.config, name the secret variant secretConfig, not secrets or secretEnv.Example configuration pattern:
pathling:
# Non-sensitive configuration
config:
PATHLING_TERMINOLOGY_SERVER_URL: "https://tx.fhir.org/r4"
PATHLING_SPARK_MASTER: "local[*]"
# Sensitive configuration
secretConfig:
PATHLING_AUTH_TOKEN: "secret-token-value"
startupProbe for slow-starting applications.livenessProbe to detect and restart unhealthy containers.readinessProbe to control when containers receive traffic.Always).tolerations for node taints.affinity rules for pod placement.nodeSelector for basic node selection.ClusterIP for internal services (default).NodePort for external access in development.LoadBalancer for production external access.Recreate deployment strategy for stateful applications; use RollingUpdate for stateless applications.terminationGracePeriodSeconds for graceful shutdown.Example health probe configuration:
startupProbe:
httpGet:
path: /healthcheck
port: http
initialDelaySeconds: 30
periodSeconds: 10
failureThreshold: 30
livenessProbe:
httpGet:
path: /healthcheck
port: http
periodSeconds: 30
failureThreshold: 3
readinessProbe:
httpGet:
path: /healthcheck
port: http
periodSeconds: 10
failureThreshold: 3
helm template to inspect rendered templates during development.helm lint to validate chart structure and templates before committing.docker-desktop cluster.major.minor.patch).appVersion in Chart.yaml to match the application version being deployed.tools
Expert guidance for using WireMock in Java applications for HTTP API mocking and testing. Use this skill when the user asks to mock HTTP APIs, create API stubs, test REST clients, simulate network faults, verify HTTP requests, or integrate WireMock with Spring Boot. Trigger keywords include "wiremock", "mock http", "stub api", "http mock", "api testing", "rest mock", "simulate fault", "verify request", "spring boot wiremock".
documentation
Expert guidance for implementing SQL on FHIR v2 ViewDefinitions and operations to create portable, tabular projections of FHIR data. Use this skill when the user asks to create ViewDefinitions, flatten FHIR resources into tables, write FHIRPath expressions for data extraction, implement forEach/forEachOrNull/repeat patterns for unnesting, create where clauses for filtering, use constants in view definitions, combine data with unionAll, execute ViewDefinitions with $run or $export operations, or implement SQL on FHIR server capabilities. Trigger keywords include "ViewDefinition", "SQL on FHIR", "flatten FHIR", "tabular FHIR", "FHIR to SQL", "FHIR analytics", "FHIRPath columns", "unnest FHIR", "$viewdefinition-run", "$export", "view runner", "repeat", "recursive", "QuestionnaireResponse".
development
Expert guidance for working with the Apache Spark Catalyst query optimisation framework. Use this skill when working with Spark SQL internals, creating custom expressions, implementing query optimisations, working with logical/physical plans, or extending Catalyst. Trigger keywords include "catalyst", "spark sql", "expression", "logical plan", "physical plan", "tree node", "query optimisation", "rule executor", "analyzer", "optimizer", "code generation".
development
Expert guidance for using the SonarCloud API to interact with code quality analysis, projects, issues, quality gates, and metrics. Use this skill when making API calls to SonarCloud, automating code quality workflows, retrieving analysis results, managing projects programmatically, or integrating SonarCloud with CI/CD pipelines. Trigger keywords include "SonarCloud", "SonarCloud API", "code quality API", "SonarQube Cloud", "quality gate", "code analysis API", "SonarCloud measures", "SonarCloud issues".