From 6f0f4e4cb35a0ae4dfae02ed31b5df7098c5b8bf Mon Sep 17 00:00:00 2001 From: gujiangjiang Date: Wed, 8 Oct 2025 02:16:15 +0800 Subject: [PATCH] =?UTF-8?q?ci:=20=E6=96=B0=E5=A2=9E=E9=80=9A=E8=BF=87=20Gi?= =?UTF-8?q?tHub=20Actions=20=E8=87=AA=E5=8A=A8=E9=83=A8=E7=BD=B2=E5=88=B0?= =?UTF-8?q?=20Cloudflare?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增 `deploy.yml` 工作流,实现推送代码到 `main` 分支后自动触发构建和部署流程。 - 移除 `wrangler.toml` 中的硬编码配置(如 `database_id` 和 `database_name`),改用占位符并通过 GitHub Secrets 进行安全注入,极大地提升了项目的安全性与灵活性。 - 更新了项目 Wiki 部署指南,用全新的自动化流程替代了旧的手动配置和部署步骤,显著降低了新用户的部署门槛。 --- .github/workflows/deploy.yml | 89 ++++++++++++++++++++++++++++++++++++ wrangler.toml | 4 +- 2 files changed, 91 insertions(+), 2 deletions(-) create mode 100644 .github/workflows/deploy.yml diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml new file mode 100644 index 0000000..a6b0805 --- /dev/null +++ b/.github/workflows/deploy.yml @@ -0,0 +1,89 @@ +# 工作流的名称,会显示在 GitHub Actions 页面 +name: Deploy to Cloudflare + +# 'on' 关键字定义了触发此工作流的事件 +on: + # 当有代码推送到 'main' 分支时,自动触发此工作流 + push: + branches: + - main + # 允许你在 GitHub Actions 页面手动点击按钮来触发此工作流 + workflow_dispatch: + +# 'jobs' 关键字定义了工作流中要执行的一系列任务 +jobs: + # 定义一个名为 'deploy' 的任务 + deploy: + # 指定此任务运行在最新版的 Ubuntu 虚拟环境中 + runs-on: ubuntu-latest + # 此任务在 GitHub UI 中显示的名称 + name: Deploy + # 'steps' 关键字定义了任务中要按顺序执行的一系列步骤 + steps: + # 第一步:检出代码 + # 使用官方的 'checkout' action 来获取你的仓库代码 + - name: Checkout + uses: actions/checkout@v4 + + # 第二步:设置 pnpm 包管理器 + # 使用 pnpm 官方的 'action-setup' 来安装和配置 pnpm + - name: Setup pnpm + uses: pnpm/action-setup@v4 + with: + # 指定要使用的 pnpm 版本 + version: 8 + + # 第三步:设置 Node.js 环境 + # 使用官方的 'setup-node' action 来安装指定版本的 Node.js + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + # 指定 Node.js 的版本 + node-version: '20' + # 为 pnpm 配置依赖缓存,以加快后续运行速度 + cache: 'pnpm' + + # 第四步:安装项目依赖 + # 执行 'pnpm install' 命令来安装所有在 'package.json' 和 'pnpm-lock.yaml' 中定义的依赖 + - name: Install dependencies + run: pnpm install + + # 第五步:手动安装 Wrangler + # 由于项目使用 pnpm workspace,我们需要手动安装 wrangler 并使用 '-w' 标志 + # 这可以避免 wrangler-action 自动安装时可能出现的冲突 + - name: Install Wrangler + run: pnpm add wrangler@4 -w + + # 第六步:构建项目 + # 执行在 'package.json' 中定义的 'build' 脚本,通常用于编译前端和后端代码 + - name: Build + run: pnpm run build + + # 第七步:配置 Wrangler 的 toml 文件 + # 这是关键的一步,在部署前动态地将占位符替换为真实的 secrets 值 + - name: Configure Wrangler + run: | + # 使用 sed 命令在 wrangler.toml 文件中查找并替换 D1 数据库 ID 的占位符 + sed -i "s/\${D1_DATABASE_ID}/${D1_DATABASE_ID}/g" wrangler.toml + # 使用 sed 命令在 wrangler.toml 文件中查找并替换 D1 数据库名称的占位符 + sed -i "s/\${D1_DATABASE_NAME}/${D1_DATABASE_NAME}/g" wrangler.toml + env: + # 从 GitHub Secrets 中读取 D1 数据库 ID 和名称,并将其作为环境变量注入到此步骤中 + D1_DATABASE_ID: ${{ secrets.D1_DATABASE_ID }} + D1_DATABASE_NAME: ${{ secrets.D1_DATABASE_NAME }} + + # 第八步:部署到 Cloudflare + # 使用 Cloudflare 官方的 'wrangler-action' 来执行部署 + - name: Deploy to Cloudflare + uses: cloudflare/wrangler-action@v3 + with: + # 传入 API 令牌用于身份验证 + apiToken: ${{ secrets.CF_API_TOKEN }} + # 传入 Cloudflare 账户 ID + accountId: ${{ secrets.CF_ACCOUNT_ID }} + # 明确指定要执行的命令是 'deploy' + command: deploy + env: + # wrangler 命令行工具也会自动读取这些标准的环境变量来进行身份验证 + CLOUDFLARE_ACCOUNT_ID: ${{ secrets.CF_ACCOUNT_ID }} + CLOUDFLARE_API_TOKEN: ${{ secrets.CF_API_TOKEN }} \ No newline at end of file diff --git a/wrangler.toml b/wrangler.toml index 666689e..b7fb849 100644 --- a/wrangler.toml +++ b/wrangler.toml @@ -11,8 +11,8 @@ crons = ["* * * * *"] [[d1_databases]] binding = "DB" -database_name = "xugou_db" -database_id = "32a2ca5f-3a77-4b08-965e-804612557880" +database_name = "${D1_DATABASE_NAME}" # 使用占位符 +database_id = "${D1_DATABASE_ID}" # 使用占位符 [assets] binding = "ASSETS"