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 command -v jq >/dev/null || sudo apt-get update -qq && sudo apt-get install -y -qq jq 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"