From 54466160af5052c8e8f26ce3cae978bd7fa20338 Mon Sep 17 00:00:00 2001 From: shuaiplus <2327005759@qq.com> Date: Fri, 6 Mar 2026 03:06:34 +0800 Subject: [PATCH] feat: update sync workflow and README for KV storage support --- .github/workflows/sync-upstream.yml | 46 +++++++++++++++++++++++++---- README.md | 27 ++++++++--------- wrangler.toml | 2 -- 3 files changed, 54 insertions(+), 21 deletions(-) diff --git a/.github/workflows/sync-upstream.yml b/.github/workflows/sync-upstream.yml index 9db7264..7923b51 100644 --- a/.github/workflows/sync-upstream.yml +++ b/.github/workflows/sync-upstream.yml @@ -4,6 +4,9 @@ on: schedule: - cron: "0 3 * * *" workflow_dispatch: + push: + branches: + - main permissions: contents: write @@ -17,12 +20,45 @@ jobs: with: fetch-depth: 0 - - run: | - git remote add upstream https://github.com/shuaiplus/nodewarden.git || true + - name: Configure git + run: | + git config user.name "github-actions[bot]" + git config user.email "41898282+github-actions[bot]@users.noreply.github.com" + + - name: Sync main from upstream + run: | + git remote add upstream https://github.com/shuaiplus/NodeWarden.git || true git fetch upstream - # 强制让当前分支完全等于 upstream + git checkout main git reset --hard upstream/main - - # 强制推送 git push origin main --force + + - name: Rebuild kv from main + run: | + git fetch origin main kv || true + git checkout -B kv origin/main + + python - <<'PY' +from pathlib import Path + +path = Path("wrangler.toml") +text = path.read_text(encoding="utf-8") +old = """[[r2_buckets]] +binding = "ATTACHMENTS" +bucket_name = "nodewarden-attachments" +""" +new = """[[kv_namespaces]] +binding = "ATTACHMENTS_KV" +id = "REPLACE_WITH_KV_NAMESPACE_ID" +""" + +if old not in text: + raise SystemExit("Expected R2 block not found in wrangler.toml") + +path.write_text(text.replace(old, new, 1), encoding="utf-8") +PY + + git add wrangler.toml + git commit -m "chore(kv): sync from main" || echo "No changes" + git push origin kv --force diff --git a/README.md b/README.md index f5d8a63..ef476d1 100644 --- a/README.md +++ b/README.md @@ -8,8 +8,6 @@ [![Powered by Cloudflare](https://img.shields.io/badge/Powered%20by-Cloudflare-F38020?logo=cloudflare&logoColor=white)](https://workers.cloudflare.com/) [![License: LGPL-3.0](https://img.shields.io/badge/License-LGPL--3.0-2ea44f)](./LICENSE) -[![Deploy (R2)](https://img.shields.io/badge/Deploy%20(R2)-Cloudflare%20Workers-F38020?logo=cloudflare&logoColor=white)](https://deploy.workers.cloudflare.com/?url=https://github.com/shuaiplus/NodeWarden) -[![Deploy (KV)](https://img.shields.io/badge/Deploy%20(KV)-Cloudflare%20Workers-2ea44f?logo=cloudflare&logoColor=white)](./README_EN.md#kv-mode-no-credit-card) [![Latest Release](https://img.shields.io/github/v/release/shuaiplus/NodeWarden?display_name=tag)](https://github.com/shuaiplus/NodeWarden/releases/latest) [![Sync Upstream](https://github.com/shuaiplus/NodeWarden/actions/workflows/sync-upstream.yml/badge.svg)](https://github.com/shuaiplus/NodeWarden/actions/workflows/sync-upstream.yml) @@ -30,11 +28,11 @@ English:[`README_EN.md`](./README_EN.md) | Web Vault(登录/笔记/卡片/身份) | ✅ | ✅ | 网页端密码库管理页面 | | 文件夹 / 收藏 | ✅ | ✅ | 常用管理能力可用 | | 全量同步 `/api/sync` | ✅ | ✅ | 已做兼容与性能优化 | -| 附件上传/下载 | ✅ | ✅ | 基于 Cloudflare R2(或可选 KV 模式) | +| 附件上传/下载 | ✅ | ✅ | Cloudflare R2 和 KV 二选一 | | 导入导出功能 | ✅ | ✅ | 完整实现,含 Bitwarden 密码库+附件 ZIP 导入 | | 网站图标代理 | ✅ | ✅ | 通过 `/icons/{hostname}/icon.png` | -| passkey、TOTP字段 | ❌ | ✅ |官方需要会员,我们的不需要 | -| Send | ✅ | ✅ | 已支持文本 Send 与文件 Send | +| passkey、TOTP字段 | ✅ | ✅ |完全支持,无需高级版 | +| Send | ✅ | ✅ | Cloudflare R2 和 KV 二选一 | | 多用户 | ✅ | ✅ | 完整的用户管理,邀请机制 | | 组织/集合/成员权限 | ✅ | ❌ | 没必要实现 | | 登录 2FA(TOTP/WebAuthn/Duo/Email) | ✅ | ⚠️ 部分支持 | 仅支持用户级 TOTP | @@ -59,18 +57,18 @@ English:[`README_EN.md`](./README_EN.md) **部署步骤:** 1. 首先Fork本仓库,命名为**NodeWarden** -2. 点击下面的一键部署按钮,修改项目名称为**NodeWarden2**,修改**JWT_SECRET**成32为随机字符串; -**若无信用卡,储存库可选KV模式**,一键部署页面里部署命令改成:npm run deploy:kv - - [![Deploy to Cloudflare Workers](https://deploy.workers.cloudflare.com/button)](https://deploy.workers.cloudflare.com/?url=https://github.com/shuaiplus/nodewarden) +2. 根据对储存库的需求,**二选一**点击下面的按钮,修改项目名称为**NodeWarden2**,修改**JWT_SECRET**成32为随机字符串; + - **R2**:需绑定银行卡;**单个附件/Send上限 100MB**(代码限制,可自行修改);**总量 10GB 免费** + + [![Deploy (R2)](https://img.shields.io/badge/Deploy%20(R2)-Cloudflare%20Workers-F38020?logo=cloudflare&logoColor=white)](https://deploy.workers.cloudflare.com/?url=https://github.com/shuaiplus/NodeWarden) + + - **KV**:无需绑卡;**单个附件/Send 文件上限 25 MiB**(cloudflare限制,不可修改);**总量 1GB 免费** + [![Deploy (KV)](https://img.shields.io/badge/Deploy%20(KV)-Cloudflare%20Workers-2ea44f?logo=cloudflare&logoColor=white)](https://deploy.workers.cloudflare.com/?url=https://github.com/shuaiplus/NodeWarden/tree/kv) 3. 部署完成后,同一页面打开workers设置,将**Git存储库**断开连接 -4. 同一位置,**Git存储库**链接至第一步Fork的仓库 +4. 同一位置,**Git存储库**链接至第一步Fork的仓库(仓库名NodeWarden),**R2选择main分支,KV选择kv分支**(必须选对!!!) +5. 仓库**NodeWarden2**可以删除 -> [!NOTE] -> R2 vs KV ->- R2:需绑定银行卡;**单个附件/Send上限 100MB**(代码限制,可自行修改);**总量 10GB 免费** ->- KV:无需绑卡;**单个附件/Send 文件上限 25 MiB**(cloudflare限制,不可修改);**总量 1GB 免费** > [!TIP] @@ -78,6 +76,7 @@ English:[`README_EN.md`](./README_EN.md) >- 手动:Github打开你Fork的私人仓库,看到顶部同步提示时,点击 “Sync fork”。 >- 自动:进入你的 Fork 仓库 → Actions,点击 “I understand my workflows, go ahead and enable them”,每天凌晨三点自动同步至上游 + ### CLI 部署 ```powershell diff --git a/wrangler.toml b/wrangler.toml index 080989c..57753f9 100644 --- a/wrangler.toml +++ b/wrangler.toml @@ -6,12 +6,10 @@ assets = { directory = "./dist", not_found_handling = "single-page-application", [build] command = "npm run build" -# D1 Database for storing vault data [[d1_databases]] binding = "DB" database_name = "nodewarden-db" -# R2 Bucket for storing attachments [[r2_buckets]] binding = "ATTACHMENTS" bucket_name = "nodewarden-attachments"