Skip to content

Helm charts ⚓

This repository hosts a set of personal Helm Charts available through:

TIP

See charts details here.

Chart list

ChartApplicationDescriptionArtifactHub
backup-utils-Easy backup tools deployment.link
cnpg-clusterCNPGEasy CNPG cluster deployment.link
dashyDashyA self-hostable personal dashboard.link
homarrHomarrA self-hostable personal dashboard.link
vso-utilsVSOEasy VSO objects deployment.link

Usage

Traditional Helm Repository

sh
# Add repository
helm repo add tobi https://this-is-tobi.github.io/helm-charts
helm repo update

# Search and install
helm search repo tobi
helm install <release_name> tobi/<chart_name>

OCI Registry

sh
# Install directly from OCI registry
helm install <release_name> oci://ghcr.io/this-is-tobi/helm-charts/<chart_name> --version <version>

# Example
helm install my-db oci://ghcr.io/this-is-tobi/helm-charts/cnpg-cluster --version 1.5.0

TIP

OCI installation doesn't require helm repo add and provides better performance and security.

Chart Signatures

All charts are signed using GPG for authenticity and integrity verification.

GPG Key Information:

Verifying Traditional Helm Charts (.tgz):

sh
# Import the public key
curl -s https://raw.githubusercontent.com/this-is-tobi/helm-charts/main/ci/configs/helm-charts-signing-key.asc | gpg --import

# Verify a chart
helm verify <chart-name>-<version>.tgz

# Or during installation
helm install --verify <release-name> <chart-name>

Verifying OCI Images:

OCI artifacts are signed using Cosign with keyless signing (OIDC).

sh
# Install cosign (if not already installed)
# macOS: brew install cosign
# Linux: https://docs.sigstore.dev/cosign/installation/

# Verify OCI chart signature
cosign verify \
  --certificate-identity-regexp="https://github.com/this-is-tobi/helm-charts" \
  --certificate-oidc-issuer="https://token.actions.githubusercontent.com" \
  ghcr.io/this-is-tobi/helm-charts/<chart-name>:<version>

Helm Dependencies

You can use these charts as dependencies in your own Helm charts.

Using Traditional Helm Repository:

yaml
# Chart.yaml
dependencies:
  - name: <chart_name>
    version: "<version>"
    repository: "https://this-is-tobi.github.io/helm-charts"

Using OCI Registry (Recommended):

yaml
# Chart.yaml
dependencies:
  - name: <chart_name>
    version: "<version>"
    repository: "oci://ghcr.io/this-is-tobi/helm-charts"

Then update dependencies:

sh
helm dependency update

ArgoCD

Using Helm Repository:

yaml
sources:
- repoURL: https://this-is-tobi.github.io/helm-charts
  chart: <chart_name>
  targetRevision: <version>
  helm:
    releaseName: <release_name>
    values: ""

Using OCI Registry:

yaml
sources:
- repoURL: ghcr.io/this-is-tobi/helm-charts
  chart: <chart_name>
  targetRevision: <version>
  helm:
    releaseName: <release_name>
    values: ""

Dependencies updates

A script is available to help upgrade charts dependencies:

sh
./ci/scripts/update-charts-dependencies.sh

Template

A template folder is available for easy integration of new chart, to use it follow the steps bellow:

  1. Copy the template directory:

    sh
    # Copy the template chart
    cp -R ./template ./charts/<chart_name>
    
    # Rename the chart
    sed -i "s/chartname/<chart_name>/g" ./charts/<chart_name>/Chart.yaml
  2. Update the service name:

    sh
    # Rename the templates directory
    mv ./charts/<chart_name>/templates/servicename ./charts/<chart_name>/templates/<service_name>
    
    # Update service name in template files
    find ./charts/<chart_name>/templates/<service_name> -type f -exec sed -i "s/servicename/<service_name>/g" ./charts/<chart_name>/values.yaml {} \;
    
    # Update service name in values file
    yq eval ".<service_name> = .servicename | del(.servicename)" -i ./charts/<chart_name>/values.yaml
    sed -i "s/servicename/<service_name>/g" ./charts/<chart_name>/values.yaml
  3. Optionally add another service:

    sh
    # Clone additional service
    cp -R ./template/templates/servicename ./charts/<chart_name>/templates/<other_service_name>
    
    # Update service name in template files
    find ./charts/<chart_name>/templates/<other_service_name> -type f -exec sed -i "s/servicename/<other_service_name>/g" ./charts/<chart_name>/values.yaml {} \;
    
    # Update service name in values file
    yq eval ".<other_service_name> = load(\"./template/values.yaml\").servicename" -i ./charts/<chart_name>/values.yaml
    sed -i "s/servicename/<other_service_name>/g" ./charts/<chart_name>/values.yaml
  4. Update chart name:

    sh
    # Update chart name in values
    sed -i "s/chartname/<chart_name>/g" ./charts/<chart_name>/values.yaml

Do not forget to change <chart_name>, <service_name> and <other_service_name> placeholders.

TIP

A shell script is also available to generate a new Helm chart:

sh
curl -s https://raw.githubusercontent.com/this-is-tobi/tools/main/shell/helm-template.sh \                      
    | bash -s -- -c '<chart_name>' -s '<service_name>' -a '<additional_service_name>'

Notes:

  • -c flags set the chart name (ex: my-app).

  • -s flags set the service name (ex: api).

  • -a (optional) flags set the additional service name (ex: front).

Contributions

  • Each PR is associated with a pipeline that checks the lint + helm-docs.
  • When a merge is performed on the main branch, the release pipeline publishes the new version of the chart(s) affected and updates the Helm Repo (gh-pages branch).

TIP

The version in the Chart.yaml file must be modified before the merge to main, otherwise the release pipeline will error on version duplication.

Sources

Take a look at the project sources.