name: Release

on:
  push:
    tags:
      - 'V*'

permissions:
  contents: write

jobs:
  build-release:
    runs-on: macos-latest
    steps:
      - name: Checkout source code
        uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4

      - name: Set up Go
        uses: actions/setup-go@40f1582b2485089dde7abd97c1529aa768e1baff # v5
        with:
          go-version: "1.24.6"
          cache: true

      - name: Build Universal Binary for disk analyzer
        run: ./scripts/build-analyze.sh

      - name: Build Universal Binary for system status
        run: ./scripts/build-status.sh

      - name: Verify binary is valid
        run: |
          if [[ ! -x bin/analyze-go ]]; then
            echo "Error: bin/analyze-go is not executable"
            exit 1
          fi
          if [[ ! -x bin/status-go ]]; then
            echo "Error: bin/status-go is not executable"
            exit 1
          fi
          echo "Binary info:"
          file bin/analyze-go
          ls -lh bin/analyze-go
          file bin/status-go
          ls -lh bin/status-go
          echo ""
          echo "✓ Universal binary built successfully"

      - name: Commit binaries for release
        run: |
          # Configure Git
          git config user.name "Tw93"
          git config user.email "tw93@qq.com"

          # Save binaries to temp location
          cp bin/analyze-go /tmp/analyze-go
          cp bin/status-go /tmp/status-go

          # Switch to main branch
          git fetch origin main
          git checkout main
          git pull origin main

          # Restore binaries
          mv /tmp/analyze-go bin/analyze-go
          mv /tmp/status-go bin/status-go

          # Commit and Push
          git add bin/analyze-go bin/status-go
          if git diff --staged --quiet; then
            echo "No changes to commit"
          else
            git commit -m "chore: update binaries for ${GITHUB_REF#refs/tags/}"
            git push origin main
          fi

  update-formula:
    runs-on: ubuntu-latest
    needs: build-release
    steps:
      - name: Extract version from tag
        id: tag_version
        run: |
          TAG=${GITHUB_REF#refs/tags/}
          VERSION=${TAG#V}
          echo "tag=$TAG" >> $GITHUB_OUTPUT
          echo "version=$VERSION" >> $GITHUB_OUTPUT
          echo "Releasing version: $VERSION (tag: $TAG)"

      - name: Update Homebrew formula
        uses: mislav/bump-homebrew-formula-action@56a283fa15557e9abaa4bdb63b8212abc68e655c # v3.6
        with:
          formula-name: mole
          formula-path: Formula/mole.rb
          homebrew-tap: tw93/homebrew-tap
          tag-name: ${{ steps.tag_version.outputs.tag }}
          commit-message: |
            mole ${{ steps.tag_version.outputs.version }}

            Automated release via GitHub Actions
        env:
          COMMITTER_TOKEN: ${{ secrets.PAT_TOKEN }}

      - name: Verify formula update
        if: success()
        run: |
          echo "✓ Homebrew formula updated successfully"
          echo "  Version: ${{ steps.tag_version.outputs.version }}"
          echo "  Tag: ${{ steps.tag_version.outputs.tag }}"
