From 16c6be374ac50a5ef2faa6a755d2fad76a94c9fd Mon Sep 17 00:00:00 2001 From: Carlos Tadeu Panato Junior Date: Sun, 28 Apr 2024 12:10:39 +0200 Subject: [PATCH] update ct to v3.11.0 / yamlint to 1.33.0 / yamale to 4.0.4 / add e2e test (#144) * update ct to v3.11.0 / yamlint to 1.33.0 / yamale to 4.0.4 Signed-off-by: cpanato * add e2e test Signed-off-by: cpanato --------- Signed-off-by: cpanato --- .github/workflows/test-action.yml | 54 +++++++++++++++++-- README.md | 18 +++---- action.yml | 6 +-- ct.sh | 6 +-- testdata/simple-deployment/Chart.yaml | 8 +++ testdata/simple-deployment/README.md | 4 ++ .../simple-deployment/templates/_helpers.tpl | 32 +++++++++++ .../templates/deployment.yaml | 29 ++++++++++ testdata/simple-deployment/values.yaml | 11 ++++ 9 files changed, 149 insertions(+), 19 deletions(-) create mode 100644 testdata/simple-deployment/Chart.yaml create mode 100644 testdata/simple-deployment/README.md create mode 100644 testdata/simple-deployment/templates/_helpers.tpl create mode 100644 testdata/simple-deployment/templates/deployment.yaml create mode 100644 testdata/simple-deployment/values.yaml diff --git a/.github/workflows/test-action.yml b/.github/workflows/test-action.yml index dbb9cb3..15a79ee 100644 --- a/.github/workflows/test-action.yml +++ b/.github/workflows/test-action.yml @@ -9,7 +9,7 @@ jobs: name: Install chart-testing and test presence in path steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@0ad4b8fadaa221de15dcec353f45205ec38ea70b # v4.1.4 - name: Install chart-testing uses: ./ - name: Check install! @@ -17,8 +17,8 @@ jobs: ct version CT_VERSION_OUTPUT=$(ct version 2>&1 /dev/null) ACTUAL_VERSION=$(echo "$CT_VERSION_OUTPUT" | grep Version | rev | cut -d ' ' -f1 | rev) - if [[ $ACTUAL_VERSION != 'v3.10.1' ]]; then - echo 'should be v3.10.1' + if [[ $ACTUAL_VERSION != 'v3.11.0' ]]; then + echo 'should be v3.11.0' exit 1 else exit 0 @@ -38,7 +38,7 @@ jobs: name: Install Custom chart-testing and test presence in path steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@0ad4b8fadaa221de15dcec353f45205ec38ea70b # v4.1.4 - name: Install chart-testing uses: ./ with: @@ -65,3 +65,49 @@ jobs: else exit 0 fi + + test_ct_action_with_helm: + runs-on: ubuntu-latest + + name: run action to test a helm chart + steps: + - uses: actions/checkout@0ad4b8fadaa221de15dcec353f45205ec38ea70b # v4.1.4 + with: + fetch-depth: 0 + + - name: Set up Helm + uses: azure/setup-helm@fe7b79cd5ee1e45176fcad797de68ecaf3ca4814 # v4.2.0 + with: + version: v3.14.4 + + - uses: actions/setup-python@82c7e631bb3cdc910f68e0081d67478d79c6982d # v5.1.0 + with: + python-version: '3.x' + check-latest: true + + - name: Install chart-testing + uses: ./ + + - run: | + sed -i "s/version: .*/version: 2.0.0/" testdata/simple-deployment/Chart.yaml + cat testdata/simple-deployment/Chart.yaml + + - name: Run chart-testing (list-changed) + id: list-changed + run: | + changed=$(ct list-changed --chart-dirs=testdata --target-branch ${{ github.event.repository.default_branch }}) + if [[ -n "$changed" ]]; then + echo "changed=true" >> "$GITHUB_OUTPUT" + fi + + - name: Run chart-testing (lint) + if: steps.list-changed.outputs.changed == 'true' + run: ct lint --chart-dirs=testdata --target-branch ${{ github.event.repository.default_branch }} + + - name: Create kind cluster + if: steps.list-changed.outputs.changed == 'true' + uses: helm/kind-action@v1.10.0 + + - name: Run chart-testing (install) + if: steps.list-changed.outputs.changed == 'true' + run: ct install --chart-dirs=testdata --target-branch ${{ github.event.repository.default_branch }} diff --git a/README.md b/README.md index 60c27ad..c9f8b80 100644 --- a/README.md +++ b/README.md @@ -15,9 +15,9 @@ A GitHub Action for installing the [helm/chart-testing](https://github.com/helm/ For more information on inputs, see the [API Documentation](https://developer.github.com/v3/repos/releases/#input) -- `version`: The chart-testing version to install (default: `3.10.1`) -- `yamllint_version`: The `yamllint` version to install (default: `1.27.1`) -- `yamale_version`: The `yamale` version to install (default: `3.0.4`) +- `version`: The chart-testing version to install (default: `3.11.0`) +- `yamllint_version`: The `yamllint` version to install (default: `1.33.0`) +- `yamale_version`: The `yamale` version to install (default: `4.0.4`) ### Example Workflow @@ -42,17 +42,17 @@ jobs: fetch-depth: 0 - name: Set up Helm - uses: azure/setup-helm@v3 + uses: azure/setup-helm@v4.2.0 with: - version: v3.14.0 + version: v3.14.4 - - uses: actions/setup-python@v4 + - uses: actions/setup-python@v5 with: - python-version: '3.12' + python-version: '3.x' check-latest: true - name: Set up chart-testing - uses: helm/chart-testing-action@v2.6.1 + uses: helm/chart-testing-action@v2.7.0 - name: Run chart-testing (list-changed) id: list-changed @@ -68,7 +68,7 @@ jobs: - name: Create kind cluster if: steps.list-changed.outputs.changed == 'true' - uses: helm/kind-action@v1.8.0 + uses: helm/kind-action@v1.10.0 - name: Run chart-testing (install) if: steps.list-changed.outputs.changed == 'true' diff --git a/action.yml b/action.yml index a7efee4..315f15a 100644 --- a/action.yml +++ b/action.yml @@ -8,15 +8,15 @@ inputs: version: description: "The chart-testing version to install (default: 3.10.1)" required: false - default: '3.10.1' + default: '3.11.0' yamllint_version: description: "The yamllint version to install (default: 1.27.1)" required: false - default: '1.27.1' + default: '1.33.0' yamale_version: description: "The yamale version to install (default: 3.0.4)" required: false - default: '3.0.4' + default: '4.0.4' runs: using: composite steps: diff --git a/ct.sh b/ct.sh index 4394de4..5e0f87d 100755 --- a/ct.sh +++ b/ct.sh @@ -4,9 +4,9 @@ set -o errexit set -o nounset set -o pipefail -DEFAULT_CHART_TESTING_VERSION=3.10.1 -DEFAULT_YAMLLINT_VERSION=1.27.1 -DEFAULT_YAMALE_VERSION=3.0.4 +DEFAULT_CHART_TESTING_VERSION=3.11.0 +DEFAULT_YAMLLINT_VERSION=1.33.0 +DEFAULT_YAMALE_VERSION=4.0.4 show_help() { cat << EOF diff --git a/testdata/simple-deployment/Chart.yaml b/testdata/simple-deployment/Chart.yaml new file mode 100644 index 0000000..8ac9244 --- /dev/null +++ b/testdata/simple-deployment/Chart.yaml @@ -0,0 +1,8 @@ +apiVersion: v1 +appVersion: "1.0" +description: A Helm chart for Kubernetes +name: nginx +version: 0.1.0 +maintainers: + - name: cpanato + - name: davidkarlsen diff --git a/testdata/simple-deployment/README.md b/testdata/simple-deployment/README.md new file mode 100644 index 0000000..280f67f --- /dev/null +++ b/testdata/simple-deployment/README.md @@ -0,0 +1,4 @@ +Simple chart with a Deployment. + +The integration test will install first simple-deployment and then try to upgrade +to simple-deployment-different-selector failing as expected diff --git a/testdata/simple-deployment/templates/_helpers.tpl b/testdata/simple-deployment/templates/_helpers.tpl new file mode 100644 index 0000000..165d01e --- /dev/null +++ b/testdata/simple-deployment/templates/_helpers.tpl @@ -0,0 +1,32 @@ +{{/* vim: set filetype=mustache: */}} +{{/* +Expand the name of the chart. +*/}} +{{- define "nginx.name" -}} +{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}} +{{- end -}} + +{{/* +Create a default fully qualified app name. +We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec). +If release name contains chart name it will be used as a full name. +*/}} +{{- define "nginx.fullname" -}} +{{- if .Values.fullnameOverride -}} +{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}} +{{- else -}} +{{- $name := default .Chart.Name .Values.nameOverride -}} +{{- if contains $name .Release.Name -}} +{{- .Release.Name | trunc 63 | trimSuffix "-" -}} +{{- else -}} +{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}} +{{- end -}} +{{- end -}} +{{- end -}} + +{{/* +Create chart name and version as used by the chart label. +*/}} +{{- define "nginx.chart" -}} +{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}} +{{- end -}} diff --git a/testdata/simple-deployment/templates/deployment.yaml b/testdata/simple-deployment/templates/deployment.yaml new file mode 100644 index 0000000..ac64e0d --- /dev/null +++ b/testdata/simple-deployment/templates/deployment.yaml @@ -0,0 +1,29 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: {{ include "nginx.fullname" . }} + labels: + app.kubernetes.io/name: {{ include "nginx.name" . }} + helm.sh/chart: {{ include "nginx.chart" . }} + app.kubernetes.io/instance: {{ .Release.Name }} + app.kubernetes.io/managed-by: {{ .Release.Service }} +spec: + replicas: 1 + selector: + matchLabels: + app.kubernetes.io/name: {{ include "nginx.name" . }} + app.kubernetes.io/instance: {{ .Release.Name }} + template: + metadata: + labels: + app.kubernetes.io/name: {{ include "nginx.name" . }} + app.kubernetes.io/instance: {{ .Release.Name }} + spec: + containers: + - name: {{ .Chart.Name }} + image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}" + imagePullPolicy: {{ .Values.image.pullPolicy }} + ports: + - name: http + containerPort: 80 + protocol: TCP diff --git a/testdata/simple-deployment/values.yaml b/testdata/simple-deployment/values.yaml new file mode 100644 index 0000000..cefd3a0 --- /dev/null +++ b/testdata/simple-deployment/values.yaml @@ -0,0 +1,11 @@ +# Default values for nginx. +# This is a YAML-formatted file. +# Declare variables to be passed into your templates. + +image: + repository: nginx + tag: stable + pullPolicy: IfNotPresent + +nameOverride: "" +fullnameOverride: ""