From 7aced2a5e0d5af896f99a02047bd3bc640380fc3 Mon Sep 17 00:00:00 2001 From: Light1YT Date: Tue, 26 May 2026 13:39:01 +0500 Subject: [PATCH] =?UTF-8?q?fix(auth):=20scripts/auth/*.sh=20=E2=80=94=20?= =?UTF-8?q?=D0=BF=D1=80=D0=B0=D0=B2=D0=B8=D0=BB=D1=8C=D0=BD=D1=8B=D0=B9=20?= =?UTF-8?q?SNIPPET=20path?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bug: `dirname` x2 от $0 даёт `/scripts`, не `` → скрипт ищет snippet в `/scripts/caddy/...` (не существует) вместо `/caddy/users.caddy.snippet`. Discovered 2026-05-26 QA RBAC сессия: > grep: /opt/gendesign/scripts/caddy/users.caddy.snippet: No such file > ERROR: cannot find closing brace in /opt/gendesign/scripts/caddy/... Все 3 скрипта (add_user.sh, list_users.sh, remove_user.sh) имели одинаковый баг — теперь все используют explicit REPO_ROOT: ```bash SCRIPT_DIR="$(cd "$(dirname "$(realpath "$0")")" && pwd)" REPO_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)" SNIPPET="$REPO_ROOT/caddy/users.caddy.snippet" ``` Так понятнее (explicit `../..` от script-dir) и устойчиво к любой глубине перемещения файла. PR #426 (2026-05-23) изначально создавал 11 юзеров через add_user.sh — скрипт работал в той worktree-сессии (видимо запускался из dir где realpath давал нужный depth, e.g. через `cd scripts/auth && bash add_user.sh`), но после compaction worktree удалён, реальный run-context утерян. Production runs 2026-05-23 → user1..user10 + admin + kopylov были добавлены. После 2026-05-26 manual workflow (`awk ... > tmp && mv tmp; docker restart caddy`) заменил bash скрипт; теперь скрипт снова работает. Detail: vault [[Bug_AddUser_Sh_Snippet_Path_Fixed]]. Verified locally: `realpath` resolves к `/Users/anton/Птица/gendesign/caddy/users.caddy.snippet` (correct). --- scripts/auth/add_user.sh | 7 ++++++- scripts/auth/list_users.sh | 5 ++++- scripts/auth/remove_user.sh | 5 ++++- 3 files changed, 14 insertions(+), 3 deletions(-) diff --git a/scripts/auth/add_user.sh b/scripts/auth/add_user.sh index e8afa6b6..6232595f 100644 --- a/scripts/auth/add_user.sh +++ b/scripts/auth/add_user.sh @@ -8,7 +8,12 @@ # - НЕ коммитит изменения — это задача разработчика. set -euo pipefail -SNIPPET="$(dirname "$(dirname "$(realpath "$0")")")/caddy/users.caddy.snippet" +# Скрипт лежит в `/scripts/auth/`; snippet — в `/caddy/`. +# Нужно 3× `dirname`: $0 (.../scripts/auth/add_user.sh) → .../scripts/auth → .../scripts → .../. +# Bug fix 2026-05-26 — было 2× dirname (см. [[Bug_AddUser_Sh_Snippet_Path_Fixed]]). +SCRIPT_DIR="$(cd "$(dirname "$(realpath "$0")")" && pwd)" +REPO_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)" +SNIPPET="$REPO_ROOT/caddy/users.caddy.snippet" usage() { echo "Usage: $0 \"\"" >&2 diff --git a/scripts/auth/list_users.sh b/scripts/auth/list_users.sh index 102d9f1b..e8f7a024 100644 --- a/scripts/auth/list_users.sh +++ b/scripts/auth/list_users.sh @@ -3,7 +3,10 @@ # Usage: ./scripts/auth/list_users.sh set -euo pipefail -SNIPPET="$(dirname "$(dirname "$(realpath "$0")")")/caddy/users.caddy.snippet" +# 3× dirname от $0 (.../scripts/auth/list_users.sh) → repo root. Bug fix 2026-05-26. +SCRIPT_DIR="$(cd "$(dirname "$(realpath "$0")")" && pwd)" +REPO_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)" +SNIPPET="$REPO_ROOT/caddy/users.caddy.snippet" if [[ ! -f "$SNIPPET" ]]; then echo "ERROR: snippet not found at $SNIPPET" >&2 diff --git a/scripts/auth/remove_user.sh b/scripts/auth/remove_user.sh index 8787a5aa..37796ee9 100644 --- a/scripts/auth/remove_user.sh +++ b/scripts/auth/remove_user.sh @@ -5,7 +5,10 @@ # НЕ коммитит изменения — это задача разработчика. set -euo pipefail -SNIPPET="$(dirname "$(dirname "$(realpath "$0")")")/caddy/users.caddy.snippet" +# 3× dirname от $0 (.../scripts/auth/remove_user.sh) → repo root. Bug fix 2026-05-26. +SCRIPT_DIR="$(cd "$(dirname "$(realpath "$0")")" && pwd)" +REPO_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)" +SNIPPET="$REPO_ROOT/caddy/users.caddy.snippet" usage() { echo "Usage: $0 " >&2 -- 2.45.3