72 lines
1.9 KiB
YAML
72 lines
1.9 KiB
YAML
name: "update helm release"
|
|
description: "deploy helm release with new image"
|
|
|
|
inputs:
|
|
release_name:
|
|
required: true
|
|
|
|
image_paths:
|
|
required: false
|
|
default: "image.tag" # NOTE space separated
|
|
|
|
namespace:
|
|
required: false
|
|
default: ""
|
|
|
|
image_tag:
|
|
required: false
|
|
default: ""
|
|
|
|
repository_location:
|
|
required: false
|
|
default: "europe-docker.pkg.dev/puzzle-and-play/helm"
|
|
|
|
timeout:
|
|
required: false
|
|
default: "5m"
|
|
|
|
runs:
|
|
using: composite
|
|
steps:
|
|
- shell: bash
|
|
env:
|
|
RELEASE_NAME: "${{ inputs.release_name }}"
|
|
NAMESPACE: "${{ inputs.namespace }}"
|
|
REPOSITORY_LOCATION: "${{ inputs.repository_location }}"
|
|
HELM_CHARTS_DIR: "$HOME/.cache/helm/charts"
|
|
IMAGE_PATHS: "${{ inputs.image_paths }}"
|
|
IMAGE_TAG: "${{ inputs.image_tag }}"
|
|
HELM_UPGRADE_TIMEOUT: "${{ inputs.timeout }}"
|
|
|
|
run: |
|
|
: ${NAMESPACE:="$RELEASE_NAME"}
|
|
: ${IMAGE_TAG:="${{ github.ref_name }}-${{ github.run_number }}"}
|
|
|
|
metadata=$(helm get metadata $RELEASE_NAME -n $NAMESPACE -o json)
|
|
chart_name=$(echo $metadata | jq ".chart" -r)
|
|
chart_version=$(echo $metadata | jq ".version" -r)
|
|
|
|
HELM_CHARTS_DIR=$(echo "$HELM_CHARTS_DIR" | envsubst)
|
|
mkdir -p "$HELM_CHARTS_DIR"
|
|
helm pull \
|
|
"oci://$REPOSITORY_LOCATION/$chart_name" \
|
|
--version "$chart_version" \
|
|
-d "$HELM_CHARTS_DIR"
|
|
|
|
chart_filename="${HELM_CHARTS_DIR}/${chart_name}-${chart_version}.tgz"
|
|
|
|
value_overrides=$(\
|
|
echo "\"$IMAGE_PATHS\"" \
|
|
| jq -r '. | split(" ") | map(. + "=$IMAGE_TAG") | join(",")' \
|
|
| envsubst \
|
|
)
|
|
|
|
helm upgrade \
|
|
"$RELEASE_NAME" \
|
|
"$chart_filename" \
|
|
--version "$chart_version" \
|
|
--namespace "$NAMESPACE" \
|
|
--reuse-values \
|
|
--set "$value_overrides" \
|
|
--timeout "$HELM_UPGRADE_TIMEOUT"
|