Apps per namespace¶
If you want to install each application in your own namespace.
Create the project¶
Project structure
├── README.md
├── helmwave.yml.tpl
├── values
│   ├── harbor.yml
│   ├── minio.yml
│   ├── plantuml.yml
│   └── renovate.yml
└── vars.yaml
Step 1. Create helmwave.yml.tpl
helmwave.yml.tpl
project: "Example: apps per own namespace"
version: "0.30.0"
repositories:
  - name: bitnami
    url: https://charts.bitnami.com/bitnami
  - name: renovate
    url: https://docs.renovatebot.com/helm-charts
  - name: stevehipwell
    url: https://stevehipwell.github.io/helm-charts
# General options
.options: &options
  wait: true
  wait_for_jobs: true
  force: false
  timeout: 10m
  atomic: false
  max_history: 3
  create_namespace: true
releases:
{{- with readFile "vars.yaml" | fromYaml | get "releases" }}
{{ range $v := . }}
#################################
#                               #
#      {{ $v | get "name" }}
#                               #
#################################
- name: {{ $v | get "name" }}
  chart:
    name: {{ $v | get "repo" }}/{{ $v | get "name" }}
    version: {{ $v | get "version" }}
  namespace: {{ $v | get "name" }}
  tags: [{{ $v | get "name" }}]
  values:
    - values/{{ $v | get "name" }}.yml
  <<: *options
{{ end }}
{{- end }}
Step 2. Create vars.yaml
We will manage list apps with additional vars.yaml file
vars.yaml
releases:
  - name: harbor
    repo: bitnami
    version: 11.0.5
  - name: minio
    repo: bitnami
    version: 9.0.2
  - name: plantuml
    repo: stevehipwell
    version: 3.3.0
  - name: renovate
    repo: renovate
    version: 25.76.1
Step 3. Render helmwave.yml.tpl ->  helmwave.yml
helmwave yml
You will get it
helmwave.yml
project: "Example: apps per own namespace"
version: "0.30.0"
repositories:
  - name: bitnami
    url: https://charts.bitnami.com/bitnami
  - name: renovate
    url: https://docs.renovatebot.com/helm-charts
  - name: stevehipwell
    url: https://stevehipwell.github.io/helm-charts
# General options
.options: &options
  wait: true
  wait_for_jobs: true
  force: false
  timeout: 10m
  atomic: false
  max_history: 3
  create_namespace: true
releases:
#################################
#                               #
#      harbor
#                               #
#################################
- name: harbor
  chart:
    name: bitnami/harbor
    version: 11.0.5
  namespace: harbor
  tags: [harbor]
  values:
    - values/harbor.yml
  <<: *options
#################################
#                               #
#      minio
#                               #
#################################
- name: minio
  chart:
    name: bitnami/minio
    version: 9.0.2
  namespace: minio
  tags: [minio]
  values:
    - values/minio.yml
  <<: *options
#################################
#                               #
#      plantuml
#                               #
#################################
- name: plantuml
  chart:
    name: stevehipwell/plantuml
    version: 3.3.0
  namespace: plantuml
  tags: [plantuml]
  values:
    - values/plantuml.yml
  <<: *options
#################################
#                               #
#      renovate
#                               #
#################################
- name: renovate
  chart:
    name: renovate/renovate
    version: 25.76.1
  namespace: renovate
  tags: [renovate]
  values:
    - values/renovate.yml
  <<: *options
Step 4. Build plan
helmwave build
Step 5. Deploy plan
if we want to deploy only plantuml
helmwave build -t plantuml
helmwave up
Check out how to use HELMWAVE_TAGS
CI/CD with Gitlab-CI¶
.gitlab-ci.yml
variables:
  HELMWAVE_LOG_LEVEL: debug
deploy to prod:
  stage: deploy
  when: manual
  environment:
    name: prod
  image:
    name: ghcr.io/helmwave/helmwave:0.30.0
    entrypoint: [""]
  before_script:
  - printenv | grep HELMWAVE
  script:
  - helmwave yml
  - helmwave build
  - helmwave up
  artifacts:
    paths:
    - .helmwave
    expire_in: 2 week
if you want to deploy only plantuml via CI.

