github preston-peterson/aerodrome v3.0.14

latest releases: v3.4.136, v3.4.135, v3.4.134...
5 months ago

Polished two scripts/bootstrap.sh papercuts surfaced by the v3.0.13 clean-VM dogfood. Both made it through end-to-end the second time around (the install succeeded and the service started cleanly), but they degraded the first-impression on a fresh user enough to be worth fixing before announcing the install URL.

Papercut 1: color-escape leak in the final banner. The very last line of the bootstrap's "Bootstrap complete!" output uses string interpolation to colorize the web-UI URL: "Aerodrome is running at: ${CYAN}http://${SERVER_IP}:8000${RESET}". Every other color-using line in the script uses echo -e so the \033[... escape sequences embedded in the color variables get interpreted as actual ANSI codes by the terminal; this one line used plain echo (no -e), so the escapes printed as literal text — \033[36m\033[1mhttp://...:8000\033[0m showing up in the terminal output instead of cyan-bold "http://...:8000". The fix is adding -e to that one echo. Grep confirmed it was the only outlier in the entire script. ~1-line edit.

Papercut 2: timezone prompt accepted invalid input. The interactive timezone prompt asked for "Time zone (IANA)" with the system-detected timezone as the default, but accepted any string the user typed — including common-but-wrong inputs like "CDT" (a US timezone abbreviation, not a valid IANA name). On the v3.0.13 dogfood the user typed "CDT" at the prompt and the install completed without complaint; the invalid value got written to config.yaml, where it would have caused the running service to fail to localize timestamps the first time it tried (silently falling back to UTC for display, or crashing on zoneinfo.ZoneInfo("CDT") depending on which code path got there first). The fix shifts the philosophy entirely: instead of asking the user for the timezone and validating their answer, the timezone is no longer prompted — the auto-detection that was already running (line ~530, reading from /etc/timezone or timedatectl) is used silently, and the user is pointed at the web UI's Configuration page to adjust the timezone or any other setting after install. Reasoning: the detection sources only produce valid IANA names by construction (/etc/timezone and timedatectl both emit canonical names), the system tz is almost always what the user wants on their own machine, and removing the prompt eliminates the whole class of "user types something plausible that happens to be wrong" bugs. The --timezone flag path stays for scripted overrides where power users know what they're doing. A short log_info line during step 6 confirms the auto-detected value so the user can see what was picked: "Time zone: America/Chicago (auto-detected; change later in web UI → Configuration)".

Companion change to the post-install banner. Since the bootstrap now picks several defaults silently rather than asking (timezone now, more likely later — see the queued first-time-setup-wizard item), the banner needs to point users at where they go to customize. Rewrote the final block from "Open the URL in a browser to finish setup. Watchlist, notifications, retention, and display preferences are all configurable from the web UI." to a more directive version that calls out the gear-menu → Configuration path explicitly and yellow-highlights "Next step:" so it visually pops as the actionable thing to do after the URL line. The new copy: "Next step: open the URL above, then visit gear menu → Configuration to review and adjust settings (timezone, watchlist, notifications, retention, display preferences, and more). The install picked sensible defaults but most users will want to customize at least a few of them."

What's NOT done yet: the planned first-time-setup-wizard inside the web UI itself, with an in-app button to re-launch it if the user dismisses it. Filed for future work. The bootstrap-side change here narrows the install prompt count and makes the post-install handoff to the web UI more explicit, which sets up nicely for whatever wizard pattern lands later — at the limit, the bootstrap could be reduced to just receiver IP/port and everything else handled in the web UI wizard. Not in v3.0.14's scope.

Net change: ~30 lines edited across scripts/bootstrap.sh — one-line echo fix for Papercut 1, ~15 lines replacing the timezone prompt block with silent auto-detection + log_info, ~10 lines rewriting the final banner copy to point at the Configuration page. Bootstrap header version bumped to 3.0.14. No other files touched. No behavior change to the running Aerodrome service — every change is install-flow-only.

Don't miss a new aerodrome release

NewReleases is sending notifications on new releases.