name: "Charts: Test" on: workflow_call: inputs: checkoutCommit: required: true type: string chartsToTest: description: > A JSON encoded array of charts to lint type: string required: true overrideDeps: description: > A JSON encoded array of dependencies to override before testing type: string required: false default: '[]' env: HELM_VERSION: 3.9.2 jobs: install-chart: name: Install chart runs-on: ubuntu-22.04 if: ${{ inputs.chartsToTest != '[]' && inputs.chartsToTest != '' }} strategy: matrix: chart: ${{ fromJSON(inputs.chartsToTest) }} k8s_version: ["v1.22.15", "v1.23.13", "v1.24.7", "v1.25.3"] fail-fast: false steps: - name: Checkout uses: actions/checkout@v3 with: fetch-depth: 0 ref: ${{ inputs.checkoutCommit }} - name: Install Kubernetes tools uses: yokawasa/action-setup-kube-tools@v0.9.2 with: setup-tools: | helmv3 kubectl helm: "${{ env.HELM_VERSION }}" kubectl: "${{ matrix.k8s_version }}" - uses: actions/setup-python@v4 with: python-version: "3.10" - name: Set up chart-testing uses: helm/chart-testing-action@v2.3.1 - name: Create k3d cluster uses: nolar/setup-k3d-k3s@v1 with: version: ${{ matrix.k8s_version }} - name: Remove node taints run: | kubectl taint --all=true nodes node.cloudprovider.kubernetes.io/uninitialized- || true - name: Override chart dependencies uses: ./.github/actions/override-chart-deps if: ${{ inputs.overrideDeps != '[]' }} with: chart: ${{ matrix.chart }} overrides: ${{ inputs.overrideDeps }} - name: Run chart-testing (install) run: ct install --config .ci/ct/ct.yaml --charts "charts/${{ matrix.chart }}" # Summarize matrix https://github.community/t/status-check-for-a-matrix-jobs/127354/7 install_success: needs: - install-chart if: | always() name: Install successful runs-on: ubuntu-22.04 steps: - name: Check install matrix status if: ${{ (inputs.chartsToTest != '[]' && inputs.chartsToTest != '') && needs.install-chart.result != 'success' }} run: exit 1 unittest-chart: name: Unit-test chart runs-on: ubuntu-20.04 if: ${{ inputs.chartsToTest != '[]' && inputs.chartsToTest != '' }} strategy: matrix: chart: ${{ fromJSON(inputs.chartsToTest) }} fail-fast: false steps: - name: Checkout uses: actions/checkout@v3 with: fetch-depth: 0 ref: ${{ inputs.checkoutCommit }} - name: Install Kubernetes tools uses: yokawasa/action-setup-kube-tools@v0.9.2 with: setup-tools: | helmv3 helm: "${{ env.HELM_VERSION }}" - name: Override chart dependencies uses: ./.github/actions/override-chart-deps if: ${{ inputs.overrideDeps != '[]' }} with: chart: ${{ matrix.chart }} overrides: ${{ inputs.overrideDeps }} - name: Run tests run: | helm plugin install https://github.com/vbehar/helm3-unittest --version v1.0.16 helm dep update "charts/${{ matrix.chart }}" helm unittest -f "tests/**/*_test.yaml" "charts/${{ matrix.chart }}" # Summarize matrix https://github.community/t/status-check-for-a-matrix-jobs/127354/7 unittest_success: needs: - unittest-chart if: | always() name: Unittest successful runs-on: ubuntu-22.04 steps: - name: Check unittest matrix status if: ${{ (inputs.chartsToTest != '[]' && inputs.chartsToTest != '') && needs.unittest-chart.result != 'success' }} run: exit 1