Commit 970bdee333f4e0a5cc66ecb2f88d4c10ca93f676
1 parent
21e90b62
update plan phase
Showing
2 changed files
with
44 additions
and
6 deletions
skills/plan/downstream-gen/scripts/derive-gitlab.sh
| @@ -52,15 +52,53 @@ update_field() { | @@ -52,15 +52,53 @@ update_field() { | ||
| 52 | return | 52 | return |
| 53 | fi | 53 | fi |
| 54 | local current=${line#${key}=} | 54 | local current=${line#${key}=} |
| 55 | - if [ -z "$current" ] || [ "$current" = "TBD(A5 自动补)" ]; then | 55 | + # 剥外层单/双引号再比较,模板里 TBD(A5 自动补) 因含空格/括号必须加引号才能被 source |
| 56 | + local stripped=$current | ||
| 57 | + case "$stripped" in | ||
| 58 | + \'*\') stripped=${stripped#\'}; stripped=${stripped%\'} ;; | ||
| 59 | + \"*\") stripped=${stripped#\"}; stripped=${stripped%\"} ;; | ||
| 60 | + esac | ||
| 61 | + if [ -z "$stripped" ] || [ "$stripped" = "TBD(A5 自动补)" ]; then | ||
| 56 | sed -i.bak -E "s|^${key}=.*$|${key}=${newval}|" "$ENV_FILE" && rm -f "${ENV_FILE}.bak" | 62 | sed -i.bak -E "s|^${key}=.*$|${key}=${newval}|" "$ENV_FILE" && rm -f "${ENV_FILE}.bak" |
| 57 | - echo " ${key} = ${newval}" | 63 | + echo " ${key} = ${newval} [已派生填入]" |
| 64 | + elif [ "$stripped" = "$newval" ]; then | ||
| 65 | + echo " ${key} = ${newval} [已是派生值,无需更新]" | ||
| 58 | else | 66 | else |
| 59 | - echo " ${key} = (保留用户手填: ${current})" | 67 | + echo " ${key} = ${stripped} [保留用户手填,未覆盖派生值 ${newval}]" |
| 60 | fi | 68 | fi |
| 61 | } | 69 | } |
| 62 | 70 | ||
| 71 | +report_token() { | ||
| 72 | + local key=GITLAB_TOKEN | ||
| 73 | + local line | ||
| 74 | + line=$(grep -E "^${key}=" "$ENV_FILE" | head -1) | ||
| 75 | + if [ -z "$line" ]; then | ||
| 76 | + echo " ${key} = (.env.local 中无此行,跳过)" >&2 | ||
| 77 | + return | ||
| 78 | + fi | ||
| 79 | + local current=${line#${key}=} | ||
| 80 | + local stripped=$current | ||
| 81 | + case "$stripped" in | ||
| 82 | + \'*\') stripped=${stripped#\'}; stripped=${stripped%\'} ;; | ||
| 83 | + \"*\") stripped=${stripped#\"}; stripped=${stripped%\"} ;; | ||
| 84 | + esac | ||
| 85 | + case "$stripped" in | ||
| 86 | + ""|"【人工填写:"*|"TBD"*) | ||
| 87 | + echo " ${key} = ${stripped} [待人工填写:GitLab Profile → Account → Private token]" | ||
| 88 | + ;; | ||
| 89 | + *) | ||
| 90 | + local masked | ||
| 91 | + if [ ${#stripped} -le 8 ]; then | ||
| 92 | + masked=$(printf '%*s' ${#stripped} '' | tr ' ' '*') | ||
| 93 | + else | ||
| 94 | + masked="${stripped:0:4}$(printf '%*s' $((${#stripped}-8)) '' | tr ' ' '*')${stripped: -4}" | ||
| 95 | + fi | ||
| 96 | + echo " ${key} = ${masked} [已填入,长度 ${#stripped}]" | ||
| 97 | + ;; | ||
| 98 | + esac | ||
| 99 | +} | ||
| 100 | + | ||
| 63 | echo "derive-gitlab.sh: 从 origin ($URL) 派生 GitLab 凭据:" | 101 | echo "derive-gitlab.sh: 从 origin ($URL) 派生 GitLab 凭据:" |
| 64 | update_field GITLAB_PROJECT_ID "$PROJECT_ID" | 102 | update_field GITLAB_PROJECT_ID "$PROJECT_ID" |
| 65 | update_field GITLAB_API_URL "$API_URL" | 103 | update_field GITLAB_API_URL "$API_URL" |
| 66 | -echo " GITLAB_TOKEN = (保持占位,请去 GitLab Profile → Account → Private token 手填)" | 104 | +report_token |
skills/plan/skeleton-gen/templates/env-local-template
| @@ -31,6 +31,6 @@ TEST_DB_ALLOWED_HOSTS= | @@ -31,6 +31,6 @@ TEST_DB_ALLOWED_HOSTS= | ||
| 31 | # `PRIVATE-TOKEN` 头。v3 token 是全权限、无细粒度 scope)。**无法派生,必须人工填** | 31 | # `PRIVATE-TOKEN` 头。v3 token 是全权限、无细粒度 scope)。**无法派生,必须人工填** |
| 32 | # - GITLAB_PROJECT_ID:A5 从 origin 远程路径自动派生为 URL-encoded 形式(如 `zhuzc/test` → `zhuzc%2Ftest`); | 32 | # - GITLAB_PROJECT_ID:A5 从 origin 远程路径自动派生为 URL-encoded 形式(如 `zhuzc/test` → `zhuzc%2Ftest`); |
| 33 | # 也可手动改成项目数字 ID(GitLab 项目设置页可见) | 33 | # 也可手动改成项目数字 ID(GitLab 项目设置页可见) |
| 34 | -GITLAB_API_URL=TBD(A5 自动补) | 34 | +GITLAB_API_URL='TBD(A5 自动补)' |
| 35 | GITLAB_TOKEN=【人工填写:GitLab Private Token(Profile → Account → Private token)】 | 35 | GITLAB_TOKEN=【人工填写:GitLab Private Token(Profile → Account → Private token)】 |
| 36 | -GITLAB_PROJECT_ID=TBD(A5 自动补) | 36 | +GITLAB_PROJECT_ID='TBD(A5 自动补)' |