name: Test

on:
  push:
    branches:
      - main
  pull_request:

jobs:
  test:
    strategy:
      matrix:
        go: [1.13.x, 1.14.x, 1.15.x, 1.16.x, 1.17.x]
        os: [ubuntu-latest, macos-latest]
    runs-on: ${{ matrix.os }}
    env:
      CGO_ENABLED: 1
    steps:
      - name: Install GCC (MacOS)
        if: startsWith(matrix.os, 'macos')
        run: |
          brew update
          brew install gcc
      - name: Install GCC (Ubuntu)
        if: startsWith(matrix.os, 'ubuntu')
        run: |
          sudo apt update
          sudo apt install -y gcc-multilib g++-multilib
        shell: bash
      - name: Install Go
        uses: actions/setup-go@v2
        with:
          go-version: ${{ matrix.go }}
      - name: Checkout code
        uses: actions/checkout@v2
      - name: Test
        run: go test -v ./...

  coverage:
    runs-on: ubuntu-latest
    steps:
      - name: Install GCC (Ubuntu)
        run: |
          sudo apt update
          sudo apt install -y gcc-multilib g++-multilib
        shell: bash
      - name: Install Go
        if: success()
        uses: actions/setup-go@v2
        with:
          go-version: 1.16.x
      - name: Checkout code
        uses: actions/checkout@v2
      - name: Calc coverage
        run: |
          go test -v -covermode=count -coverprofile=coverage.out ./...
      - name: Convert coverage.out to coverage.lcov
        uses: jandelgado/gcov2lcov-action@v1.0.6
      - name: Coveralls
        uses: coverallsapp/github-action@v1.1.2
        with:
          github-token: ${{ secrets.github_token }}
          path-to-lcov: coverage.lcov
