name: Integration test

on:
  pull_request:
  push:

jobs:
  integration-test:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        k8s_version: [v1.25.3, v1.24.7, v1.23.13]
    steps:
      - name: Checkout
        uses: actions/checkout@v2

      - name: Create kind cluster
        uses: helm/kind-action@v1.1.0
        with:
          version: v0.17.0
          node_image: kindest/node:${{ matrix.k8s_version }}
          cluster_name: kind-cluster-${{ matrix.k8s_version }}
          config: test/integration/kind-cluster.yaml

      - name: Install Nginx ingress controller
        run: |
          kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.9.0/deploy/static/provider/kind/deploy.yaml
          kubectl wait --namespace ingress-nginx --for=condition=ready pod --selector=app.kubernetes.io/component=controller --timeout=120s

      - name: Set up Go 1.19
        uses: actions/setup-go@v2
        with:
          go-version: "1.19"

      - name: Cache go mod
        uses: actions/cache@v2
        with:
          path: ~/go/pkg/mod
          key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }}
          restore-keys: |
            ${{ runner.os }}-go-

      - name: Set /etc/hosts
        run: |
         sudo -- sh -c "echo '127.0.0.1 harbor.local' >> /etc/hosts"

      - name: Run integration tests
        working-directory: ./test
        run:
          go test -v -timeout 30m github.com/goharbor/harbor-helm/integration

      - name: fetch harbor logs
        if: failure()
        run: |
          df -h
          free -m
          mkdir -p /tmp/harbor
          for name in core jobservice registry registryctl trivy portal redis database; do \
            kubectl -n default logs -l "component=$name" --all-containers > /tmp/harbor/$name.log ; \
          done

      - uses: actions/upload-artifact@v2
        if: failure()
        with:
          name: harbor_${{ matrix.k8s_version }}_${{ runner.os }}
          path: /tmp/harbor

      - name: fetch logs
        if: failure()
        run: |
          mkdir -p /tmp/logs
          kind export logs --name kind-cluster-${{ matrix.k8s_version }} /tmp/logs

      - uses: actions/upload-artifact@v2
        if: failure()
        with:
          name: kind_v${{ matrix.k8s_version }}
          path: /tmp/logs
