#!/usr/bin/env bash # Upload firmware to localiserd, optionally triggering # a fleet-wide OTA push immediately after upload. # # Usage: # ./deploy_firmware.sh [--ota] # # Example: # ./deploy_firmware.sh ./build/esp-anchor.bin 1.2.0 http://192.168.1.10:4000 --ota set -euo pipefail FIRMWARE_PATH="${1:?Usage: $0 [--ota]}" VERSION="${2:?}" SERVER="${3:?}" TOKEN="${4:?}" OTA="${5:-}" if [[ ! -f "$FIRMWARE_PATH" ]]; then echo "ERROR: firmware not found at $FIRMWARE_PATH" >&2 exit 1 fi SIZE=$(wc -c < "$FIRMWARE_PATH") echo "==> Built: $FIRMWARE_PATH ($SIZE bytes)" # Upload echo "==> Uploading version $VERSION to $SERVER..." curl -fsS \ -H "Authorization: Bearer $TOKEN" \ -F "version=$VERSION" \ -F "firmware=@$FIRMWARE_PATH;type=application/octet-stream" \ "$SERVER/api/firmware" \ | jq . # Fleet OTA if [[ "$OTA" == "--ota" ]]; then echo "==> Pushing fleet OTA for version $VERSION..." curl -fsS -X POST \ -H "Authorization: Bearer $TOKEN" \ -H "Content-Type: application/json" \ "$SERVER/api/firmware/$VERSION/ota" \ | jq . fi echo "==> Done."