name: Build and Release

on:
  push:
    tags:
      - 'v*'

permissions:
  contents: write

jobs:
  build:
    runs-on: ubuntu-latest

    strategy:
      matrix:
        goos:   [windows, linux]
        goarch: [amd64, arm64]
      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 whiskr \
          --original-filename whiskr.exe \
          --icon static/favicon.ico \
          --copyright "(c) 2025 coalaura" \
          --file-description "Minimal LLM chat UI using OpenRouter giving you control over your context." \
          --file-version "${{ github.ref_name }}" \
          --arch "${{ matrix.goarch }}"

    - name: Build ${{ matrix.goos }}_${{ matrix.goarch }}
      shell: bash
      run: |
        for f in static/css/*.css static/js/*.js static/lib/*.css static/lib/*.js; do
          [ -f "$f" ] || continue

          hash=$(sha1sum "$f" | cut -c1-8)
          filepath=${f#static/}

          sed -i "s|\([\"']$filepath\)[\"']|\1?v=$hash\"|g" static/index.html
        done

        mkdir -p build
        [[ "${{ matrix.goos }}" == "windows" ]] && EXT=".exe" || EXT=""

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

        cp -r static build/static
        cp -r prompts build/prompts
        cp example.config.yml build/config.yml
        tar -czvf build/whiskr_${{ github.ref_name }}_${{ matrix.goos }}_${{ matrix.goarch }}.tar.gz -C build "whiskr${EXT}" static prompts config.yml
        rm -rf build/static build/prompts build/config.yml "build/whiskr${EXT}"

    - name: Upload artifact
      uses: actions/upload-artifact@v4
      with:
        name: whiskr_${{ github.ref_name }}_${{ matrix.goos }}_${{ matrix.goarch }}.tar.gz
        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 }}
