mirror of
https://github.com/home-assistant/frontend.git
synced 2026-08-13 16:42:25 +01:00
* Shared build and runner for all build,dev,test flows * Harden managed process lifecycle * Make build workflows deterministic * Test build management contracts * Queue shared generated output work * Isolate generated inputs for dev servers * Preserve dev server child failures * Make generated lock test deterministic * Keep test navigator configurable * Block concurrent frontend workflows * Simplify workflow lock ownership * Focus workflow locking on managed commands * Trim workflow lock unit tests * Consolidate dev server lifecycle handlers
105 lines
3.5 KiB
Bash
Executable File
105 lines
3.5 KiB
Bash
Executable File
#!/bin/sh
|
|
#
|
|
# This script can be used to develop and test the frontend without having to
|
|
# link the build in a running core instance through the frontend/development_repo setting.
|
|
#
|
|
# WARNING:
|
|
# If you have an active login session in the frontend. The core that was used
|
|
# as a backend during the time of the login remains used until you logout again.
|
|
# So if you reuse the url hosting the frontend, you will need to logout before
|
|
# it will actually start using the core backend configured by this script.
|
|
#
|
|
# If you run this script without parameters, the frontend will be accessible under http://localhost:8124.
|
|
# And it will use the core instance running under http://localhost:8123 as a backend.
|
|
# Note that from a devcontainer, the frontend will be accessible under port 8124 on the host container.
|
|
# Inside the devcontainer it will be accessible under port 8123 instead.
|
|
# The core instance endpoint remains the same in both cases, as this is resolved from the browser.
|
|
#
|
|
# You can change the core instance the frontend connects to by passing the -c option.
|
|
# For example: script/develop_and_serve -c https://myhost.duckdns.org:8123
|
|
# This will also work for existing production core instances.
|
|
# It does not need to be a development version hosted locally.
|
|
#
|
|
# You can change the port the frontend is served on by passing the -p option.
|
|
# For example: script/develop_and_serve -p 8654
|
|
# Note that if you are running from a devcontainer, you will need to setup
|
|
# port forwarding as well if you want to access it from the container host.
|
|
|
|
# Stop on errors
|
|
set -e
|
|
|
|
cd "$(dirname "$0")/.."
|
|
|
|
# parse input parameters
|
|
if [ -n "$DEVCONTAINER" ]; then
|
|
frontendPort=8123
|
|
else
|
|
frontendPort=8124
|
|
fi
|
|
|
|
coreUrl=http://localhost:8123
|
|
|
|
while getopts p:c:h flag
|
|
do
|
|
case "${flag}" in
|
|
p) frontendPort=${OPTARG};;
|
|
c) coreUrl="${OPTARG}";;
|
|
h) echo Documentation can be found inside "$0" && exit 0;;
|
|
*) echo Documentation can be found inside "$0" && exit 1;;
|
|
esac
|
|
done
|
|
|
|
# display used settings
|
|
if [ -n "$DEVCONTAINER" ]; then
|
|
echo Frontend is available inside container as http://localhost:${frontendPort}
|
|
if [ 8123 -eq $frontendPort ]; then
|
|
echo Frontend is available on container host as http://localhost:8124
|
|
fi
|
|
else
|
|
echo Frontend is hosted on http://localhost:${frontendPort}
|
|
fi
|
|
echo Core is used from ${coreUrl}
|
|
|
|
# build the frontend so it connects to the passed core
|
|
HASS_URL="$coreUrl" ./node_modules/.bin/gulp develop-app &
|
|
develop_pid=$!
|
|
|
|
# serve the frontend
|
|
./node_modules/.bin/serve -p $frontendPort --single --no-port-switching --config ../script/serve-config.json ./hass_frontend &
|
|
serve_pid=$!
|
|
|
|
stop_children() {
|
|
trap - EXIT INT TERM HUP
|
|
kill "$develop_pid" "$serve_pid" 2>/dev/null || true
|
|
wait "$develop_pid" 2>/dev/null || true
|
|
wait "$serve_pid" 2>/dev/null || true
|
|
}
|
|
|
|
trap stop_children EXIT
|
|
trap 'stop_children; exit 130' INT
|
|
trap 'stop_children; exit 143' TERM
|
|
trap 'stop_children; exit 129' HUP
|
|
|
|
while kill -0 "$develop_pid" 2>/dev/null && kill -0 "$serve_pid" 2>/dev/null; do
|
|
sleep 1
|
|
done
|
|
|
|
develop_status=
|
|
serve_status=
|
|
if ! kill -0 "$develop_pid" 2>/dev/null; then
|
|
if wait "$develop_pid"; then develop_status=0; else develop_status=$?; fi
|
|
fi
|
|
if ! kill -0 "$serve_pid" 2>/dev/null; then
|
|
if wait "$serve_pid"; then serve_status=0; else serve_status=$?; fi
|
|
fi
|
|
|
|
if [ -n "$develop_status" ] && [ "$develop_status" -ne 0 ]; then
|
|
status=$develop_status
|
|
elif [ -n "$serve_status" ]; then
|
|
status=$serve_status
|
|
else
|
|
status=$develop_status
|
|
fi
|
|
|
|
exit "$status"
|