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

76 lines
1.8 KiB
Bash
Executable File

#!/bin/sh
# This script detects changes in static files after git pull
# It outputs a list of subprojects that need to be rebuilt
set -e
die() {
>&2 echo "error: $*"
exit 1
}
if ! command -v yq >/dev/null 2>&1; then
die "yq is not installed. Please install yq to parse YAML files."
fi
APP_DIR=
PREV_COMMIT=
CURR_COMMIT=
usage() {
cat <<EOF
usage: $(basename "$0") [OPTIONS]
Options:
-a app directory
-p previous commit hash
-c current commit hash
-h show this help
EOF
exit 1
}
while [ $# -gt 0 ]; do
case $1 in
-a) APP_DIR="$2"; shift ;;
-p) PREV_COMMIT="$2"; shift ;;
-c) CURR_COMMIT="$2"; shift ;;
-h) usage ;;
*) die "unexpected argument: $1" ;;
esac
shift
done
[ -z "$APP_DIR" ] && die "app directory not specified"
[ -z "$CURR_COMMIT" ] && die "current commit hash not specified"
SCRIPT_DIR=$(cd "$(dirname "$(readlink -f "$0")")" && pwd)
PROJECTS=$("$SCRIPT_DIR"/get_projects.sh "$APP_DIR/config.yaml")
# If no previous commit is specified, assume all projects need to be rebuilt
if [ -z "$PREV_COMMIT" ]; then
echo "$PROJECTS"
exit 0
fi
# Check if common files have changed
common_changed=$(git diff --name-only "$PREV_COMMIT" "$CURR_COMMIT" -- "$APP_DIR/public/common")
if [ -n "$common_changed" ]; then
# If common files have changed, all projects need to be rebuilt
echo "$PROJECTS"
exit 0
fi
# Check which project-specific files have changed
projects_changed=""
for project in $PROJECTS; do
project_changed=$(git diff --name-only "$PREV_COMMIT" "$CURR_COMMIT" -- "$APP_DIR/public/$project")
if [ -n "$project_changed" ]; then
projects_changed="$projects_changed $project"
fi
done
# Output the list of projects that need to be rebuilt
echo "$projects_changed"