name: release

on:
  push:
    branches: [main]
    paths:
      - '**.go'
      - 'go.mod'
      - 'go.sum'
      - 'scripts/**'
      - 'assets/**'
      - 'embed.go'
      - 'cmd/xetup/app.manifest'
      - '.forgejo/workflows/release.yml'

jobs:
  build-and-release:
    # Runner label 'ubuntu-latest' maps to golang:1.24-alpine container (see runner config)
    runs-on: ubuntu-latest
    defaults:
      run:
        shell: sh
        working-directory: /repo

    steps:
      - name: Setup
        working-directory: /
        run: |
          apk add --no-cache git curl jq
          git clone --depth=1 \
            "http://x9:${{ secrets.FORGEJO_TOKEN }}@xetup-forgejo:3000/${{ github.repository }}.git" \
            /repo
          cd /repo
          git checkout "${{ github.sha }}"

      - name: Generate rsrc.syso (manifest + UAC)
        run: |
          go install github.com/akavel/rsrc@latest
          rsrc -manifest cmd/xetup/app.manifest -o cmd/xetup/rsrc.syso
          echo "rsrc.syso: $(ls -lh cmd/xetup/rsrc.syso | awk '{print $5}')"

      - name: Build xetup.exe
        run: |
          GOOS=windows GOARCH=amd64 \
            go build -ldflags="-s -w -H windowsgui" -o xetup.exe ./cmd/xetup/
          echo "Built: $(ls -lh xetup.exe | awk '{print $5}')"

      - name: Publish latest release
        env:
          TOKEN: ${{ secrets.FORGEJO_TOKEN }}
          API:   http://xetup-forgejo:3000/api/v1
          REPO:  ${{ github.repository }}
        run: |
          SHORT=$(echo "${{ github.sha }}" | cut -c1-7)

          # Delete existing 'latest' release and tag to recreate cleanly
          RID=$(curl -sf -H "Authorization: token $TOKEN" \
            "$API/repos/$REPO/releases/tags/latest" | jq -r '.id // empty')
          if [ -n "$RID" ]; then
            curl -sf -X DELETE -H "Authorization: token $TOKEN" \
              "$API/repos/$REPO/releases/$RID" || true
          fi
          curl -sf -X DELETE -H "Authorization: token $TOKEN" \
            "$API/repos/$REPO/tags/latest" || true

          # Create new 'latest' release
          RID=$(curl -sf -X POST \
            -H "Authorization: token $TOKEN" \
            -H "Content-Type: application/json" \
            "$API/repos/$REPO/releases" \
            -d "{\"tag_name\":\"latest\",\"name\":\"latest\",\"body\":\"Auto-built from ${SHORT}\",\"prerelease\":true}" \
            | jq -r '.id')

          # Upload xetup.exe
          curl -sf -X POST \
            -H "Authorization: token $TOKEN" \
            -H "Content-Type: application/octet-stream" \
            "$API/repos/$REPO/releases/$RID/assets?name=xetup.exe" \
            --data-binary @xetup.exe

          echo "Released xetup.exe (commit ${SHORT})"
