#!/usr/bin/env bash set -euo pipefail usage() { cat <<'USAGE' >&2 Usage: ./scripts/test.sh compile --platform esp8266|esp32 ./scripts/test.sh examples --platform esp8266|esp32 ./scripts/test.sh hardware --platform esp8266|esp32 --port /dev/serial/by-id/... USAGE exit 2 } mode="${1:-}" [[ "$mode" == "compile" || "$mode" == "examples" || "$mode" == "hardware" ]] || usage shift platform="" port="" while [[ $# -gt 0 ]]; do case "$1" in --platform) [[ $# -ge 2 ]] || usage; platform="${2:-}"; shift 2 ;; --port) [[ $# -ge 2 ]] || usage; port="${2:-}"; shift 2 ;; *) usage ;; esac done [[ "$platform" == "esp8266" || "$platform" == "esp32" ]] || usage [[ "$mode" != "hardware" || -n "$port" ]] || usage [[ "$mode" != "hardware" || -e "$port" ]] || { echo "Serial port not found: $port" >&2; exit 1; } root="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" if [[ "$mode" == "hardware" ]]; then # Keep serial flashing and portal-adapter work mutually exclusive. # shellcheck source=tools/lib/portal-hardware-session.sh source "$root/tools/lib/portal-hardware-session.sh" wm_acquire_hardware_lock fi if [[ "$mode" == "examples" ]]; then mapfile -t examples < <(find "$root/examples" -mindepth 2 -maxdepth 2 -type f -name platformio.ini -printf '%h\n' | sort) if (( ${#examples[@]} == 0 )); then echo "No example projects found" >&2 exit 1 fi for example in "${examples[@]}"; do pio run -d "$example" -e "$platform" /dev/null fi pio run -d "$root/test/compile-project" -e "$platform" echo "WiFiManager consumer compile check passed for $platform"