name: Build (Dev)

on:
  push:
    branches:
      - dev
  workflow_dispatch:

env:
  GO_VERSION: "1.25"
  NODE_VERSION: "22"
  BINARY_NAME: remoterig

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

      - name: Setup Go
        uses: actions/setup-go@v5
        with:
          go-version: ${{ env.GO_VERSION }}

      - name: Setup Node
        uses: actions/setup-node@v4
        with:
          node-version: ${{ env.NODE_VERSION }}

      - name: Build React frontend
        run: |
          npm ci
          npm run build

      - name: Build Go binary (ARM64 cross-compile)
        run: |
          CGO_ENABLED=0 GOOS=linux GOARCH=arm64 \
            go build -ldflags="-s -w -X main.version=${GITHUB_SHA:0:8}" \
            -o ${{ env.BINARY_NAME }} ./cmd/server

      # Pull-based deploy: publish the binary to a rolling "dev" release.
      # The Pi polls this release and self-updates (scripts/pi-update.sh);
      # the runner never needs to reach the closed RemoteRig network.
      - name: Publish to rolling dev release
        env:
          TOKEN: ${{ secrets.GITHUB_TOKEN }}
          SERVER: ${{ github.server_url }}
          REPO: ${{ github.repository }}
          SHA: ${{ github.sha }}
        run: |
          set -euo pipefail
          if ! command -v jq >/dev/null; then sudo apt-get update -qq && sudo apt-get install -y -qq jq; fi
          API="$SERVER/api/v1/repos/$REPO"
          AUTH="Authorization: token $TOKEN"
          VERSION="${SHA:0:8}"
          echo "$VERSION" > version.txt
          sha256sum "$BINARY_NAME" | awk '{print $1}' > "$BINARY_NAME.sha256"

          # Roll the "dev" release forward to this commit (delete old release + tag).
          REL_ID=$(curl -sf -H "$AUTH" "$API/releases/tags/dev" | jq -r '.id // empty' || true)
          [ -n "$REL_ID" ] && curl -sf -X DELETE -H "$AUTH" "$API/releases/$REL_ID" || true
          curl -sf -X DELETE -H "$AUTH" "$API/tags/dev" || true

          REL_ID=$(curl -sf -X POST -H "$AUTH" -H "Content-Type: application/json" "$API/releases" \
            -d "{\"tag_name\":\"dev\",\"target_commitish\":\"$SHA\",\"name\":\"dev ($VERSION)\",\"body\":\"Rolling dev build $SHA\",\"prerelease\":true}" \
            | jq -r '.id')

          for f in "$BINARY_NAME" "$BINARY_NAME.sha256" version.txt; do
            curl -sf -X POST -H "$AUTH" -F "attachment=@$f" "$API/releases/$REL_ID/assets?name=$f"
          done
          echo "Published dev release $VERSION"