From 528ceea75470c5fcf350d4b8f5585201b73c5717 Mon Sep 17 00:00:00 2001 From: kyy Date: Tue, 19 May 2026 17:28:38 +0900 Subject: [PATCH] =?UTF-8?q?=EA=B3=B5=EC=9C=A0=20=EC=9D=98=EC=A1=B4?= =?UTF-8?q?=EC=84=B1=20=EC=84=A4=EC=B9=98=20=EB=9D=BD=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- adminfront/scripts/runtime-mode.sh | 35 +++++++++++++++++++++++++++--- devfront/scripts/runtime-mode.sh | 35 +++++++++++++++++++++++++++--- orgfront/scripts/runtime-mode.sh | 35 +++++++++++++++++++++++++++--- 3 files changed, 96 insertions(+), 9 deletions(-) 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 }