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 | 52 | return |
| 53 | 53 | fi |
| 54 | 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 | 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 | 66 | else |
| 59 | - echo " ${key} = (保留用户手填: ${current})" | |
| 67 | + echo " ${key} = ${stripped} [保留用户手填,未覆盖派生值 ${newval}]" | |
| 60 | 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 | 101 | echo "derive-gitlab.sh: 从 origin ($URL) 派生 GitLab 凭据:" |
| 64 | 102 | update_field GITLAB_PROJECT_ID "$PROJECT_ID" |
| 65 | 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 | 31 | # `PRIVATE-TOKEN` 头。v3 token 是全权限、无细粒度 scope)。**无法派生,必须人工填** |
| 32 | 32 | # - GITLAB_PROJECT_ID:A5 从 origin 远程路径自动派生为 URL-encoded 形式(如 `zhuzc/test` → `zhuzc%2Ftest`); |
| 33 | 33 | # 也可手动改成项目数字 ID(GitLab 项目设置页可见) |
| 34 | -GITLAB_API_URL=TBD(A5 自动补) | |
| 34 | +GITLAB_API_URL='TBD(A5 自动补)' | |
| 35 | 35 | GITLAB_TOKEN=【人工填写:GitLab Private Token(Profile → Account → Private token)】 |
| 36 | -GITLAB_PROJECT_ID=TBD(A5 自动补) | |
| 36 | +GITLAB_PROJECT_ID='TBD(A5 自动补)' | ... | ... |