diff --git a/.github/config/mail-parser-wasm-worker.patch b/.github/config/mail-parser-wasm-worker.patch new file mode 100644 index 00000000..b8b63a6b --- /dev/null +++ b/.github/config/mail-parser-wasm-worker.patch @@ -0,0 +1,42 @@ +diff --git a/worker/src/common.ts b/worker/src/common.ts +index 8b63e8f..6a7c844 100644 +--- a/worker/src/common.ts ++++ b/worker/src/common.ts +@@ -273,22 +273,22 @@ export const commonParseMail = async (parsedEmailContext: ParsedEmailContext): P + } + const raw_mail = parsedEmailContext.rawEmail; + // TODO: WASM parse email +- // try { +- // const { parse_message_wrapper } = await import('mail-parser-wasm-worker'); ++ try { ++ const { parse_message_wrapper } = await import('mail-parser-wasm-worker'); + +- // const parsedEmail = parse_message_wrapper(raw_mail); +- // return { +- // sender: parsedEmail.sender || "", +- // subject: parsedEmail.subject || "", +- // text: parsedEmail.text || "", +- // headers: parsedEmail.headers?.map( +- // (header) => ({ key: header.key, value: header.value }) +- // ) || [], +- // html: parsedEmail.body_html || "", +- // }; +- // } catch (e) { +- // console.error("Failed use mail-parser-wasm-worker to parse email", e); +- // } ++ const parsedEmail = parse_message_wrapper(raw_mail); ++ return { ++ sender: parsedEmail.sender || "", ++ subject: parsedEmail.subject || "", ++ text: parsedEmail.text || "", ++ headers: parsedEmail.headers?.map( ++ (header) => ({ key: header.key, value: header.value }) ++ ) || [], ++ html: parsedEmail.body_html || "", ++ }; ++ } catch (e) { ++ console.error("Failed use mail-parser-wasm-worker to parse email", e); ++ } + try { + const { default: PostalMime } = await import('postal-mime'); + const parsedEmail = await PostalMime.parse(raw_mail); diff --git a/.github/workflows/backend_deploy.yaml b/.github/workflows/backend_deploy.yaml index 3f524a9c..749d760a 100644 --- a/.github/workflows/backend_deploy.yaml +++ b/.github/workflows/backend_deploy.yaml @@ -1,4 +1,4 @@ -name: Deploy Backend Production +name: Deploy Backend on: workflow_run: @@ -32,14 +32,28 @@ jobs: - name: Deploy Backend for ${{ github.ref_name }} run: | + export debug_mode=${{ secrets.DEBUG_MODE }} + export use_mail_wasm_parser=${{ secrets.BACKEND_USE_MAIL_WASM_PARSER }} cd worker/ echo '${{ secrets.BACKEND_TOML }}' > wrangler.toml pnpm install --no-frozen-lockfile - output=$(pnpm run deploy 2>&1) - if [ $? -ne 0 ]; then - code=$? - echo "Command failed with exit code $code" - exit $code + + if [ -n "$use_mail_wasm_parser" ]; then + echo "Using mail-parser-wasm-worker" + pnpm add mail-parser-wasm-worker + git apply ../.github/config/mail-parser-wasm-worker.patch + echo "Applied mail-parser-wasm-worker patch" + fi + + if [ -n "$debug_mode" ]; then + pnpm run deploy + else + output=$(pnpm run deploy 2>&1) + if [ $? -ne 0 ]; then + code=$? + echo "Command failed with exit code $code" + exit $code + fi fi echo "Deployed for tag ${{ github.ref_name }}" env: diff --git a/CHANGELOG.md b/CHANGELOG.md index 9bdb25b9..5555c588 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ - feat: |UI| 自动刷新配置保存到浏览器,可配置刷新间隔 - feat: 垃圾邮件检测增加存在是才检查的列表 `JUNK_MAIL_CHECK_LIST` 配置 - feat: | Worker | 增加 `ParsedEmailContext` 类用于缓存解析后的邮件内容,减少解析次数 +- feat: |Github Action| Worker 部署增加 `DEBUG_MODE` 输出日志, `BACKEND_USE_MAIL_WASM_PARSER` 配置是否使用 wasm 解析邮件 ## v0.8.3 diff --git a/vitepress-docs/docs/zh/guide/feature/telegram.md b/vitepress-docs/docs/zh/guide/feature/telegram.md index 1db5b8c4..b1824a0d 100644 --- a/vitepress-docs/docs/zh/guide/feature/telegram.md +++ b/vitepress-docs/docs/zh/guide/feature/telegram.md @@ -8,6 +8,8 @@ worker 默认的 `worker.dev` 域名的证书是不被 telegram 支持的,配 > 如果要使用 Telegram Bot, 请先绑定 `KV` > > 如果不需要 Telegram Bot, 可跳过此步骤 +> +> 如果你想 Telegram 的解析邮件能力更强,参考 [配置 worker 使用 wasm 解析邮件](/zh/guide/feature/mail_parser_wasm_worker) ## Telegram Bot 配置 diff --git a/vitepress-docs/docs/zh/guide/github-action.md b/vitepress-docs/docs/zh/guide/github-action.md index 9976e081..32e8463c 100644 --- a/vitepress-docs/docs/zh/guide/github-action.md +++ b/vitepress-docs/docs/zh/guide/github-action.md @@ -23,6 +23,8 @@ - `FRONTEND_NAME`: 你在 Cloudflare Pages 创建的项目名称,可通过 [用户界面](https://temp-mail-docs.awsl.uk/zh/guide/ui/pages.html) 或者 [命令行](https://temp-mail-docs.awsl.uk/zh/guide/cli/pages.html) 创建 - `FRONTEND_BRANCH`: (可选) pages 部署的分支,可不配置,默认 `production` - `TG_FRONTEND_NAME`: (可选) 你在 Cloudflare Pages 创建的项目名称,同 `FRONTEND_NAME`,如果需要 Telegram Mini App 功能,请填写 + - `DEBUG_MODE`: (可选) 是否开启调试模式,配置为 `true` 开启, 默认 worker 部署日志不会输出到 Github Actions 页面,开启后会输出 + - `BACKEND_USE_MAIL_WASM_PARSER`: (可选) 是否使用 wasm 解析邮件,配置为 `true` 开启, 功能参考 [配置 worker 使用 wasm 解析邮件](/zh/guide/feature/mail_parser_wasm_worker) 4. 打开仓库的 `Actions` 页面,找到 `Deploy Backend Production` 和 `Deploy Frontend`,点击 `Run workflow` 选择分支手动部署 diff --git a/worker/src/common.ts b/worker/src/common.ts index 8b63e8fc..f2342f9c 100644 --- a/worker/src/common.ts +++ b/worker/src/common.ts @@ -429,7 +429,6 @@ export async function triggerAnotherWorker( const anotherWorkerList: AnotherWorker[] = getAnotherWorkerList(c); if (!getBooleanValue(c.env.ENABLE_ANOTHER_WORKER) || anotherWorkerList.length === 0) { - console.log(`another worker disabled or anotherWorkerList is empty`); return; }