@@ -3,10 +3,6 @@ name: Deploy to Cloudflare Workers
33on :
44 workflow_dispatch :
55
6- push :
7- branches :
8- - main
9-
106jobs :
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
0 commit comments