name: Build and Release

on:
  push:
    tags:
      - 'v*'

permissions:
  contents: write

jobs:
  build:
    runs-on: ubuntu-latest

    strategy:
      matrix:
        goos:   [windows, linux, darwin]
        goarch: [amd64, arm64]
        flavour: [core, full]
      fail-fast: false

    steps:
    - name: Checkout
      uses: actions/checkout@v4

    - name: Set up Go
      uses: actions/setup-go@v5
      with:
        go-version: '1.24.5'

    - name: Generate Windows resources
      if: matrix.goos == 'windows'
      run: |
        go install github.com/tc-hib/go-winres@latest
        go-winres simply \
          --manifest cli \
          --product-name FFWebP \
          --original-filename ffwebp.exe \
          --icon logo.ico \
          --copyright "(c) 2025 coalaura" \
          --file-description "Convert any image format into any other image format" \
          --file-version "${{ github.ref_name }}" \
          --arch "${{ matrix.goarch }}"

    - name: Build ${{ matrix.goos }}_${{ matrix.goarch }} (${{
        matrix.flavour }})
      shell: bash
      run: |
        mkdir -p build
        [[ "${{ matrix.goos }}" == "windows" ]] && EXT=".exe" || EXT=""

        OUT="build/ffwebp_${{ github.ref_name }}_${{ matrix.flavour }}_${{ matrix.goos }}_${{ matrix.goarch }}${EXT}"

        GOOS=${{ matrix.goos }} \
        GOARCH=${{ matrix.goarch }} \
        CGO_ENABLED=0 \
        go build \
          -trimpath \
          -buildvcs=false \
          -ldflags "-s -w -X 'main.Version=${{ github.ref_name }}'" \
          -tags "${{ matrix.flavour }}" \
          -o "$OUT" ./cmd/ffwebp

    - name: Upload artifact
      uses: actions/upload-artifact@v4
      with:
        name: ffwebp_${{ github.ref_name }}_${{ matrix.flavour }}_${{ matrix.goos }}_${{ matrix.goarch }}
        path: build/*

  release:
    needs: build
    runs-on: ubuntu-latest
    steps:
    - name: Checkout
      uses: actions/checkout@v4

    - name: Download all build artifacts
      uses: actions/download-artifact@v4
      with:
        path: ./build

    - name: Create GitHub release
      uses: softprops/action-gh-release@v2
      with:
        files: ./build/**
        name: "Release ${{ github.ref_name }}"
      env:
        GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
