# This GitHub action runs your tests for each commit push and/or PR. Optionally
# you can turn it on using a cron schedule for regular testing.
#
name: Tests
on:
  pull_request:
    paths-ignore:
      - "README.md"
  push:
    paths-ignore:
      - "README.md"
  # For systems with an upstream API that could drift unexpectedly (like most SaaS systems, etc.),
  # we recommend testing at a regular interval not necessarily tied to code changes. This will
  # ensure you are alerted to something breaking due to an API change, even if the code did not
  # change.
  # schedule:
  #   - cron: '0 13 * * *'
jobs:
  # ensure the code builds...
  build:
    name: Build
    runs-on: ubuntu-latest
    timeout-minutes: 5
    steps:
      - name: Set up Go
        uses: actions/setup-go@v4
        with:
          go-version: "1.20"
        id: go

      - name: Check out code into the Go module directory
        uses: actions/checkout@v3

      - name: Get dependencies
        run: |
          go mod download

      - name: Build
        run: |
          go build -v .

  generate:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - uses: actions/setup-go@v4
        with:
          go-version-file: "go.mod"
          cache: true
      - run: go generate ./...
      - name: git diff
        run: |
          git diff --compact-summary --exit-code || \
            (echo; echo "Unexpected difference in directories after code generation. Run 'go generate ./...' command and commit."; exit 1)

  # run acceptance tests in a matrix with Terraform core versions
  test:
    name: Matrix Test
    needs: build
    runs-on: ubuntu-latest
    timeout-minutes: 15
    strategy:
      fail-fast: false
      matrix:
        # list whatever Terraform versions here you would like to support
        terraform:
          - "0.12.*"
          - "0.13.*"
          - "0.14.*"
          - "0.15.*"
          - "1.0.*"
          - "1.1.*"
    steps:
      - name: Set up Go
        uses: actions/setup-go@v4
        with:
          go-version: "1.20"
        id: go

      - uses: hashicorp/setup-terraform@v2
        with:
          terraform_version: ${{ matrix.terraform }}
          terraform_wrapper: false

      - name: Check out code into the Go module directory
        uses: actions/checkout@v3

      - name: Get dependencies
        run: |
          go mod download

      - name: TF acceptance tests
        timeout-minutes: 10
        env:
          TF_ACC: "1"

          # Set whatever additional acceptance test env vars here. You can
          # optionally use data from your repository secrets using the
          # following syntax:
          # SOME_VAR: ${{ secrets.SOME_VAR }}

        run: |
          go test -v -cover ./internal/provider/
