| # Licensed to the Apache Software Foundation (ASF) under one | |
| # or more contributor license agreements. See the NOTICE file | |
| # distributed with this work for additional information | |
| # regarding copyright ownership. The ASF licenses this file | |
| # to you under the Apache License, Version 2.0 (the | |
| # "License"); you may not use this file except in compliance | |
| # with the License. You may obtain a copy of the License at | |
| # | |
| # http://www.apache.org/licenses/LICENSE-2.0 | |
| # | |
| # Unless required by applicable law or agreed to in writing, | |
| # software distributed under the License is distributed on an | |
| # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY | |
| # KIND, either express or implied. See the License for the | |
| # specific language governing permissions and limitations | |
| # under the License. | |
| # | |
| --- | |
| name: Helm tests | |
| on: # yamllint disable-line rule:truthy | |
| workflow_call: | |
| inputs: | |
| runners: | |
| description: "The array of labels (in json form) determining runners." | |
| required: true | |
| type: string | |
| platform: | |
| description: "Platform for the build - 'linux/amd64' or 'linux/arm64'" | |
| required: true | |
| type: string | |
| helm-test-packages: | |
| description: "Stringified JSON array of helm test packages to test" | |
| required: true | |
| type: string | |
| helm-test-kubernetes-versions: | |
| description: "Stringified JSON array of Kubernetes versions to validate against" | |
| required: true | |
| type: string | |
| default-python-version: | |
| description: "Which version of python should be used by default" | |
| required: true | |
| type: string | |
| use-uv: | |
| description: "Whether to use uvloop (true/false)" | |
| required: true | |
| type: string | |
| permissions: | |
| contents: read | |
| jobs: | |
| tests-helm: | |
| timeout-minutes: 80 | |
| name: >- | |
| Unit tests Helm: ${{ matrix.helm-test-package }} | |
| (K8S ${{ matrix.kubernetes-version }}) | |
| runs-on: ${{ fromJSON(inputs.runners) }} | |
| strategy: | |
| fail-fast: false | |
| max-parallel: 20 | |
| matrix: | |
| helm-test-package: ${{ fromJSON(inputs.helm-test-packages) }} | |
| kubernetes-version: ${{ fromJSON(inputs.helm-test-kubernetes-versions) }} | |
| env: | |
| # Always use default Python version of CI image for preparing packages | |
| PYTHON_MAJOR_MINOR_VERSION: "${{ inputs.default-python-version }}" | |
| PARALLEL_TEST_TYPES: "Helm" | |
| BACKEND: "none" | |
| DB_RESET: "false" | |
| JOB_ID: "helm-tests" | |
| USE_XDIST: "true" | |
| GITHUB_REPOSITORY: ${{ github.repository }} | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| GITHUB_USERNAME: ${{ github.actor }} | |
| VERBOSE: "true" | |
| steps: | |
| - name: "Cleanup repo" | |
| shell: bash | |
| run: sudo rm -rf ${GITHUB_WORKSPACE}/* | |
| - name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )" | |
| uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 | |
| with: | |
| persist-credentials: false | |
| - name: "Prepare breeze & CI image: ${{ inputs.default-python-version }}" | |
| uses: ./.github/actions/prepare_breeze_and_image | |
| with: | |
| platform: ${{ inputs.platform }} | |
| python: "${{ inputs.default-python-version }}" | |
| use-uv: ${{ inputs.use-uv }} | |
| make-mnt-writeable-and-cleanup: true | |
| - name: "Helm Unit Tests: ${{ matrix.helm-test-package }} (K8S ${{ matrix.kubernetes-version }})" | |
| env: | |
| HELM_TEST_PACKAGE: "${{ matrix.helm-test-package }}" | |
| HELM_TEST_KUBERNETES_VERSION: "${{ matrix.kubernetes-version }}" | |
| run: > | |
| breeze testing helm-tests | |
| --test-type "${HELM_TEST_PACKAGE}" | |
| --kubernetes-version "${HELM_TEST_KUBERNETES_VERSION}" | |
| tests-helm-release: | |
| timeout-minutes: 80 | |
| name: "Release Helm" | |
| runs-on: ${{ fromJSON(inputs.runners) }} | |
| env: | |
| PYTHON_MAJOR_MINOR_VERSION: "${{inputs.default-python-version}}" | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| steps: | |
| - name: "Cleanup repo" | |
| shell: bash | |
| run: sudo rm -rf ${GITHUB_WORKSPACE}/* | |
| - name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )" | |
| uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 | |
| with: | |
| persist-credentials: false | |
| - name: "Install Breeze" | |
| uses: ./.github/actions/breeze | |
| - name: Setup git for tagging | |
| run: | | |
| git config --global user.email "bot@airflow.apache.org" | |
| git config --global user.name "Your friendly bot" | |
| - name: "Remove old artifacts" | |
| run: rm -rf dist/* | |
| - name: "Setup k8s/helm environment" | |
| run: breeze k8s setup-env | |
| - name: "Install helm gpg plugin" | |
| run: > | |
| breeze k8s shell -c "helm plugin install https://github.com/technosophos/helm-gpg | |
| --version 6303407eb63deaeb1b2f24de611e3468a27ec05b" || true | |
| - name: "Helm release tarball" | |
| run: > | |
| breeze release-management prepare-helm-chart-tarball --ignore-version-check --override-tag | |
| --skip-tag-signing --version-suffix dev0 | |
| - name: Generate GPG key for signing | |
| # Sometimes the key will be already added to the keyring, so we ignore the error | |
| run: gpg --batch --passphrase '' --quick-gen-key dev@airflow.apache.org default default || true | |
| - name: "Helm release package" | |
| run: > | |
| breeze release-management prepare-helm-chart-package --sign-email dev@airflow.apache.org | |
| - name: "Verify packaged chart contents and lint" | |
| run: > | |
| uv run scripts/ci/verify_helm_chart_package.py dist/airflow-*.tgz | |
| - name: "Sign artifacts for ASF distribution" | |
| run: ./dev/sign.sh dist/airflow-*.tgz dist/airflow-*-source.tar.gz | |
| env: | |
| SIGN_WITH: dev@airflow.apache.org | |
| - name: "Fetch Git Tags" | |
| run: git fetch --tags | |
| - name: "Test helm chart issue generation" | |
| run: > | |
| breeze release-management generate-issue-content-helm-chart --limit-pr-count 2 | |
| --previous-release helm-chart/1.15.0 --current-release helm-chart/1.16.0 --verbose | |
| - name: "Upload Helm artifacts" | |
| uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 | |
| with: | |
| name: Helm artifacts | |
| path: ./dist/airflow-* | |
| retention-days: 7 | |
| if-no-files-found: error |