name: Go Cross-Platform Build on: push: branches: ["master"] pull_request: branches: ["master"] workflow_dispatch: inputs: optional_input: description: 'Only run when needed' required: false default: '' jobs: build: strategy: matrix: os: [ubuntu-latest, windows-latest, macos-12, macos-14] include: - os: ubuntu-latest ext: "" bin_name: "WiiSOAP" display_name: "linux" # Simple name for artifacts - os: windows-latest ext: ".exe" bin_name: "WiiSOAP.exe" display_name: "windows" - os: macos-12 # Intel Mac ext: "" bin_name: "WiiSOAP-macos-intel" display_name: "mac-intel" - os: macos-14 # Apple Silicon ext: "" bin_name: "WiiSOAP-macos-arm64" display_name: "mac-apple-silicon" runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v4 - name: Set up Go uses: actions/setup-go@v4 with: go-version: '1.23' - name: Build run: | if [ "${{ runner.os }}" == "Windows" ]; then $env:GOOS="windows" $env:GOARCH="amd64" go build -v -o "${{ matrix.bin_name }}" ./... else GOOS=${{ runner.os == 'macOS' && 'darwin' || 'linux' }} \ GOARCH=${{ matrix.os == 'macos-14' && 'arm64' || 'amd64' }} \ go build -v -o "${{ matrix.bin_name }}" ./... fi - name: Create release ZIP run: | mkdir -p release cp "${{ matrix.bin_name }}" release/ cp config.example.xml release/ zip -r "wiisoap-${{ matrix.display_name }}.zip" release/ - name: Upload release ZIP uses: actions/upload-artifact@v4 with: name: "wiisoap-${{ matrix.display_name }}" path: "wiisoap-${{ matrix.display_name }}.zip"