diff --git a/adminfront/scripts/runtime-mode.sh b/adminfront/scripts/runtime-mode.sh index fd466e85..096161ae 100644 --- a/adminfront/scripts/runtime-mode.sh +++ b/adminfront/scripts/runtime-mode.sh @@ -51,19 +51,37 @@ ensure_frontend_dependencies() { return 0 fi - acquire_install_lock() { - lock_file="$WORKSPACE_DIR/.baron-deps-install.lock" + lock_mode="" + lock_file="$WORKSPACE_DIR/.baron-deps-install.lock" + acquire_install_lock() { if command -v flock >/dev/null 2>&1; then + lock_mode="flock" exec 9>"$lock_file" flock 9 + trap 'release_install_lock' EXIT INT TERM return 0 fi + lock_mode="mkdir" while ! mkdir "$lock_file" 2>/dev/null; do sleep 1 done - trap 'rmdir "$lock_file" >/dev/null 2>&1 || true' EXIT INT TERM + trap 'release_install_lock' EXIT INT TERM + } + + release_install_lock() { + trap - EXIT INT TERM + + if [ "$lock_mode" = "flock" ]; then + flock -u 9 || true + exec 9>&- + return 0 + fi + + if [ "$lock_mode" = "mkdir" ]; then + rmdir "$lock_file" >/dev/null 2>&1 || true + fi } if command -v sha256sum >/dev/null 2>&1; then @@ -77,6 +95,16 @@ ensure_frontend_dependencies() { if [ "$installed_hash" != "$deps_hash" ]; then echo "Installing frontend dependencies..." acquire_install_lock + if command -v sha256sum >/dev/null 2>&1; then + deps_hash="$(sha256sum "$WORKSPACE_DIR/package.json" "$LOCK_FILE" 2>/dev/null | sha256sum | awk '{print $1}')" + else + deps_hash="$(cksum "$WORKSPACE_DIR/package.json" "$LOCK_FILE" 2>/dev/null | cksum | awk '{print $1}')" + fi + installed_hash="$(cat "$deps_stamp" 2>/dev/null || true)" + if [ "$installed_hash" = "$deps_hash" ]; then + release_install_lock + return 0 + fi if [ "$WORKSPACE_DIR" = "/workspace/common" ]; then (cd /workspace/common && pnpm install --filter "${APP_WORKSPACE_FILTER}..." --frozen-lockfile --ignore-scripts) else @@ -84,6 +112,7 @@ ensure_frontend_dependencies() { fi mkdir -p node_modules printf '%s\n' "$deps_hash" > "$deps_stamp" + release_install_lock fi } diff --git a/devfront/scripts/runtime-mode.sh b/devfront/scripts/runtime-mode.sh index 1582472c..8b69817a 100644 --- a/devfront/scripts/runtime-mode.sh +++ b/devfront/scripts/runtime-mode.sh @@ -51,19 +51,37 @@ ensure_frontend_dependencies() { return 0 fi - acquire_install_lock() { - lock_file="$WORKSPACE_DIR/.baron-deps-install.lock" + lock_mode="" + lock_file="$WORKSPACE_DIR/.baron-deps-install.lock" + acquire_install_lock() { if command -v flock >/dev/null 2>&1; then + lock_mode="flock" exec 9>"$lock_file" flock 9 + trap 'release_install_lock' EXIT INT TERM return 0 fi + lock_mode="mkdir" while ! mkdir "$lock_file" 2>/dev/null; do sleep 1 done - trap 'rmdir "$lock_file" >/dev/null 2>&1 || true' EXIT INT TERM + trap 'release_install_lock' EXIT INT TERM + } + + release_install_lock() { + trap - EXIT INT TERM + + if [ "$lock_mode" = "flock" ]; then + flock -u 9 || true + exec 9>&- + return 0 + fi + + if [ "$lock_mode" = "mkdir" ]; then + rmdir "$lock_file" >/dev/null 2>&1 || true + fi } if command -v sha256sum >/dev/null 2>&1; then @@ -77,6 +95,16 @@ ensure_frontend_dependencies() { if [ "$installed_hash" != "$deps_hash" ]; then echo "Installing frontend dependencies..." acquire_install_lock + if command -v sha256sum >/dev/null 2>&1; then + deps_hash="$(sha256sum "$WORKSPACE_DIR/package.json" "$LOCK_FILE" 2>/dev/null | sha256sum | awk '{print $1}')" + else + deps_hash="$(cksum "$WORKSPACE_DIR/package.json" "$LOCK_FILE" 2>/dev/null | cksum | awk '{print $1}')" + fi + installed_hash="$(cat "$deps_stamp" 2>/dev/null || true)" + if [ "$installed_hash" = "$deps_hash" ]; then + release_install_lock + return 0 + fi if [ "$WORKSPACE_DIR" = "/workspace/common" ]; then (cd /workspace/common && pnpm install --filter "${APP_WORKSPACE_FILTER}..." --frozen-lockfile --ignore-scripts) else @@ -84,6 +112,7 @@ ensure_frontend_dependencies() { fi mkdir -p node_modules printf '%s\n' "$deps_hash" > "$deps_stamp" + release_install_lock fi } diff --git a/orgfront/scripts/runtime-mode.sh b/orgfront/scripts/runtime-mode.sh index 2407c4af..392972e4 100644 --- a/orgfront/scripts/runtime-mode.sh +++ b/orgfront/scripts/runtime-mode.sh @@ -51,19 +51,37 @@ ensure_frontend_dependencies() { return 0 fi - acquire_install_lock() { - lock_file="$WORKSPACE_DIR/.baron-deps-install.lock" + lock_mode="" + lock_file="$WORKSPACE_DIR/.baron-deps-install.lock" + acquire_install_lock() { if command -v flock >/dev/null 2>&1; then + lock_mode="flock" exec 9>"$lock_file" flock 9 + trap 'release_install_lock' EXIT INT TERM return 0 fi + lock_mode="mkdir" while ! mkdir "$lock_file" 2>/dev/null; do sleep 1 done - trap 'rmdir "$lock_file" >/dev/null 2>&1 || true' EXIT INT TERM + trap 'release_install_lock' EXIT INT TERM + } + + release_install_lock() { + trap - EXIT INT TERM + + if [ "$lock_mode" = "flock" ]; then + flock -u 9 || true + exec 9>&- + return 0 + fi + + if [ "$lock_mode" = "mkdir" ]; then + rmdir "$lock_file" >/dev/null 2>&1 || true + fi } if command -v sha256sum >/dev/null 2>&1; then @@ -77,6 +95,16 @@ ensure_frontend_dependencies() { if [ "$installed_hash" != "$deps_hash" ]; then echo "Installing frontend dependencies..." acquire_install_lock + if command -v sha256sum >/dev/null 2>&1; then + deps_hash="$(sha256sum "$WORKSPACE_DIR/package.json" "$LOCK_FILE" 2>/dev/null | sha256sum | awk '{print $1}')" + else + deps_hash="$(cksum "$WORKSPACE_DIR/package.json" "$LOCK_FILE" 2>/dev/null | cksum | awk '{print $1}')" + fi + installed_hash="$(cat "$deps_stamp" 2>/dev/null || true)" + if [ "$installed_hash" = "$deps_hash" ]; then + release_install_lock + return 0 + fi if [ "$WORKSPACE_DIR" = "/workspace/common" ]; then (cd /workspace/common && pnpm install --filter "${APP_WORKSPACE_FILTER}..." --frozen-lockfile --ignore-scripts) else @@ -84,6 +112,7 @@ ensure_frontend_dependencies() { fi mkdir -p node_modules printf '%s\n' "$deps_hash" > "$deps_stamp" + release_install_lock fi }