diff --git a/.github/workflows/deploy-cloudflare.yml b/.github/workflows/deploy-cloudflare.yml index 0516b63..099ee7d 100644 --- a/.github/workflows/deploy-cloudflare.yml +++ b/.github/workflows/deploy-cloudflare.yml @@ -64,15 +64,34 @@ jobs: echo "🔐 Starting environment setup..." if [ -z "$JWT_SECRET" ] || grep -q '[?%#/\\]' <<< "$JWT_SECRET"; then - echo "❌ JWT_SECRET is empty or contains invalid characters (?, %, #, /, \\)" + echo "❌ JWT_SECRET variable is empty or contains invalid characters (?, %, #, /, \\)." exit 1 fi if ! jq -e 'type == "array"' <<< "$DOMAIN" ; then - echo "❌ DOMAIN must be a JSON array ([])." + echo "❌ DOMAIN variable must be a JSON array (e.g., [\"example.com\"])." exit 1 fi + if [ -z "$ADMIN" ]; then + echo "❌ ADMIN variable cannot be empty." + exit 1 + fi + + if [ -z "$CLOUDFLARE_ACCOUNT_ID" ]; then + echo "❌ CLOUDFLARE_ACCOUNT_ID variable cannot be empty." + exit 1 + fi + + if [ -z "$CLOUDFLARE_API_TOKEN" ]; then + echo "❌ CLOUDFLARE_API_TOKEN variable cannot be empty." + exit 1 + fi + + if [ -z "$CUSTOM_DOMAIN" ]; then + echo "::error:: CUSTOM_DOMAIN variable is not set." + fi + CONFIG_FILE="wrangler-action.toml" if [ -z "$R2_BUCKET_NAME" ]; then @@ -165,7 +184,11 @@ jobs: echo "🚀 Starting deployment..." pnpm wrangler deploy -c wrangler-action.toml | tee deploy.log | grep -v "https://.*\.workers\.dev" || true WORKER_URL=$(grep -o "https://.*\.workers\.dev" deploy.log || echo "") - echo "::add-mask::$WORKER_URL" + + if [ -n "$WORKER_URL" ]; then + echo "::add-mask::$WORKER_URL" + fi + echo "worker_url=$WORKER_URL" >> $GITHUB_OUTPUT echo "✅ Setup completed." @@ -174,10 +197,11 @@ jobs: echo "🛠 Starting database initialization..." sleep 15 - WORKER_URL="${CUSTOM_DOMAIN:-${{ steps.deploy.outputs.worker_url }}}" + WORKER_URL="${CUSTOM_DOMAIN:+https://$CUSTOM_DOMAIN}" + WORKER_URL="${WORKER_URL:-${{ steps.deploy.outputs.worker_url }}}" if [ -z "$WORKER_URL" ]; then - echo "❌ No URL available." + echo "❌ Preview URL not available. Please set CUSTOM_DOMAIN." exit 1 fi @@ -196,7 +220,8 @@ jobs: echo "🛠 Starting email receiving setup..." - WORKER_URL="${CUSTOM_DOMAIN:-${{ steps.deploy.outputs.worker_url }}}" + WORKER_URL="${CUSTOM_DOMAIN:+https://$CUSTOM_DOMAIN}" + WORKER_URL="${WORKER_URL:-${{ steps.deploy.outputs.worker_url }}}" HTTP_CODE=$(curl -sL --post301 --post302 --post303 -w "%{http_code}" -o response.txt \ -X POST \ @@ -208,12 +233,15 @@ jobs: if [ "$RESPONSE_BODY" = "success" ]; then echo "✅ Setup completed." - else - echo "::error:: Email receiving setup failed." - echo "HTTP status: $HTTP_CODE. Response:" - echo "$RESPONSE_BODY" | jq . 2>/dev/null || echo "$RESPONSE_BODY" exit 0 fi + + if [ "$HTTP_CODE" = "200" ] && [ "$RESPONSE_BODY" != "success" ]; then + echo "::error:: Email receiving setup failed: $RESPONSE_BODY" + exit 0 + fi + + echo "::error:: Email receiving setup failed: $HTTP_CODE $RESPONSE_BODY" - name: 🗑 删陀运行记圕 / Delete workflow runs uses: GitRML/delete-workflow-runs@main diff --git a/mail-worker/src/hono/hono.js b/mail-worker/src/hono/hono.js index ced0995..910ba2f 100644 --- a/mail-worker/src/hono/hono.js +++ b/mail-worker/src/hono/hono.js @@ -14,15 +14,15 @@ app.onError((err, c) => { } if (err.message === `Cannot read properties of undefined (reading 'get')`) { - return c.json(result.fail('KV数据库未绑定
KV database not bound',502)); + return c.json(result.fail('KV数据库未绑定 KV database not bound',502)); } if (err.message === `Cannot read properties of undefined (reading 'put')`) { - return c.json(result.fail('KV数据库未绑定
KV database not bound',502)); + return c.json(result.fail('KV数据库未绑定 KV database not bound',502)); } if (err.message === `Cannot read properties of undefined (reading 'prepare')`) { - return c.json(result.fail('D1数据库未绑定
D1 database not bound',502)); + return c.json(result.fail('D1数据库未绑定 D1 database not bound',502)); } return c.json(result.fail(err.message, err.code)); diff --git a/mail-worker/src/init/forward.js b/mail-worker/src/init/forward.js index a0cd925..9131991 100644 --- a/mail-worker/src/init/forward.js +++ b/mail-worker/src/init/forward.js @@ -50,7 +50,7 @@ export async function initForward(c, params) { mainList = [...new Set(mainList)]; if (mainList.length === 0) { - return c.text('Domain does not exist.'); + return c.text('DOMAIN does not exist in Cloudflare.'); } //匀启䞻域名电子邮件路由 @@ -62,9 +62,9 @@ export async function initForward(c, params) { }); const body = await res.json(); - + const error = body.errors[0]; if(!res.ok) { - return c.json(body); + return c.text(`${error.code} ${error.message}`); } } @@ -93,9 +93,9 @@ export async function initForward(c, params) { }); const body = await res.json(); - + const error = body.errors[0]; if(!res.ok) { - return c.json(body); + return c.text(`${error.code} ${error.message}`); } } @@ -112,9 +112,9 @@ export async function initForward(c, params) { }); const body = await res.json(); - + const error = body.errors[0]; if(!res.ok) { - return c.json(body); + return c.text(`${error.code} ${error.message}`); } } diff --git a/mail-worker/src/service/setting-service.js b/mail-worker/src/service/setting-service.js index 294b942..17eb282 100644 --- a/mail-worker/src/service/setting-service.js +++ b/mail-worker/src/service/setting-service.js @@ -26,6 +26,10 @@ const settingService = { const setting = await c.env.kv.get(KvConst.SETTING, { type: 'json' }); + if (!setting) { + throw new BizError('数据库未初始化 Database not initialized.'); + } + let domainList = c.env.domain; if (typeof domainList === 'string') {