feat(tools): Auslieferungsarchiv ohne WLAN-Zugangsdaten
Baut alle acht Ziele ueber den wiederverwendbaren Bauweg tools/build_nocreds.sh (config.local.cmake liegt per trap beiseite, damit sie nicht als set() jedes -D schlaegt) und packt ota/, migrate/ (prod+dev signiert), flash/, bruno/, onboard.sh, README.md und SHA256SUMS nach dist/ninlight-<version>.tar.gz. Vor dem Packen wird jede Datei binaer gegen SSID, WLAN-Passwort und Token aus config.local.cmake geprueft; ein Fund bricht den Lauf ab.
This commit is contained in:
Executable
+77
@@ -0,0 +1,77 @@
|
||||
#!/usr/bin/env bash
|
||||
# Baut Firmwareabzuege OHNE einkompilierte WLAN-Zugangsdaten: die Lampen starten damit
|
||||
# im Onboarding-AP (ninlight-<mac4>), statt sich in ein fremdes WLAN einzuwaehlen.
|
||||
#
|
||||
# Aufruf: tools/build_nocreds.sh [ziel ...] (ohne Argumente: alle acht Ziele)
|
||||
#
|
||||
# Ergebnis: je Ziel ein Build-Verzeichnis unter $NINLIGHT_NOCREDS_BUILD_REL (Vorgabe
|
||||
# "build-nocreds", relativ zum Repo-Wurzelverzeichnis) mit den ueblichen Artefakten
|
||||
# (ninlight_<ziel>_gz.img, ninlight_<ziel>_ota.img, ...). Bewusst NICHT build/: die
|
||||
# dortigen Abzuege sind die des Entwicklers - mit seinem WLAN - und bleiben unangetastet.
|
||||
#
|
||||
# Dieses Skript ist ausdruecklich zum Wiederverwenden da: tools/release.sh baut damit das
|
||||
# Auslieferungsarchiv, und die Migrationsstation wird damit die Wahl "Lampe startet im
|
||||
# Onboarding-AP" bedienen. Deshalb steht die Logik hier und nicht in release.sh.
|
||||
#
|
||||
# Umgebungsvariablen:
|
||||
# NINLIGHT_DOCKER Build-Vorspann (Vorgabe tools/docker.sh); Tests stubben ihn
|
||||
# NINLIGHT_NOCREDS_BUILD_REL Ausgabeverzeichnis relativ zur Repo-Wurzel
|
||||
set -euo pipefail
|
||||
|
||||
ROOT=$(cd "$(dirname "$0")/.." && pwd)
|
||||
DOCKER=${NINLIGHT_DOCKER:-$ROOT/tools/docker.sh}
|
||||
BUILD_REL=${NINLIGHT_NOCREDS_BUILD_REL:-build-nocreds}
|
||||
|
||||
DEVICES=(evk e27_rgb e14_rgb gu10_rgb e27_cw e14_cw gu10_cw g95_cw)
|
||||
if [ $# -gt 0 ]; then
|
||||
TARGETS=("$@")
|
||||
else
|
||||
TARGETS=("${DEVICES[@]}")
|
||||
fi
|
||||
for t in "${TARGETS[@]}"; do
|
||||
ok=0
|
||||
for d in "${DEVICES[@]}"; do [ "$t" = "$d" ] && ok=1; done
|
||||
[ "$ok" -eq 1 ] || { echo "Fehler: unbekanntes Ziel '$t' (bekannt: ${DEVICES[*]})" >&2; exit 1; }
|
||||
done
|
||||
|
||||
# config.local.cmake wird in CMakeLists.txt mit gewoehnlichem set() eingebunden und
|
||||
# SCHLAEGT damit jedes -D auf der Kommandozeile. Ein Bau ohne Zugangsdaten ist deshalb
|
||||
# nur moeglich, wenn die Datei fuer die Dauer des Baus beiseite liegt. In ihr stehen die
|
||||
# echte SSID, das WLAN-Passwort und das API-Token - sie muss auch dann zurueckkommen,
|
||||
# wenn der Bau abbricht oder jemand Strg-C drueckt. Darum ein trap auf EXIT UND auf
|
||||
# INT/TERM (EXIT allein laeuft bei einem Signal zwar auch, aber der Exit-Code soll das
|
||||
# Signal widerspiegeln, statt als Erfolg durchzugehen).
|
||||
LOCAL="$ROOT/config.local.cmake"
|
||||
STASH_DIR=""
|
||||
restore_local() {
|
||||
[ -n "$STASH_DIR" ] || return 0
|
||||
if [ -f "$STASH_DIR/config.local.cmake" ]; then
|
||||
cp -p "$STASH_DIR/config.local.cmake" "$LOCAL" || {
|
||||
echo "ACHTUNG: config.local.cmake konnte nicht zurueckgelegt werden - Kopie liegt unter $STASH_DIR" >&2
|
||||
STASH_DIR=""
|
||||
return 1
|
||||
}
|
||||
fi
|
||||
rm -rf "$STASH_DIR"
|
||||
STASH_DIR=""
|
||||
}
|
||||
if [ -f "$LOCAL" ]; then
|
||||
STASH_DIR=$(mktemp -d)
|
||||
cp -p "$LOCAL" "$STASH_DIR/config.local.cmake"
|
||||
trap 'restore_local' EXIT
|
||||
trap 'restore_local; trap - INT; kill -INT $$' INT
|
||||
trap 'restore_local; exit 143' TERM
|
||||
rm -f "$LOCAL"
|
||||
echo "config.local.cmake liegt fuer diesen Bau beiseite (keine WLAN-Zugangsdaten im Abzug)"
|
||||
fi
|
||||
|
||||
for t in "${TARGETS[@]}"; do
|
||||
echo "== $t (ohne Zugangsdaten)"
|
||||
# Relative Pfade, weil der Bau ueblicherweise im Container laeuft, der das Repo unter
|
||||
# /work einhaengt - absolute Hostpfade gaebe es dort nicht.
|
||||
"$DOCKER" cmake -S . -B "$BUILD_REL/$t" -G Ninja \
|
||||
-DCMAKE_TOOLCHAIN_FILE=cmake/arm-none-eabi.cmake -DNINLIGHT_DEVICE="$t" >/dev/null
|
||||
"$DOCKER" cmake --build "$BUILD_REL/$t"
|
||||
done
|
||||
|
||||
echo "fertig - Abzuege ohne Zugangsdaten unter $ROOT/$BUILD_REL"
|
||||
Reference in New Issue
Block a user