This repository has been archived on 2024-04-08. You can view files and clone it, but cannot push or open issues or pull requests.
dagger/stdlib/kubernetes/helm/helm.cue

144 lines
3.1 KiB
CUE
Raw Normal View History

// Helm package manager
package helm
import (
"strconv"
"alpha.dagger.io/dagger"
"alpha.dagger.io/dagger/op"
"alpha.dagger.io/kubernetes"
)
// Install a Helm chart
#Chart: {
// Helm deployment name
name: dagger.#Input & {string}
// Helm chart to install from source
chartSource: *null | dagger.#Artifact
// Helm chart to install from repository
chart: dagger.#Input & {*null | string}
// Helm chart repository
repository: dagger.#Input & {*null | string}
// Helm values (either a YAML string or a Cue structure)
values: dagger.#Input & {*null | string}
// Kubernetes Namespace to deploy to
namespace: dagger.#Input & {string}
// Helm action to apply
action: dagger.#Input & {*"installOrUpgrade" | "install" | "upgrade"}
// time to wait for any individual Kubernetes operation (like Jobs for hooks)
timeout: dagger.#Input & {string | *"5m"}
// if set, will wait until all Pods, PVCs, Services, and minimum number of
// Pods of a Deployment, StatefulSet, or ReplicaSet are in a ready state
// before marking the release as successful.
// It will wait for as long as timeout
wait: dagger.#Input & {*true | bool}
// if set, installation process purges chart on fail.
// The wait option will be set automatically if atomic is used
atomic: dagger.#Input & {*true | bool}
// Kube config file
kubeconfig: dagger.#Input & {string | dagger.#Secret}
// Helm version
version: dagger.#Input & {*"3.5.2" | string}
// Kubectl version
kubectlVersion: dagger.#Input & {*"v1.19.9" | string}
#up: [
op.#Load & {
from: kubernetes.#Kubectl & {
version: kubectlVersion
}
},
op.#Exec & {
env: HELM_VERSION: version
args: [
"/bin/bash",
"--noprofile",
"--norc",
"-eo",
"pipefail",
"-c",
#"""
# Install Yarn
curl -sfL -S https://get.helm.sh/helm-v${HELM_VERSION}-linux-amd64.tar.gz | \
tar -zx -C /tmp && \
mv /tmp/linux-amd64/helm /usr/local/bin && \
chmod +x /usr/local/bin/helm
"""#,
]
},
op.#Mkdir & {
path: "/helm"
},
op.#WriteFile & {
dest: "/entrypoint.sh"
content: #code
},
if (kubeconfig & string) != _|_ {
op.#WriteFile & {
dest: "/kubeconfig"
content: kubeconfig
mode: 0o600
}
},
if chart != null {
op.#WriteFile & {
dest: "/helm/chart"
content: chart
}
},
if values != null {
op.#WriteFile & {
dest: "/helm/values.yaml"
content: values
}
},
op.#Exec & {
always: true
args: [
"/bin/bash",
"--noprofile",
"--norc",
"-eo",
"pipefail",
"/entrypoint.sh",
]
env: {
KUBECONFIG: "/kubeconfig"
KUBE_NAMESPACE: namespace
if repository != null {
HELM_REPO: repository
}
HELM_NAME: name
HELM_ACTION: action
HELM_TIMEOUT: timeout
HELM_WAIT: strconv.FormatBool(wait)
HELM_ATOMIC: strconv.FormatBool(atomic)
}
mount: {
if chartSource != null && chart == null {
"/helm/chart": from: chartSource
}
if (kubeconfig & dagger.#Secret) != _|_ {
"/kubeconfig": secret: kubeconfig
}
}
},
]
}