name: Go
on: [push, pull_request]
jobs:
  build:
    name: Build on limited environment
    runs-on: ubuntu-latest
    steps:
    - name: checkout
      uses: actions/checkout@v2
    - name: build
      run: docker-compose run go-json
  test:
    name: Test
    strategy:
      matrix:
        os: [ "ubuntu-latest", "macos-latest", "windows-latest" ]
        go-version: [ "1.14", "1.15", "1.16" ]
    runs-on: ${{ matrix.os }}
    steps:
    - name: setup Go ${{ matrix.go-version }}
      uses: actions/setup-go@v2
      with:
        go-version: ${{ matrix.go-version }}
    - name: checkout
      uses: actions/checkout@v2
    - name: simple test
      run: go test -v ./ -count=1
    - name: test with GC pressure
      run: go test -v ./ -count=1
      env:
        GOGC: 1
    - name: test with race detector
      run: go test -v -race ./ -count=1
  coverage:
    name: Coverage
    runs-on: ubuntu-latest
    steps:
      - name: setup Go
        uses: actions/setup-go@v2
        with:
          go-version: 1.16
      - name: checkout
        uses: actions/checkout@v2
      - name: measure coverage
        run: make cover
      - name: report coverage
        run: |
          bash <(curl -s https://codecov.io/bash)