Skip to content

Commit 4a7001f

Browse files
committed
use secret
1 parent a6e4951 commit 4a7001f

3 files changed

Lines changed: 87 additions & 24 deletions

File tree

.github/workflows/cf.yml

Lines changed: 85 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,6 @@ name: Deploy to Cloudflare Workers
33
on:
44
workflow_dispatch:
55

6-
push:
7-
branches:
8-
- main
9-
106
jobs:
117
deploy:
128
runs-on: ubuntu-latest
@@ -17,19 +13,93 @@ jobs:
1713
run: |
1814
npm install -g wrangler
1915
npx wrangler telemetry disable
20-
2116
- name: Update environments
17+
env:
18+
CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }}
2219
run: |
23-
echo "检查配置情况..."
24-
if grep -q "PASSWORD =" wrangler.toml; then
25-
echo "⚠️ 检测到 wrangler.toml 中存在硬编码的 PASSWORD, 将从wrangler.toml中移除硬编码"
26-
sed -i '/PASSWORD =/d' wrangler.toml
27-
fi
28-
29-
if grep -q "PREFIX =" wrangler.toml; then
30-
echo "⚠️ 检测到wrangler.toml中存在硬编码的 PREFIX, 将从wrangler.toml中移除硬编码"
31-
sed -i '/PREFIX =/d' wrangler.toml
32-
fi
20+
# 定义需要检查的密钥列表
21+
SECRET_NAMES=("PASSWORD" "PREFIX")
22+
23+
# 检查Worker中是否存在指定的secret变量
24+
set +e
25+
SECRET_LIST_OUTPUT=$(npx wrangler secret list 2>&1)
26+
set -e
27+
28+
# 遍历检查每个密钥
29+
for SECRET_NAME in "${SECRET_NAMES[@]}"; do
30+
if echo "$SECRET_LIST_OUTPUT" | grep -q "$SECRET_NAME"; then
31+
echo "✅ Worker中已存在${SECRET_NAME}(作为secret变量)"
32+
declare "WORKER_HAS_${SECRET_NAME}"=true
33+
else
34+
echo "⚠️ Worker中未检测到${SECRET_NAME}(作为secret变量)"
35+
declare "WORKER_HAS_${SECRET_NAME}"=false
36+
fi
37+
done
38+
39+
# 处理每个密钥
40+
for SECRET_NAME in "${SECRET_NAMES[@]}"; do
41+
# 动态获取变量名
42+
HAS_SECRET_VAR="WORKER_HAS_${SECRET_NAME}"
43+
WORKER_HAS_SECRET="${!HAS_SECRET_VAR}"
44+
45+
echo "--- 处理 ${SECRET_NAME} ---"
46+
47+
# 如果Worker中已有密钥,则跳过创建
48+
if [[ "$WORKER_HAS_SECRET" == "true" ]]; then
49+
echo "✅ Worker中已存在${SECRET_NAME}(作为secret变量),跳过创建步骤"
50+
else
51+
52+
if [[ "$SECRET_NAME" == "PASSWORD" ]]; then
53+
if [[ -n "${{ secrets.PASSWORD }}" ]]; then
54+
echo "使用GitHub中配置的PASSWORD值"
55+
SECRET_VALUE="${{ secrets.PASSWORD }}"
56+
else
57+
echo "❌ 未找到GitHub中配置的${SECRET_NAME}值"
58+
exit 1
59+
fi
60+
elif [[ "$SECRET_NAME" == "PREFIX" ]]; then
61+
if [[ -n "${{ secrets.PREFIX }}" ]]; then
62+
echo "使用GitHub中配置的PREFIX值"
63+
SECRET_VALUE="${{ secrets.PREFIX }}"
64+
else
65+
echo "❌ 未找到GitHub中配置的${SECRET_NAME}值"
66+
exit 1
67+
fi
68+
fi
69+
70+
set +e
71+
echo "正在设置${SECRET_NAME}..."
72+
SECRET_PUT_OUTPUT=$(echo "$SECRET_VALUE" | npx wrangler secret put "$SECRET_NAME" 2>&1)
73+
SECRET_RESULT=$?
74+
set -e
75+
76+
echo "Secret put 输出:"
77+
echo "$SECRET_PUT_OUTPUT" | grep -v "Please update to the latest version"
78+
79+
if [ $SECRET_RESULT -ne 0 ]; then
80+
# 如果错误是由于密钥已存在导致的,视为成功
81+
if echo "$SECRET_PUT_OUTPUT" | grep -q -E "(already in use|already exists|conflict)"; then
82+
echo "⚠️ ${SECRET_NAME}已存在于Worker中但未被列表命令检测到,继续执行"
83+
else
84+
# 最后再检查一次是否因为密钥已存在但未被正确检测
85+
set +e
86+
FINAL_CHECK=$(npx wrangler secret list 2>&1)
87+
set -e
88+
89+
if echo "$FINAL_CHECK" | grep -q "$SECRET_NAME"; then
90+
echo "虽然设置${SECRET_NAME}失败,但密钥似乎已存在于Worker中,继续执行"
91+
else
92+
echo "❌ 设置${SECRET_NAME}失败,且密钥确实不存在,退出部署"
93+
echo "详细错误信息: $SECRET_PUT_OUTPUT"
94+
exit 1
95+
fi
96+
fi
97+
else
98+
echo "✅ ${SECRET_NAME} 已成功创建(作为secret变量)"
99+
fi
100+
fi
101+
echo "" # 空行分隔不同密钥的处理日志
102+
done
33103
34104
- name: Deploy to Cloudflare Workers
35105
env:
@@ -42,12 +112,6 @@ jobs:
42112
run: |
43113
if [ "${{ job.status }}" == "success" ]; then
44114
echo "🎉 成功部署!"
45-
echo "===================================================="
46-
echo "后续步骤:"
47-
echo "1. 访问 cloudflare.com, 进入 Workers 页面"
48-
echo "2. 设置 worker 环境变量"
49-
echo "3. 创建 PASSWORD 和 PREFIX 环境变量并重新部署, 如已存在则忽略此步骤"
50-
echo "===================================================="
51115
else
52116
echo "❌ 部署失败!"
53117
fi

.github/workflows/ci.yml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ name: Test
22

33
on:
44
pull_request:
5-
branches: ['main']
65

76
jobs:
87
build:

src/proxy/mod.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ static PREFIXTJ: OnceCell<String> = OnceCell::const_new();
1818

1919
async fn get_prefix_trojan(cx: &RouteContext<()>) -> String {
2020
let pre = cx.env
21-
.var("PREFIX")
21+
.secret("PREFIX")
2222
.map_or("/tj".to_string(), |x| x.to_string());
2323
if ! pre.starts_with("/") {
2424
return format!("/{}", pre);
@@ -32,7 +32,7 @@ async fn get_regex() -> Regex {
3232

3333
async fn get_expected_hash(cx: &RouteContext<()>) -> Vec<u8> {
3434
let pw = cx.env
35-
.var("PASSWORD")
35+
.secret("PASSWORD")
3636
.map_or("password".to_string(), |x| x.to_string());
3737
Sha224::digest(pw.as_bytes())
3838
.iter()

0 commit comments

Comments
 (0)