---
name: Reusable Tests Workflow
on:
  workflow_call:
    inputs:
      arch:
        required: true
        type: string
      runs-on:
        required: true
        type: string
      targets:
        required: false
        type: string

jobs:
  test:
    runs-on: ${{ inputs.runs-on }}
    # this is to prevent arm64 jobs from running at forked projects
    if: inputs.arch == 'amd64' || github.repository == 'etcd-io/etcd'
    strategy:
      fail-fast: false
      matrix:
        target: ${{ fromJSON(inputs.targets) }}
    steps:
      - uses: actions/checkout@v2
      - id: goversion
        run: echo "goversion=$(cat .go-version)" >> "$GITHUB_OUTPUT"
      - uses: actions/setup-go@v2
        with:
          go-version: ${{ steps.goversion.outputs.goversion }}
      - run: date
      - env:
          TARGET: ${{ matrix.target }}
        run: |
          set -euo pipefail

          echo "${TARGET}"
          case "${TARGET}" in
            linux-test-smoke)
              GOARCH=${{ inputs.arch }} CPU=4 RACE='false' make test-smoke
              ;;
            linux-integration-1-cpu)
              make install-gofail
              GOARCH=${{ inputs.arch }} CPU=1 RACE='false' FAILPOINTS='true' make test-integration
              ;;
            linux-integration-2-cpu)
              make install-gofail
              GOARCH=${{ inputs.arch }} CPU=2 RACE='false' FAILPOINTS='true' make test-integration
              ;;
            linux-integration-4-cpu)
              make install-gofail
              GOARCH=${{ inputs.arch }} CPU=4 RACE='false' FAILPOINTS='true' make test-integration
              ;;
            linux-unit-4-cpu-race)
              GOARCH=${{ inputs.arch }} RACE='true' CPU='4' GO_TEST_FLAGS='-p=2' make test-unit
              ;;
            linux-386-unit-1-cpu)
              GOOS=linux GOARCH=386 CPU=1 GO_TEST_FLAGS='-p=4' make test-unit
              ;;
            all-build)
              GOARCH=amd64 PASSES='build' ./test.sh
              GOARCH=386 PASSES='build' ./test.sh
              GO_BUILD_FLAGS='-v -mod=readonly' GOOS=darwin GOARCH=amd64 ./build.sh
              GO_BUILD_FLAGS='-v -mod=readonly' GOOS=darwin GOARCH=arm64 ./build.sh
              GO_BUILD_FLAGS='-v -mod=readonly' GOOS=windows GOARCH=amd64 ./build.sh
              GO_BUILD_FLAGS='-v -mod=readonly' GOARCH=arm ./build.sh
              GO_BUILD_FLAGS='-v -mod=readonly' GOARCH=arm64 ./build.sh
              GO_BUILD_FLAGS='-v -mod=readonly' GOARCH=ppc64le ./build.sh
              GO_BUILD_FLAGS='-v -mod=readonly' GOARCH=s390x ./build.sh
              ;;
            *)
              echo "Failed to find target"
              exit 1
              ;;
          esac
