name: Go

on: [push, pull_request]

jobs:

  test:
    timeout-minutes: 10
    runs-on: ${{ matrix.os }}
    strategy:
      matrix:
        go-version: [ '1.21' ]
        os: [windows-latest, macos-latest, ubuntu-latest]
      fail-fast: false
    steps:
    - uses: actions/checkout@v2
    - uses: ./.github/actions/go-common
    - run: go test -race -count 2 $(go list ./... | grep -v /fs)
    - run: go test -race -count 2 ./fs/...
      if: ${{ ! contains(matrix.os, 'windows') }}

  test-benchmarks:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        go-version: [ '1.21' ]
      fail-fast: false
    steps:
    - uses: actions/checkout@v2
    - uses: ./.github/actions/go-common
    - run: go test -race -run @ -bench . -benchtime 2x ./...

  bench:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        go-version: [ '1.21' ]
      fail-fast: false
    steps:
    - uses: actions/checkout@v2
    - uses: ./.github/actions/go-common
    - run: go test -run @ -bench . ./...

  test-386:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        go-version: [ '1.21' ]
      fail-fast: false
    steps:
    - uses: actions/checkout@v2
    - uses: ./.github/actions/go-common
    - run: GOARCH=386 go test ./...
    - run: GOARCH=386 go test ./... -run @ -bench .

  build-wasm:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        go-version: [ '1.21' ]
      fail-fast: false
    steps:
    - uses: actions/checkout@v2
    - uses: ./.github/actions/go-common
    - name: Some packages compile for WebAssembly
      run: GOOS=js GOARCH=wasm go build . ./storage ./tracker/...

  torrentfs-linux:
    timeout-minutes: 5
    runs-on: ${{ matrix.os }}
    strategy:
      matrix:
        go-version: [ '1.21' ]
        os: [ubuntu-latest]
      fail-fast: false
    steps:
    - uses: actions/checkout@v2
    - uses: ./.github/actions/go-common
        
    - name: Install godo
      run: |
        # Need master for cross-compiling fix
        go install -v -x github.com/anacrolix/godo@master
        echo $PATH

    - name: Apt packages
      run: sudo apt install pv fuse

    - name: torrentfs end-to-end test
      # Test on 386 for atomic alignment and other bad 64-bit assumptions
      run: GOARCH=386 fs/test.sh

# Github broke FUSE on MacOS, I'm not sure what the state is.

#  torrentfs-macos:
#    timeout-minutes: 15
#    runs-on: ${{ matrix.os }}
#    strategy:
#      matrix:
#        go-version: [ '1.20' ]
#        os: [macos-latest]
#      fail-fast: false
#    steps:
#    - uses: actions/checkout@v2
#    - uses: ./.github/actions/go-common
#
#    - run: brew install macfuse pv md5sha1sum bash
#
#    - name: Install godo
#      run: go install -v github.com/anacrolix/godo@master
#
#    - name: torrentfs end-to-end test
#      run: fs/test.sh
#      # Pretty sure macos on GitHub CI has issues with the fuse driver now.
#      continue-on-error: true
