name: Conformance tests

on:
  pull_request:
    branches:
      - 'main'
      - 'release*'

concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: true

jobs:
  prepare-images:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@8f4b7f84864484a7bf31766abe9204da3cbe65b3 # v3.5.0
      - name: Setup build env
        uses: ./.github/actions/setup-build-env
        with:
          build-cache-key: build-images
      - name: ko build
        run: make docker-save-image-all
      - name: upload images archive
        uses: actions/upload-artifact@0b7f8abb1508181956e8e162db84b466c27e18ce # v3.1.2
        with:
          name: kyverno.tar
          path: kyverno.tar
          retention-days: 1
          if-no-files-found: error

  run-conformance:
    strategy:
      fail-fast: false
      matrix:
        k8s-version:
          - v1.24.7
          - v1.25.3
          - v1.26.0
        tests:
          - autogen
          - cleanup
          - events
          - exceptions
          - generate
          - mutate
          - policy-validation
          - rangeoperators
          - rbac
          - reports
          - validate
          - verify-manifests
          - verifyImages
          - webhooks
    runs-on: ubuntu-latest
    needs: prepare-images
    steps:
      - name: Checkout
        uses: actions/checkout@8f4b7f84864484a7bf31766abe9204da3cbe65b3 # v3.5.0
      - name: Setup build env
        uses: ./.github/actions/setup-build-env
        with:
          build-cache-key: run-conformance
      - name: Create kind cluster
        run: |
          export KIND_IMAGE=kindest/node:${{ matrix.k8s-version }}
          make kind-create-cluster
      - name: Download kyverno images archive
        uses: actions/download-artifact@9bc31d5ccc31df68ecc42ccf4149144866c47d8a # v3.0.2
        with:
          name: kyverno.tar
      - name: Load kyverno images archive in kind cluster
        run: make kind-load-image-archive
      - name: Install kyverno
        run: make kind-install-kyverno
      - name: Wait for kyverno ready
        uses: ./.github/actions/kyverno-wait-ready
      - name: Test with kuttl
        run: |
          ./.tools/kubectl-kuttl test ./test/conformance/kuttl/${{ matrix.tests }} \
            --config ./test/conformance/kuttl/_config/common.yaml
      - name: Debug failure
        if: failure()
        uses: ./.github/actions/kyverno-logs
