name: Go

on:
  push:
    branches: [ master ]
  pull_request:
    branches: [ master ]

permissions:
  contents: read  #  to fetch code (actions/checkout)

jobs:

  test:
    permissions:
      contents: read  #  to fetch code (actions/checkout)
      checks: write  #  to create a new check based on the results (shogo82148/actions-goveralls)

    name: Test
    runs-on: ${{ matrix.os }}
    strategy:
      matrix:
        # tests for target OS
        os: [ubuntu-latest, macos-latest]
    steps:

    - name: Check out code into the Go module directory
      uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1

    - name: Set up Go 1.x
      uses: actions/setup-go@4b73464bb391d4059bd26b0524d20df3927bd417 # v6.3.0
      with:
        go-version-file: go.mod
        check-latest: true
      id: go

    - name: Install Dependencies
      run: |
        go get -v -t -d ./...

    - name: Test
      env:
        GOMAXPROCS: 4
        GOMEMLIMIT: 8192MiB
      run: make go-test

    - name: Send coverage
      uses: coverallsapp/github-action@5cbfd81b66ca5d10c19b062c04de0199c215fb6e # v2
      with:
        file: profile.cov
        format: golang
        flag-name: run-${{ join(matrix.*, '-') }}
        parallel: true
      continue-on-error: true

  finish:
    needs: test
    if: ${{ always() }}
    runs-on: ubuntu-latest
    steps:
    - name: Coveralls Finished
      uses: coverallsapp/github-action@5cbfd81b66ca5d10c19b062c04de0199c215fb6e # v2
      with:
        parallel-finished: true
        carryforward: "run-ubuntu-latest,run-macos-latest"
      continue-on-error: true
