on:
  workflow_call:
    secrets:
      stripeTestPublicKey:
        required: true
      stripeTestSecretKey:
        required: true
    inputs:
      registry:
        default: ghcr.io
        type: string
      imageName:
        default: ${{ github.repository_owner }}
        type: string
      imageTag:
        required: true
        type: string
      configureEnv:
        default: ''
        type: string

jobs:
  integration:
    runs-on: ubuntu-22.04
    strategy:
      matrix:
        # Divide integration tests into 3 shards, to run them in parallel.
        shardIndex: [1, 2, 3]

    env:
      DOCKER_REGISTRY: ${{ inputs.registry }}/${{ inputs.imageName }}/
      DOCKER_TAG: :${{ inputs.imageTag }}

    steps:
      - name: checkout
        uses: actions/checkout@v4
        with:
          fetch-depth: 2

      - name: configure env vars
        if: ${{ inputs.configureEnv != '' }}
        run: ${{ inputs.configureEnv }}

      - name: setup environment
        uses: ./.github/actions/setup
        with:
          actor: test-integration
          cacheTurbo: true

      - name: prepare packages
        run: pnpm --filter integration-tests prepare:env

      - name: patch compose file volumes
        uses: mikefarah/yq@v4.44.3
        with:
          cmd: yq -i 'del(.services.*.volumes)' docker/docker-compose.community.yml

      - name: get cpu count for vitest
        id: cpu-cores
        uses: SimenB/github-actions-cpu-cores@v2

      - name: run containers
        timeout-minutes: 8
        run: |
          docker compose -f docker/docker-compose.community.yml -f ./integration-tests/docker-compose.integration.yaml --env-file ./integration-tests/.env up -d --wait

      - name: troubleshoot containers
        if: ${{ failure() }}
        run: |
          docker compose -f docker/docker-compose.community.yml -f ./integration-tests/docker-compose.integration.yaml --env-file ./integration-tests/.env ps

      - name: run integration tests
        timeout-minutes: 10
        env:
          HIVE_DEBUG: 1
        run: |
          VITEST_MAX_THREADS=${{ steps.cpu-cores.outputs.count }} pnpm --filter integration-tests test:integration --shard=${{ matrix.shardIndex }}/3

      - name: log dump
        if: ${{ failure() }}
        run: |
          docker compose -f docker/docker-compose.community.yml -f ./integration-tests/docker-compose.integration.yaml --env-file ./integration-tests/.env logs

      - name: inspect health
        if: ${{ failure() }}
        run: |
          docker inspect $(docker compose -f ./docker/docker-compose.community.yml -f ./integration-tests/docker-compose.integration.yaml --env-file ./integration-tests/.env ps -aq) | jq
