name: Build (Dev)

on:
  push:
    branches:
      - dev
  workflow_dispatch:

env:
  BINARY_NAME: remoterig

jobs:
  build:
    runs-on: go-react
    steps:
      - name: Checkout
        uses: actions/checkout@v4

      # go-react has Node but not Go. setup-go installs a statically-linked
      # Go that runs fine here; setup-node's dynamically-linked Node does
      # not (so Node comes from the image instead).
      - name: Setup Go
        uses: actions/setup-go@v5
        with:
          go-version: "1.25"

      - name: Toolchain versions
        run: |
          go version
          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.
      # Done in Node (runner image has no curl/jq/sudo; Node is present).
      - name: Publish to rolling dev release
        env:
          TOKEN: ${{ secrets.GITHUB_TOKEN }}
          SERVER: ${{ github.server_url }}
          REPO: ${{ github.repository }}
          SHA: ${{ github.sha }}
        run: node .gitea/scripts/publish-release.mjs