--- name: build # Trigger the workflow on push or pull request on: push: branches: - '*' tags: - '*' pull_request: jobs: build: timeout-minutes: 60 strategy: fail-fast: false matrix: job_name: ['linux', 'mac', 'windows_amd64'] include: - job_name: linux os: ubuntu-latest - job_name: mac os: macOS-11 - job_name: windows_amd64 os: windows-latest name: ${{ matrix.job_name }} runs-on: ${{ matrix.os }} steps: - name: Checkout uses: actions/checkout@v4 with: fetch-depth: 0 - name: Install Go uses: actions/setup-go@v4 with: go-version: ^1.20 - name: Install Libraries on Linux shell: bash run: | sudo modprobe fuse sudo chmod 666 /dev/fuse sudo chown root:$USER /etc/fuse.conf sudo apt-get install fuse libfuse-dev rpm pkg-config if: matrix.os == 'ubuntu-latest' - name: Install Libraries on macOS shell: bash run: | brew update brew install --cask osxfuse if: matrix.os == 'macOS-11' - name: Install Libraries on Windows shell: powershell run: | $ProgressPreference = 'SilentlyContinue' choco install -y winfsp zip echo "CPATH=C:\Program Files\WinFsp\inc\fuse;C:\Program Files (x86)\WinFsp\inc\fuse" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append if ($env:GOARCH -eq "386") { choco install -y mingw --forcex86 --force echo "C:\\ProgramData\\chocolatey\\lib\\mingw\\tools\\install\\mingw32\\bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append } # Copy mingw32-make.exe to make.exe so the same command line # can be used on Windows as on macOS and Linux $path = (get-command mingw32-make.exe).Path Copy-Item -Path $path -Destination (Join-Path (Split-Path -Path $path) 'make.exe') if: matrix.os == 'windows-latest' - name: Print Go version and environment shell: bash run: | printf "Using go at: $(which go)\n" printf "Go version: $(go version)\n" printf "\n\nGo environment:\n\n" go env printf "\n\nSystem environment:\n\n" env - name: Go module cache uses: actions/cache@v3.3.1 with: path: ~/go/pkg/mod key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }} restore-keys: | ${{ runner.os }}-go- - name: Run tests shell: bash run: | make test-race - name: Convert coverage.out to coverage.lcov uses: jandelgado/gcov2lcov-action@v1.0.9 if: matrix.os == 'ubuntu-latest' - name: Coveralls uses: coverallsapp/github-action@v2.2.3 with: github-token: ${{ secrets.GITHUB_TOKEN }} path-to-lcov: coverage.lcov if: matrix.os == 'ubuntu-latest' - name: Build shell: bash run: | make build - name: Upload artifacts uses: actions/upload-artifact@v3 with: if-no-files-found: error name: build-${{ matrix.job_name }} path: bin/* - name: Release uses: softprops/action-gh-release@v1 if: startsWith(github.ref, 'refs/tags/') env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: files: bin/*