# This action is centrally managed in https://github.com/asyncapi/.github/
# Don't make changes to this file in this repo as they will be overwritten with changes made to the same file in above mentioned repo

# It does magic only if there is go.mod file in the root of the project
name: PR testing - if Go project

on:
  pull_request:
    types: [opened, reopened, synchronize, ready_for_review]
    
jobs:
  lint-go-pr:
    name: Lint Go PR
    runs-on: ubuntu-latest
    steps:
      - if: "github.event.pull_request.draft == false &&!((github.actor == 'asyncapi-bot' && startsWith(github.event.pull_request.title, 'ci: update global workflows')) || (github.actor == 'asyncapi-bot' && startsWith(github.event.pull_request.title, 'chore(release):')) || (github.actor == 'allcontributors' && startsWith(github.event.pull_request.title, 'docs: add')))"
        id: should_run
        name: Should Run
        run: echo "::set-output name=shouldrun::true"
      - if: steps.should_run.outputs.shouldrun == 'true' 
        name: Checkout repository
        uses: actions/checkout@v2
      - if: steps.should_run.outputs.shouldrun == 'true' 
        name: Check if Go project and has go.mod
        id: gomod
        run: test -e ./go.mod && echo "::set-output name=exists::true" || echo "::set-output name=exists::false"
        shell: bash
      - if: steps.gomod.outputs.exists == 'true'
        name: Setup Go
        uses: actions/setup-go@v2.1.3
        with:
          go-version: 1.16
      - if: steps.gomod.outputs.exists == 'true'
        name: golangci-lint
        uses: golangci/golangci-lint-action@v2 # golangci-lint version extracted from go.mod. `latest` if missing.
        with:
          skip-go-installation: true # we wanna control the version of Go in use
  
  test-go-pr:
    name: Test Go PR - ${{ matrix.os }}
    runs-on: ${{ matrix.os }}
    strategy:
      matrix:
        os: [ubuntu-latest, macos-latest, windows-latest]
    steps:
      - if: "github.event.pull_request.draft == false &&!((github.actor == 'asyncapi-bot' && startsWith(github.event.pull_request.title, 'ci: update global workflows')) || (github.actor == 'asyncapi-bot' && startsWith(github.event.pull_request.title, 'chore(release):')) || (github.actor == 'allcontributors' && startsWith(github.event.pull_request.title, 'docs: add')))"
        id: should_run
        name: Should Run
        run: echo "::set-output name=shouldrun::true"
      - if: steps.should_run.outputs.shouldrun == 'true' 
        name: Checkout repository
        uses: actions/checkout@v2
      - if: steps.should_run.outputs.shouldrun == 'true' 
        name: Check if Go project and has go.mod
        id: gomod
        run: test -e ./go.mod && echo "::set-output name=exists::true" || echo "::set-output name=exists::false"
        shell: bash
      - if: steps.gomod.outputs.exists == 'true'
        name: Setup Go
        uses: actions/setup-go@v2.1.3
        with:
          go-version: 1.16
      - if: steps.gomod.outputs.exists == 'true'
        name: Build
        run: go build -v ./...
      - if: steps.gomod.outputs.exists == 'true'
        name: Test
        run: go test -v ./...
 
