4in1_ws_web/deploy/static_incremental.sh
2025-05-18 00:33:25 +03:00

85 lines
2.7 KiB
Bash
Executable File

#!/bin/sh
die() {
>&2 echo "error: $*"
exit 1
}
set -e
PHP="$(which php)"
SCRIPT_DIR=$(cd "$(dirname "$(readlink -f "$0")")" && pwd)
APP_DIR="$(realpath "$SCRIPT_DIR/../")"
OUTPUT_ROOT_DIR=
PREV_COMMIT=
usage() {
cat <<EOF
usage: $(basename "$0") [OPTIONS]
Options:
-o output directory
-p previous commit hash
-h show this help
EOF
exit 1
}
while [ $# -gt 0 ]; do
case $1 in
-o) OUTPUT_ROOT_DIR="$2"; shift ;;
-p) PREV_COMMIT="$2"; shift ;;
-h) usage ;;
*) die "unexpected argument: $1" ;;
esac
shift
done
[ -z "$OUTPUT_ROOT_DIR" ] && die "you must specify output directory"
# Get current commit hash
CURR_COMMIT=$(git rev-parse HEAD)
# Detect which projects have changed
CHANGED_PROJECTS=$("$SCRIPT_DIR"/util/detect_changes.sh -a "$APP_DIR" -p "$PREV_COMMIT" -c "$CURR_COMMIT")
# If no projects have changed, just update the commit hash in config-runtime.php
if [ -z "$CHANGED_PROJECTS" ]; then
echo "No static files have changed, only updating commit hash in config-runtime.php"
$PHP "$SCRIPT_DIR"/util/gen_runtime_config_incremental.php \
--app-root "$OUTPUT_ROOT_DIR" \
--commit-hash "$CURR_COMMIT" \
--config-file "$OUTPUT_ROOT_DIR/config-runtime.php" \
> "$OUTPUT_ROOT_DIR/config-runtime.php.new" || die "gen_runtime_config_incremental failed"
mv "$OUTPUT_ROOT_DIR/config-runtime.php.new" "$OUTPUT_ROOT_DIR/config-runtime.php"
exit 0
fi
echo "Rebuilding static for projects: $CHANGED_PROJECTS"
# Create output directories if they don't exist
for project in $CHANGED_PROJECTS; do
mkdir -p "$OUTPUT_ROOT_DIR/public/$project/dist-css"
mkdir -p "$OUTPUT_ROOT_DIR/public/$project/dist-js"
done
# Build static for changed projects
for project in $CHANGED_PROJECTS; do
echo "Building CSS for $project..."
"$SCRIPT_DIR"/util/build_css.sh -i "$APP_DIR/public/$project/scss" -o "$OUTPUT_ROOT_DIR/public/$project/dist-css" || die "build_css failed for $project"
echo "Building JS for $project..."
"$SCRIPT_DIR"/util/build_js.sh -i "$APP_DIR/public/common/js" -o "$OUTPUT_ROOT_DIR/public/$project/dist-js" || die "build_js failed for $project"
done
# Generate runtime config with integrity hashes
echo "Generating runtime config..."
$PHP "$SCRIPT_DIR"/util/gen_runtime_config_incremental.php \
--app-root "$OUTPUT_ROOT_DIR" \
--commit-hash "$CURR_COMMIT" \
--changed-projects "$CHANGED_PROJECTS" \
--config-file "$OUTPUT_ROOT_DIR/config-runtime.php" \
> "$OUTPUT_ROOT_DIR/config-runtime.php.new" || die "gen_runtime_config_incremental failed"
mv "$OUTPUT_ROOT_DIR/config-runtime.php.new" "$OUTPUT_ROOT_DIR/config-runtime.php"
echo "Static build completed successfully"