Files
Andrey Antukh 5ef70c7284 ✨ Serialize render-wasm builds per checkout (#11903)
Protect shared setup, compilation, artifact copy, and target cleanup with
one flock lock per checkout. Route watch builds and frontend cleanup
through the protected scripts.

Document the lock contract and normalize the frontend and exporter
build:wasm commands.

Closes #11901

AI-assisted-by: Space Bunny Free
2026-09-25 09:42:27 +02:00

45 lines
987 B
Python
Executable File

#!/usr/bin/env bash
# Usage: ./build [frontend|export] [extra cargo params...]
#
# With no target, builds both. Set BUILD_MODE=release (or NODE_ENV=production)
# for an optimized build. See `_build_env` for what each target changes.
_SCRIPT_DIR=$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)
_RENDER_TARGET=${1:-}
case "$_RENDER_TARGET" in
frontend|export) ;;
"")
# Each target needs its own `_build_env`, so re-enter per target.
for _target in frontend export; do
"$_SCRIPT_DIR/build" "$_target" "$@" || exit $?
done
exit 0
;;
*)
echo "ERROR: unknown render target '$_RENDER_TARGET' (expected 'frontend' or 'export')" >&2
exit 1
;;
esac
set -e
EMSDK_QUIET=1 . /opt/emsdk/emsdk_env.sh
pushd "$_SCRIPT_DIR" > /dev/null
export RENDER_TARGET="$_RENDER_TARGET"
. ./_build_env "$_RENDER_TARGET"
. ./_build_lock
acquire_build_lock
set -x
setup
build
copy_target_artifacts
popd > /dev/null