#!/usr/bin/env bash set -euo pipefail RED='\033[0;31m' GREEN='\033[0;32m' NC='\033[0m' pass() { echo -e " ${GREEN}OK${NC} $1"; } fail() { echo -e " ${RED}MISMATCH${NC} $1"; } SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" PROJECT_DIR="$(dirname "$SCRIPT_DIR")" VERSION_FILE="$PROJECT_DIR/version.txt" HEADER_FILE="$PROJECT_DIR/src/version.h" KOTLIN_FILE="$PROJECT_DIR/android/app/src/main/java/nl/eddydevink/sylda/SylDaVersions.kt" errors=0 echo "=== Version consistency check ===" # 1. Parse version.txt (source of truth) if [ ! -f "$VERSION_FILE" ]; then fail "version.txt not found at $VERSION_FILE" exit 1 fi src_server=$(grep -oP '^server=\K\d+' "$VERSION_FILE" || true) src_client=$(grep -oP '^client=\K\d+' "$VERSION_FILE" || true) if [ -z "$src_server" ] || [ -z "$src_client" ]; then fail "version.txt missing server= or client=" exit 1 fi pass "version.txt server=$src_server client=$src_client" # 2. Parse src/version.h (generated by pio run) if [ ! -f "$HEADER_FILE" ]; then fail "src/version.h not found — run 'pio run' first" ((errors++)) else hdr_server=$(grep -oP 'FIRMWARE_VERSION_SERVER\s+"\K\d+' "$HEADER_FILE" || true) hdr_client=$(grep -oP 'FIRMWARE_VERSION_CLIENT\s+"\K\d+' "$HEADER_FILE" || true) if [ "$hdr_server" = "$src_server" ] && [ "$hdr_client" = "$src_client" ]; then pass "src/version.h server=$hdr_server client=$hdr_client" else fail "src/version.h server=${hdr_server:-MISSING} client=${hdr_client:-MISSING} (expected server=$src_server client=$src_client)" ((errors++)) fi fi # 3. Parse SylDaVersions.kt (generated by Gradle build) if [ ! -f "$KOTLIN_FILE" ]; then fail "SylDaVersions.kt not found — run './gradlew build' first" ((errors++)) else kt_server=$(grep -oP 'const val SERVER = "\K\d+' "$KOTLIN_FILE" || true) kt_client=$(grep -oP 'const val CLIENT = "\K\d+' "$KOTLIN_FILE" || true) if [ "$kt_server" = "$src_server" ] && [ "$kt_client" = "$src_client" ]; then pass "SylDaVersions.kt server=$kt_server client=$kt_client" else fail "SylDaVersions.kt server=${kt_server:-MISSING} client=${kt_client:-MISSING} (expected server=$src_server client=$src_client)" ((errors++)) fi fi echo "" if [ "$errors" -eq 0 ]; then echo -e "${GREEN}All version files in sync.${NC}" exit 0 else echo -e "${RED}$errors version file(s) out of sync with version.txt.${NC}" echo "Run 'pio run' and './gradlew build' to regenerate." exit 1 fi