name: Test
on:
  push:
    branches:
    - master
  pull_request:
    branches:
    - master
jobs:
  test:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        go: ["1.15", "1.16"]
      fail-fast: false
    name: Go ${{ matrix.go }}
    steps:
      - uses: actions/checkout@v2

      - uses: actions/cache@v2
        with:
          path: |
            ~/go/pkg/mod
            ~/go/bin
            ~/.cache
          key: ${{ runner.os }}-amd64-go-${{ hashFiles('**/go.sum') }}
          restore-keys: |
            ${{ runner.os }}-amd64-go-

      - name: Setup Go
        uses: actions/setup-go@v2
        with:
          go-version: ${{ matrix.go }}

      - name: Setup go-acc
        run: |
          go get github.com/ory/go-acc
          git checkout go.mod go.sum

      - name: Run test
        run: |
          go-acc -o cover.out ./... -- \
          -bench=. \
          -v -race

      - uses: codecov/codecov-action@v1
        with:
          file: ./cover.out
          name: codecov-umbrella
          fail_ci_if_error: true
          flags: go

  test-i386:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        go: ["1.15", "1.16"]
      fail-fast: false
    name: Go i386 ${{ matrix.go }}
    steps:
      - uses: actions/checkout@v2

      - uses: actions/cache@v2
        with:
          path: |
            ~/go/pkg/mod
            ~/.cache
          key: ${{ runner.os }}-i386-go-${{ hashFiles('**/go.sum') }}
          restore-keys: |
            ${{ runner.os }}-i386-go-

      - name: Run test
        run: |
          mkdir -p $HOME/go/pkg/mod $HOME/.cache
          docker run \
          -u $(id -u):$(id -g) \
          -e "GO111MODULE=on" \
          -e "CGO_ENABLED=0" \
          -v $GITHUB_WORKSPACE:/go/src/github.com/pion/$(basename $GITHUB_WORKSPACE) \
          -v $HOME/go/pkg/mod:/go/pkg/mod \
          -v $HOME/.cache:/.cache \
          -w /go/src/github.com/pion/$(basename $GITHUB_WORKSPACE) \
          i386/golang:${{matrix.go}}-alpine \
          /usr/local/go/bin/go test \
            ${TEST_EXTRA_ARGS:-} \
            -v ./...

  test-wasm:
    runs-on: ubuntu-latest
    strategy:
      fail-fast: false
    name: WASM
    steps:
      - uses: actions/checkout@v2

      - name: Use Node.js
        uses: actions/setup-node@v2
        with:
          node-version: '12.x'

      - uses: actions/cache@v2
        with:
          path: |
            ~/go/pkg/mod
            ~/.cache
          key: ${{ runner.os }}-wasm-go-${{ hashFiles('**/go.sum') }}
          restore-keys: |
            ${{ runner.os }}-wasm-go-

      - name: Download Go
        run: curl -sSfL https://dl.google.com/go/go${GO_VERSION}.linux-amd64.tar.gz | tar -C ~ -xzf -
        env:
          GO_VERSION: 1.16

      - name: Set Go Root
        run: echo "GOROOT=${HOME}/go" >> $GITHUB_ENV

      - name: Set Go Path
        run: echo "GOPATH=${HOME}/go" >> $GITHUB_ENV

      - name: Set Go Path
        run: echo "GO_JS_WASM_EXEC=${GOROOT}/misc/wasm/go_js_wasm_exec" >> $GITHUB_ENV

      - name: Insall NPM modules
        run: yarn install

      - name: Run Tests
        run: |
          GOOS=js GOARCH=wasm $GOPATH/bin/go test \
          -coverprofile=cover.out -covermode=atomic \
          -exec="${GO_JS_WASM_EXEC}" \
          -v ./...

      - uses: codecov/codecov-action@v1
        with:
          file: ./cover.out
          name: codecov-umbrella
          fail_ci_if_error: true
          flags: wasm
