diff --git a/helm/diff/README.md b/helm/diff/README.md index a44f731..89f104e 100644 --- a/helm/diff/README.md +++ b/helm/diff/README.md @@ -11,14 +11,16 @@ Diff a Helm chart for a deployment in a Kubernetes cluster | name | description | required | default | | --- | --- | --- | --- | -| `DEPLOYMENT_NAME` |
The Kubernetes Deployment to update
| `true` | `""` | -| `DEPLOYMENT_NAMESPACE` |The Kubernetes namespace of the Deployment
| `true` | `""` | -| `IMAGE_PATH` |The registry path to the image
| `true` | `""` | -| `IMAGE_TAG` |The image tag to deploy
| `true` | `""` | -| `CONTAINER_NAME` |The container component to update
| `true` | `""` | -| `VALUES_FILE` |The values file to use
| `false` | `./helm/values.yaml` | +| `DEPLOYMENT_NAME` |The Helm release name
| `true` | `""` | +| `DEPLOYMENT_NAMESPACE` |The Kubernetes namespace (defaults to DEPLOYMENT_NAME)
| `false` | `""` | +| `REGISTRY` |OCI registry hostname for helm dependency login
| `true` | `""` | +| `REGISTRY_USERNAME` |Username for OCI registry login
| `true` | `""` | +| `REGISTRY_TOKEN` |Token for OCI registry login
| `true` | `""` | | `CHART_PATH` |Path to the Helm chart
| `false` | `./helm` | -| `TAG_KEY` |Helm --set key for the image tag (e.g. deploy.api.tag)
| `true` | `""` | +| `VALUES_FILE` |The values file to use
| `false` | `./helm/values.yaml` | +| `IMAGE_PATH` |The registry path to the image (optional)
| `false` | `""` | +| `IMAGE_TAG` |The image tag to deploy (optional)
| `false` | `""` | +| `TAG_KEY` |Helm --set key for the image tag (e.g. deploy.api.tag)
| `false` | `""` | diff --git a/helm/diff/action.yml b/helm/diff/action.yml index d9b3c47..3021966 100644 --- a/helm/diff/action.yml +++ b/helm/diff/action.yml @@ -2,40 +2,79 @@ name: Helm Diff Deployment description: Diff a Helm chart for a deployment in a Kubernetes cluster inputs: DEPLOYMENT_NAME: - description: "The Kubernetes Deployment to update" + description: "The Helm release name" required: true DEPLOYMENT_NAMESPACE: - description: "The Kubernetes namespace of the Deployment" + description: "The Kubernetes namespace (defaults to DEPLOYMENT_NAME)" + default: "" + REGISTRY: + description: "OCI registry hostname for helm dependency login" required: true - IMAGE_PATH: - description: "The registry path to the image" + REGISTRY_USERNAME: + description: "Username for OCI registry login" required: true - IMAGE_TAG: - description: "The image tag to deploy" + REGISTRY_TOKEN: + description: "Token for OCI registry login" required: true - CONTAINER_NAME: - description: "The container component to update" - required: true - VALUES_FILE: - description: "The values file to use" - default: "./helm/values.yaml" CHART_PATH: description: "Path to the Helm chart" default: "./helm" + VALUES_FILE: + description: "The values file to use" + default: "./helm/values.yaml" + IMAGE_PATH: + description: "The registry path to the image (optional)" + default: "" + IMAGE_TAG: + description: "The image tag to deploy (optional)" + default: "" TAG_KEY: description: "Helm --set key for the image tag (e.g. deploy.api.tag)" - required: true + default: "" runs: using: composite steps: + - name: Helm OCI Login + shell: sh + env: + REGISTRY: ${{ inputs.REGISTRY }} + REGISTRY_USERNAME: ${{ inputs.REGISTRY_USERNAME }} + REGISTRY_TOKEN: ${{ inputs.REGISTRY_TOKEN }} + run: | + echo "$REGISTRY_TOKEN" | helm registry login "$REGISTRY" \ + --username "$REGISTRY_USERNAME" \ + --password-stdin + - name: Install Helm Diff shell: sh run: | helm plugin list | grep -q diff || helm plugin install https://github.com/databus23/helm-diff + - name: Helm Diff shell: sh + env: + DEPLOYMENT_NAME: ${{ inputs.DEPLOYMENT_NAME }} + DEPLOYMENT_NAMESPACE: ${{ inputs.DEPLOYMENT_NAMESPACE }} + CHART_PATH: ${{ inputs.CHART_PATH }} + VALUES_FILE: ${{ inputs.VALUES_FILE }} + IMAGE_PATH: ${{ inputs.IMAGE_PATH }} + IMAGE_TAG: ${{ inputs.IMAGE_TAG }} + TAG_KEY: ${{ inputs.TAG_KEY }} run: | - CMD="helm diff upgrade ${{ inputs.DEPLOYMENT_NAME }} ${{ inputs.CHART_PATH }} -n ${{ inputs.DEPLOYMENT_NAMESPACE }} --values ${{ inputs.VALUES_FILE }} --set ${TAG_KEY}=${{ inputs.IMAGE_TAG }} --set image.repository=${{ inputs.IMAGE_PATH }} --context 5" - echo "Running: $CMD" - eval "$CMD" \ No newline at end of file + NAMESPACE="$DEPLOYMENT_NAMESPACE" + if [ -z "$NAMESPACE" ]; then NAMESPACE="$DEPLOYMENT_NAME"; fi + SET_FLAGS="" + if [ -n "$TAG_KEY" ] && [ -n "$IMAGE_TAG" ]; then + SET_FLAGS="$SET_FLAGS --set $TAG_KEY=$IMAGE_TAG" + fi + if [ -n "$IMAGE_PATH" ]; then + SET_FLAGS="$SET_FLAGS --set image.repository=$IMAGE_PATH" + fi + helm dependency update "$CHART_PATH" + helm diff upgrade "$DEPLOYMENT_NAME" "$CHART_PATH" -n "$NAMESPACE" --values "$VALUES_FILE" $SET_FLAGS --context 5 + + - name: Remove kubeconfig + if: always() + shell: sh + run: rm -f ~/.kube/config diff --git a/helm/template/README.md b/helm/template/README.md index 00591c5..0fdcfd6 100644 --- a/helm/template/README.md +++ b/helm/template/README.md @@ -11,14 +11,16 @@ Template a Helm chart for a deployment in a Kubernetes cluster | name | description | required | default | | --- | --- | --- | --- | -| `DEPLOYMENT_NAME` |The Kubernetes Deployment to update
| `true` | `""` | -| `DEPLOYMENT_NAMESPACE` |The Kubernetes namespace of the Deployment
| `true` | `""` | -| `IMAGE_PATH` |The registry path to the image
| `true` | `""` | -| `IMAGE_TAG` |The image tag to deploy
| `true` | `""` | -| `CONTAINER_NAME` |The container component to update
| `true` | `""` | -| `VALUES_FILE` |The values file to use
| `false` | `./helm/values.yaml` | +| `DEPLOYMENT_NAME` |The Helm release name
| `true` | `""` | +| `DEPLOYMENT_NAMESPACE` |The Kubernetes namespace (defaults to DEPLOYMENT_NAME)
| `false` | `""` | +| `REGISTRY` |OCI registry hostname for helm dependency login
| `true` | `""` | +| `REGISTRY_USERNAME` |Username for OCI registry login
| `true` | `""` | +| `REGISTRY_TOKEN` |Token for OCI registry login
| `true` | `""` | | `CHART_PATH` |Path to the Helm chart
| `false` | `./helm` | -| `TAG_KEY` |Helm --set key for the image tag (e.g. deploy.api.tag)
| `true` | `""` | +| `VALUES_FILE` |The values file to use
| `false` | `./helm/values.yaml` | +| `IMAGE_PATH` |The registry path to the image (optional)
| `false` | `""` | +| `IMAGE_TAG` |The image tag to deploy (optional)
| `false` | `""` | +| `TAG_KEY` |Helm --set key for the image tag (e.g. deploy.api.tag)
| `false` | `""` | diff --git a/helm/template/action.yml b/helm/template/action.yml index da968fd..4800d7f 100644 --- a/helm/template/action.yml +++ b/helm/template/action.yml @@ -2,36 +2,74 @@ name: Helm Template Deployment description: Template a Helm chart for a deployment in a Kubernetes cluster inputs: DEPLOYMENT_NAME: - description: "The Kubernetes Deployment to update" + description: "The Helm release name" required: true DEPLOYMENT_NAMESPACE: - description: "The Kubernetes namespace of the Deployment" + description: "The Kubernetes namespace (defaults to DEPLOYMENT_NAME)" + default: "" + REGISTRY: + description: "OCI registry hostname for helm dependency login" required: true - IMAGE_PATH: - description: "The registry path to the image" + REGISTRY_USERNAME: + description: "Username for OCI registry login" required: true - IMAGE_TAG: - description: "The image tag to deploy" + REGISTRY_TOKEN: + description: "Token for OCI registry login" required: true - CONTAINER_NAME: - description: "The container component to update" - required: true - VALUES_FILE: - description: "The values file to use" - default: "./helm/values.yaml" CHART_PATH: description: "Path to the Helm chart" default: "./helm" + VALUES_FILE: + description: "The values file to use" + default: "./helm/values.yaml" + IMAGE_PATH: + description: "The registry path to the image (optional)" + default: "" + IMAGE_TAG: + description: "The image tag to deploy (optional)" + default: "" TAG_KEY: description: "Helm --set key for the image tag (e.g. deploy.api.tag)" - required: true + default: "" runs: using: composite steps: + - name: Helm OCI Login + shell: sh + env: + REGISTRY: ${{ inputs.REGISTRY }} + REGISTRY_USERNAME: ${{ inputs.REGISTRY_USERNAME }} + REGISTRY_TOKEN: ${{ inputs.REGISTRY_TOKEN }} + run: | + echo "$REGISTRY_TOKEN" | helm registry login "$REGISTRY" \ + --username "$REGISTRY_USERNAME" \ + --password-stdin + - name: Helm Template shell: sh + env: + DEPLOYMENT_NAME: ${{ inputs.DEPLOYMENT_NAME }} + DEPLOYMENT_NAMESPACE: ${{ inputs.DEPLOYMENT_NAMESPACE }} + CHART_PATH: ${{ inputs.CHART_PATH }} + VALUES_FILE: ${{ inputs.VALUES_FILE }} + IMAGE_PATH: ${{ inputs.IMAGE_PATH }} + IMAGE_TAG: ${{ inputs.IMAGE_TAG }} + TAG_KEY: ${{ inputs.TAG_KEY }} run: | - CMD="helm template ${{ inputs.DEPLOYMENT_NAME }} ${{ inputs.CHART_PATH }} -n ${{ inputs.DEPLOYMENT_NAMESPACE }} --values ${{ inputs.VALUES_FILE }} --set ${TAG_KEY}=${{ inputs.IMAGE_TAG }} --set image.repository=${{ inputs.IMAGE_PATH }}" - echo "Running: $CMD" - eval "$CMD" \ No newline at end of file + NAMESPACE="$DEPLOYMENT_NAMESPACE" + if [ -z "$NAMESPACE" ]; then NAMESPACE="$DEPLOYMENT_NAME"; fi + SET_FLAGS="" + if [ -n "$TAG_KEY" ] && [ -n "$IMAGE_TAG" ]; then + SET_FLAGS="$SET_FLAGS --set $TAG_KEY=$IMAGE_TAG" + fi + if [ -n "$IMAGE_PATH" ]; then + SET_FLAGS="$SET_FLAGS --set image.repository=$IMAGE_PATH" + fi + helm dependency update "$CHART_PATH" + helm template "$DEPLOYMENT_NAME" "$CHART_PATH" -n "$NAMESPACE" --values "$VALUES_FILE" $SET_FLAGS + + - name: Remove kubeconfig + if: always() + shell: sh + run: rm -f ~/.kube/config diff --git a/helm/upgrade/action.yml b/helm/upgrade/action.yml index e416500..8a8f2ba 100644 --- a/helm/upgrade/action.yml +++ b/helm/upgrade/action.yml @@ -67,7 +67,6 @@ runs: SET_FLAGS="$SET_FLAGS --set image.repository=$IMAGE_PATH" fi helm dependency update "$CHART_PATH" - echo "Running: helm upgrade $DEPLOYMENT_NAME $CHART_PATH -n $NAMESPACE --values $VALUES_FILE$SET_FLAGS" helm upgrade "$DEPLOYMENT_NAME" "$CHART_PATH" -n "$NAMESPACE" --values "$VALUES_FILE" $SET_FLAGS - name: Remove kubeconfig