name: Release

on:
  push:
    tags:
      - 'v*.*.*'

permissions:
  contents: write

jobs:
  build:
    strategy:
      matrix:
        include:
          - os: ubuntu-latest
            goos: linux
            goarch: amd64
            ext: ""
          - os: ubuntu-latest
            goos: linux
            goarch: arm64
            ext: ""
          - os: macos-latest
            goos: darwin
            goarch: amd64
            ext: ""
          - os: macos-latest
            goos: darwin
            goarch: arm64
            ext: ""
          - os: windows-latest
            goos: windows
            goarch: amd64
            ext: ".exe"
    runs-on: ${{ matrix.os }}
    steps:
      - uses: actions/checkout@v4

      - name: Setup Go
        uses: actions/setup-go@v5
        with:
          go-version: '1.23'
          cache: true

      - name: Build CLI
        env:
          GOOS: ${{ matrix.goos }}
          GOARCH: ${{ matrix.goarch }}
          CGO_ENABLED: "0"
        run: |
          mkdir -p dist
          go build -ldflags="-s -w -X main.Version=${{ github.ref_name }}" \
            -o dist/core-${{ matrix.goos }}-${{ matrix.goarch }}${{ matrix.ext }} \
            ./cmd/core

      - name: Upload artifact
        uses: actions/upload-artifact@v4
        with:
          name: core-${{ matrix.goos }}-${{ matrix.goarch }}
          path: dist/core-*

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

      - name: Download artifacts
        uses: actions/download-artifact@v4
        with:
          path: dist
          merge-multiple: true

      - name: Prepare release files
        run: |
          mkdir -p release
          cp dist/* release/ 2>/dev/null || true
          ls -la release/

      - name: Create release
        env:
          GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        run: |
          gh release create ${{ github.ref_name }} \
            --title "Release ${{ github.ref_name }}" \
            --generate-notes \
            release/*
