From 17d62f1246130ae8c811916c98d44ab65c526ae0 Mon Sep 17 00:00:00 2001 From: kfox1111 Date: Tue, 25 Apr 2023 01:04:38 -0700 Subject: [PATCH] Add an action to find new versions of helm charts (#184) Co-authored-by: Marco Franssen --- .github/tests/charts.json | 17 +++++++ .github/tests/charts.sh | 6 +++ .github/tests/prometheus/pre-install.sh | 2 +- .../tests/spire-oidc-insecure/pre-install.sh | 2 +- .../pre-install.sh | 2 +- .github/workflows/check-versions.yaml | 49 +++++++++++++++++++ .github/workflows/helm-chart-ci.yaml | 2 + .github/workflows/scripts/update-versions.sh | 24 +++++++++ 8 files changed, 101 insertions(+), 3 deletions(-) create mode 100644 .github/tests/charts.json create mode 100644 .github/tests/charts.sh create mode 100644 .github/workflows/check-versions.yaml create mode 100755 .github/workflows/scripts/update-versions.sh diff --git a/.github/tests/charts.json b/.github/tests/charts.json new file mode 100644 index 0000000..b9341a3 --- /dev/null +++ b/.github/tests/charts.json @@ -0,0 +1,17 @@ +[ + { + "name": "kube-prometheus-stack", + "repo": "https://prometheus-community.github.io/helm-charts", + "version": "45.10.1" + }, + { + "name": "cert-manager", + "repo": "https://charts.jetstack.io", + "version": "v1.11.1" + }, + { + "name": "ingress-nginx", + "repo": "https://kubernetes.github.io/ingress-nginx", + "version": "4.6.0" + } +] diff --git a/.github/tests/charts.sh b/.github/tests/charts.sh new file mode 100644 index 0000000..d83af09 --- /dev/null +++ b/.github/tests/charts.sh @@ -0,0 +1,6 @@ +#!/usr/bin/env bash + +REPOS=$(jq -r '.[] | "export " + ("HELM_REPO_" + .name | ascii_upcase | gsub("-";"_")) + "=" + .repo' .github/tests/charts.json) +VERSIONS=$(jq -r '.[] | "export " + ("VERSION_" + .name | ascii_upcase | gsub("-";"_")) + "=" + .version' .github/tests/charts.json) +eval "$REPOS" +eval "$VERSIONS" diff --git a/.github/tests/prometheus/pre-install.sh b/.github/tests/prometheus/pre-install.sh index 5959a16..de23418 100755 --- a/.github/tests/prometheus/pre-install.sh +++ b/.github/tests/prometheus/pre-install.sh @@ -1,3 +1,3 @@ #!/usr/bin/env bash -helm install kube-prometheus-stack kube-prometheus-stack --version 45.7.1 --repo https://prometheus-community.github.io/helm-charts -n "$scenario" --wait +helm install kube-prometheus-stack kube-prometheus-stack --version $VERSION_KUBE_PROMETHEUS_STACK --repo $HELM_REPO_KUBE_PROMETHEUS_STACK -n "$scenario" --wait diff --git a/.github/tests/spire-oidc-insecure/pre-install.sh b/.github/tests/spire-oidc-insecure/pre-install.sh index 939b1d8..6d39ad2 100755 --- a/.github/tests/spire-oidc-insecure/pre-install.sh +++ b/.github/tests/spire-oidc-insecure/pre-install.sh @@ -1,4 +1,4 @@ #!/usr/bin/env bash -helm install ingress-nginx ingress-nginx --version 4.5.2 --repo https://kubernetes.github.io/ingress-nginx -n "$scenario" --set controller.extraArgs.enable-ssl-passthrough= +helm install ingress-nginx ingress-nginx --version "$VERSION_INGRESS_NGINX" --repo "$HELM_REPO_INGRESS_NGINX" -n "$scenario" --set controller.extraArgs.enable-ssl-passthrough= kubectl wait --namespace ingress-nginx --for=condition=ready pod --selector=app.kubernetes.io/component=controller -n "$scenario" diff --git a/.github/tests/upstream-authority-cert-manager/pre-install.sh b/.github/tests/upstream-authority-cert-manager/pre-install.sh index 8b5733f..9cf3ea5 100755 --- a/.github/tests/upstream-authority-cert-manager/pre-install.sh +++ b/.github/tests/upstream-authority-cert-manager/pre-install.sh @@ -1,5 +1,5 @@ #!/usr/bin/env bash -helm install cert-manager cert-manager --namespace cert-manager --create-namespace --version v1.11.0 --set installCRDs=true --repo https://charts.jetstack.io --wait +helm install cert-manager cert-manager --namespace cert-manager --create-namespace --version "$VERSION_CERT_MANAGER" --set installCRDs=true --repo "$HELM_REPO_CERT_MANAGER" --wait SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) kubectl apply -f $SCRIPT_DIR/cert-manager-ca.yaml -n "$scenario" diff --git a/.github/workflows/check-versions.yaml b/.github/workflows/check-versions.yaml new file mode 100644 index 0000000..85cd437 --- /dev/null +++ b/.github/workflows/check-versions.yaml @@ -0,0 +1,49 @@ +name: Check versions + +on: + schedule: + - cron: '0 8 * * 1' + + # Allows you to run this workflow manually from the Actions tab + workflow_dispatch: + +env: + HELM_VERSION: v3.11.1 + +jobs: + check-helm-chart-versions: + runs-on: ubuntu-22.04 + + permissions: + contents: write + pull-requests: write + + steps: + - name: Checkout + uses: actions/checkout@v3.5.0 + + - name: Set up Helm + uses: azure/setup-helm@v3.5 + with: + version: ${{ env.HELM_VERSION }} + + - name: Update test chart versions + run: | + ./.github/workflows/scripts/update-versions.sh + git diff + + - name: Create Pull Request + id: cpr + uses: peter-evans/create-pull-request@v5.0.0 + with: + title: Bump test chart dependencies + branch: bump-test-chart-deps + commit-message: Bump test chart dependencies + body: Bump the Helm charts used in test scenarios to latest available versions. + signoff: true + add-paths: | + .github/tests + + - name: Check outputs + if: ${{ steps.cpr.outputs.pull-request-number }} + run: 'echo "::notice title=PR #${{ steps.cpr.outputs.pull-request-number }}::${{ steps.cpr.outputs.pull-request-url }}"' diff --git a/.github/workflows/helm-chart-ci.yaml b/.github/workflows/helm-chart-ci.yaml index cffb15c..4ac7bb0 100644 --- a/.github/workflows/helm-chart-ci.yaml +++ b/.github/workflows/helm-chart-ci.yaml @@ -199,6 +199,8 @@ jobs: export scenario="$(basename "${TEST_DIR}")" export EXTRA_HELM_ARGS="" + source .github/tests/charts.sh + [ "${scenario}" != "default" ] && kubectl create namespace "${scenario}" [ -x "${TEST_DIR}/pre-install.sh" ] && "${TEST_DIR}/pre-install.sh" [ -f "${TEST_DIR}/.env" ] && source "${TEST_DIR}/.env" diff --git a/.github/workflows/scripts/update-versions.sh b/.github/workflows/scripts/update-versions.sh new file mode 100755 index 0000000..46b438e --- /dev/null +++ b/.github/workflows/scripts/update-versions.sh @@ -0,0 +1,24 @@ +#!/usr/bin/env bash + +SCRIPT=$(readlink -f "$0") +SCRIPTPATH=$(dirname "$SCRIPT") + +CHARTJSON=$SCRIPTPATH/../../tests/charts.json + +jq -r ".[].name" "${CHARTJSON}" | while read -r CHART; do + ENTRYQUERY='.[] | select(.name == "'$CHART'")' + REPO_URL="$(jq -r "$ENTRYQUERY | .repo" "${CHARTJSON}")" + VERSION="$(jq -r "$ENTRYQUERY | .version" "${CHARTJSON}")" + echo Processing: ${CHART} + echo " repo: $REPO_URL" + echo " current version: $VERSION" + helm repo add "$CHART" "$REPO_URL" > /dev/null + helm repo update "$CHART" > /dev/null + LATEST_VERSION=$(helm search repo --regexp "$CHART/$CHART\v" -o json | jq -r '.[0].version') + echo " latest version: $LATEST_VERSION" + if [ "x$VERSION" != "x$LATEST_VERSION" ]; then + echo " New version found!" + jq "( $ENTRYQUERY ).version |= "'"${LATEST_VERSION}"' "${CHARTJSON}" > /tmp/$$ + mv /tmp/$$ "${CHARTJSON}" + fi +done