Skip to content

♻️ Lifecycle

Lifecycle defines scripts that are triggered by helmwave.

Flow hooks for helmwave up --build

flowchart LR subgraph build global_pre_build --> pre_build subgraph release context pre_build --> post_build end post_build --> global_post_build end global_post_build --> global_pre_up subgraph up global_pre_up --> pre_up subgraph release context pre_up --> post_up end post_up --> global_post_up end
helmwave.yml
# Global hooks
lifecycle:
  pre_build:
    - cmd: "ls"
      args: ["-l", "-a"]
      show: false
    - cmd: bash
      args:
        - -c
        - echo "global ${HELMWAVE_LIFECYCLE_TYPE}"
  post_build:
    - echo "global post_build"
  pre_up:
    - echo "global pre_up"
  post_up:
    - echo "global post_up"
  pre_down:
    - echo "global pre_down"
  post_down:
    - echo "global post_down"
  pre_rollback:
    - echo "global pre_rollback"
  post_rollback:
    - echo "global post_rollback"

registries:
  - host: registry-1.docker.io

.options: &options
  namespace: my-namespace
  create_namespace: true
  offline_kube_version: 1.22.0
  wait: true
  timeout: 1m
  max_history: 3 # best practice
  chart:
    # For example, we will use bitnami/nats chart, because it's small and fast
    name: oci://registry-1.docker.io/bitnamicharts/nats
    version: 7.8.3 # best practice

releases:
  - name: nats
    <<: *options
    # Special hooks for nats release
    lifecycle:
      pre_up:
        - echo "pre_up for nats"
      post_up:
        - echo "post_up for nats"
      pre_build:
        - cmd: bash
          args:
            - -c
            - echo "${HELMWAVE_LIFECYCLE_TYPE} for ${HELMWAVE_LIFECYCLE_RELEASE_UNIQNAME}"
      post_build:
        - echo "post_build for nats"
      pre_down:
        - echo "pre_down for nats"
      post_down:
        - echo "post_down for nats"
      pre_rollback:
        - echo "pre_rollback for nats"
      post_rollback:
        - echo "post_rollback for nats"
$ helmwave build --diff-mode none
[🙃 aka INFO]: 🩼 Running pre-build hooks...
[🙃 aka INFO]: 🩼 running hook...
    cmd: bash
    args:
      - -c
      - echo "global ${HELMWAVE_LIFECYCLE_TYPE}"
[🙃 aka INFO]: global pre-build
[🙃 aka INFO]: 🔨 Building releases...
[🙃 aka INFO]: 🔨 Building graphs...
[🙃 aka INFO]: show graph:
┌────────────────┐
│ nats@my-nam... │
└────────────────┘

[🙃 aka INFO]: 🔨 Building values...
[🙃 aka INFO]: 🔨 no values provided
    release: nats@my-namespace
[🙃 aka INFO]: 🔨 Building repositories...
[🙃 aka INFO]: 🔨 Building registries...
[🙃 aka INFO]: 🗄 registry has been added to the plan
    registry: registry-1.docker.io
[🙃 aka INFO]: 🔨 Building charts...
[🙃 aka INFO]: Pulled: registry-1.docker.io/bitnamicharts/nats:7.8.3
[🙃 aka INFO]: Digest: sha256:5f80350b8a85177e4a9c7ed968f77c47bedcc461418172fb66594bc61fa1ffac
[🙃 aka INFO]: 🔨 Building manifests...
[🙃 aka INFO]:  skipping updating dependencies for remote chart
    release: nats@my-namespace
[🙃 aka INFO]: 🩼 Running pre-build hooks...
[🙃 aka INFO]: 🩼 running hook...
    args:
      - -c
      - echo "${HELMWAVE_LIFECYCLE_TYPE} for ${HELMWAVE_LIFECYCLE_RELEASE_UNIQNAME}"
    cmd: bash
[🙃 aka INFO]: pre-build for nats@my-namespace
[🙃 aka INFO]: Pulled: registry-1.docker.io/bitnamicharts/nats:7.8.3
[🙃 aka INFO]: Digest: sha256:5f80350b8a85177e4a9c7ed968f77c47bedcc461418172fb66594bc61fa1ffac
[🙃 aka INFO]: 🩼 Running post-build hooks...
[🙃 aka INFO]: 🩼 running hook...
    cmd: echo
    args:
      - "post_build
      - for
      - nats"
[🙃 aka INFO]: "post_build for nats"
[🙃 aka INFO]:   manifest done
    release: nats@my-namespace
[🙃 aka INFO]: 🩼 Running post-build hooks...
[🙃 aka INFO]: 🩼 running hook...
    cmd: echo
    args:
      - "global
      - post_build"
[🙃 aka INFO]: "global post_build"
[🙃 aka INFO]: 🏗 Plan
    releases:
      - nats@my-namespace
    repositories:
      -
    registries:
      - registry-1.docker.io
[🙃 aka INFO]: 🆚 Diff manifests in the kubernetes cluster
[🙈 aka WARNING]: I can't get release from k8s: failed to get release nats@my-namespace: release: not found
[🙃 aka INFO]: 🏗 Planfile is ready!