# This workflow will build a golang project
# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-go

name: Go

on:
  push:
    tags:
      - v*

jobs:
  release:
    strategy:
      matrix:
        include:
          - os: ubuntu-latest
            artifact_name: ${{ github.event.repository.name }}-linux-amd64
            install_deps: sudo apt update && sudo apt install -y libc6-dev libgl1-mesa-dev libxcursor-dev libxi-dev libxinerama-dev libxrandr-dev libxxf86vm-dev libasound2-dev pkg-config
            env_vars: GOOS=linux GOARCH=amd64
          - os: ubuntu-latest
            artifact_name: ${{ github.event.repository.name }}-windows-amd64.exe
            install_deps: ""
            env_vars: GOOS=windows GOARCH=amd64 CGO_ENABLED=0
            build_args: -a -ldflags '-extldflags "-static" -s -w'
          - os: macos-latest
            artifact_name: ${{ github.event.repository.name }}-darwin-arm64
            install_deps: ""
            env_vars: GOOS=darwin GOARCH=arm64 CGO_ENABLED=1
            build_args: -a -ldflags '-s -w'
          - os: macos-latest
            artifact_name: ${{ github.event.repository.name }}-darwin-amd64
            install_deps: ""
            env_vars: GOOS=darwin GOARCH=amd64 CGO_ENABLED=1
            build_args: -a -ldflags '-s -w'

    runs-on: ${{ matrix.os }}

    steps:
    - name: Checkout code
      uses: actions/checkout@v3

    - name: Set up Go
      uses: actions/setup-go@v4
      with:
        go-version: '1.22'

    - name: Install dependencies
      run: ${{ matrix.install_deps }}

    - name: Build
      run: ${{ matrix.env_vars }} go build ${{ matrix.build_args }} -o dist/${{ matrix.artifact_name }}

    - name: Compress binaries
      run: gzip dist/${{ matrix.artifact_name }}

    - name: Upload binaries to release
      uses: svenstaro/upload-release-action@v2
      with:
        repo_token: ${{ secrets.GITHUB_TOKEN }}
        file: dist/${{ matrix.artifact_name }}.gz
        asset_name: ${{ matrix.artifact_name }}.gz
        tag: ${{ github.ref }}
