name: Quarkus CI - Istio

on:
  workflow_dispatch:
  schedule:
    # 2am every weekday + saturday
    - cron: '0 2 * * 1-6'

env:
  MAVEN_ARGS: -B -e

jobs:
  cache:
    name: Build and save artifacts
    runs-on: ubuntu-latest
    if: "github.repository == 'quarkusio/quarkus' || github.event_name == 'workflow_dispatch'"
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-java@v4
        with:
          distribution: 'temurin'
          java-version: '17'
      - name: Install artifacts
        run: ./mvnw ${MAVEN_ARGS} -DskipTests -DskipITs -Dinvoker.skip clean install -pl :quarkus-integration-test-istio-invoker -am
      - name: Tar Maven repository
        shell: bash
        run: tar -I 'pigz -9' -cf maven-repo.tgz -C ~ .m2/repository
      - name: Persist Maven repository
        uses: actions/upload-artifact@v4
        with:
          name: maven-repo
          path: maven-repo.tgz
          retention-days: 1

  kubernetes:
    name: Istio + Kubernetes Integration Tests
    needs: cache
    runs-on: ubuntu-latest
    if: "github.repository == 'quarkusio/quarkus' || github.event_name == 'workflow_dispatch'"
    strategy:
      fail-fast: false
      matrix:
        kubernetes: [v1.20.1]
    steps:
      - name: Checkout
        uses: actions/checkout@v4
      - uses: actions/setup-java@v4
        with:
          distribution: 'temurin'
          java-version: '17'
      - name: Download Maven repository
        uses: actions/download-artifact@v4
        with:
          name: maven-repo
          path: .
      - name: Extract Maven repository
        shell: bash
        run: tar -xzf maven-repo.tgz -C ~
      - name: Set up Minikube-Kubernetes
        uses: manusa/actions-setup-minikube@v2.11.0
        with:
          minikube version: v1.16.0
          kubernetes version: ${{ matrix.kubernetes }}
          github token: ${{ secrets.GITHUB_TOKEN }}
          start args: '--embed-certs --addons=metrics-server --force'
      - name: Quay login
        uses: docker/login-action@v3
        with:
          registry: quay.io
          username: ${{ secrets.QUAY_QUARKUSCI_USERNAME }}
          password: ${{ secrets.QUAY_QUARKUSCI_PASSWORD }}
      - name: Get kubeconfig
        id: kubeconfig
        run: a="$(cat ~/.kube/config)"; a="${a//'%'/'%25'}"; a="${a//$'\n'/'%0A'}"; a="${a//$'\r'/'%0D'}"; echo "config=$a" >> $GITHUB_OUTPUT
      - name: Install Istio
        uses: huang195/actions-install-istio@v1.0.0
        with:
          kubeconfig: "${{steps.kubeconfig.outputs.config}}"
          istio version: '1.15.2'
      - name: Run Istio Invoker Tests
        run: |
          export QUARKUS_CONTAINER_IMAGE_GROUP=quarkustesting
          export QUARKUS_CONTAINER_IMAGE_TAG=${{ github.sha }}
          export QUARKUS_CONTAINER_IMAGE_REGISTRY=quay.io
          ./mvnw ${MAVEN_ARGS} clean install -pl :quarkus-integration-test-istio-invoker -De2e-tests -Dkubernetes-e2e-tests
      - name: Report status
        if: "always() && github.repository == 'quarkusio/quarkus'"
        shell: bash
        run: |
          curl -Ls https://sh.jbang.dev | bash -s - app setup
          ~/.jbang/bin/jbang .github/NativeBuildReport.java \
            issueNumber=29536 \
            runId=${{ github.run_id }} \
            status=${{ job.status }} \
            token=${{ secrets.GITHUB_API_TOKEN }} \
            issueRepo=${{ github.repository }} \
            thisRepo=${{ github.repository }}