From 79d73c5889c98e2de2ce3e22a66eb1e7b2bb9547 Mon Sep 17 00:00:00 2001 From: LoveChengke Date: Mon, 5 Oct 2026 20:05:39 +0800 Subject: [PATCH] =?UTF-8?q?chore(release):=20=E7=89=88=E6=9C=AC=E5=8F=B7?= =?UTF-8?q?=E7=BB=9F=E4=B8=80=E5=88=B0=201.1.1=EF=BC=88=E6=9C=8D=E5=8A=A1?= =?UTF-8?q?=E7=AB=AF=20CSP=20=E7=99=BD=E5=B1=8F=E4=BF=AE=E5=A4=8D=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 对齐 1.1.0 的做法把版本号统一:5 份 package.json、deploy/package.runtime.json、 两份 .env.example 的 APP_VERSION、两个 docker-compose 的镜像标签、ClassIsland 插件的 manifest.yml 与 BridgeService.PluginVersion(verify:classisland-plugin 有 manifest↔代码 一致性断言,已跑 68/68)、README 首页版本、以及文档与脚本里的安装包名示例,共 28 处。 刻意不动:docs/linux-deploy.md 排障条目里"1.1.0 的服务端在 HTTP 直连访问时会下发 CSP upgrade-insecure-requests…"——那句说的是**出问题的那个版本**,改成 1.1.1 反而是错的。 --- README.md | 2 +- deploy/.env.example | 2 +- deploy/.env.sqlite.example | 2 +- deploy/docker-compose.sqlite.yml | 2 +- deploy/docker-compose.yml | 2 +- deploy/install.sh | 4 ++-- deploy/package.runtime.json | 2 +- docs/production.md | 20 +++++++++---------- package.json | 2 +- packages/classisland-plugin/manifest.yml | 2 +- .../src/Services/BridgeService.cs | 2 +- packages/desktop-client/package.json | 2 +- packages/server/package.json | 2 +- .../server/scripts/verify-classisland.mjs | 2 +- packages/shared/package.json | 2 +- packages/web-admin/package.json | 2 +- 16 files changed, 26 insertions(+), 26 deletions(-) diff --git a/README.md b/README.md index 144c279..2bdee77 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # 班级小助手(Class Helper) 班级信息管理系统。一个 pnpm monorepo,一份代码产出四个交付物:**后端服务**、**Web 管理端**(教师 / 管理员)、 -**桌面客户端**(学生端 / 教室机器)与 **ClassIsland 联动插件**(装在教室的 ClassIsland 上)。**当前版本 1.1.0**。 +**桌面客户端**(学生端 / 教室机器)与 **ClassIsland 联动插件**(装在教室的 ClassIsland 上)。**当前版本 1.1.1**。 核心链路: diff --git a/deploy/.env.example b/deploy/.env.example index 76011d5..2555820 100644 --- a/deploy/.env.example +++ b/deploy/.env.example @@ -7,7 +7,7 @@ SERVER_PORT=4000 # 应用版本(镜像标签) -APP_VERSION=1.1.0 +APP_VERSION=1.1.1 # MySQL 配置 MYSQL_ROOT_PASSWORD=请改成强密码_root diff --git a/deploy/.env.sqlite.example b/deploy/.env.sqlite.example index 387aca5..85af21e 100644 --- a/deploy/.env.sqlite.example +++ b/deploy/.env.sqlite.example @@ -8,7 +8,7 @@ SERVER_PORT=4000 # 应用版本(镜像标签) -APP_VERSION=1.1.0 +APP_VERSION=1.1.1 # JWT 签名密钥(必填,必须 ≥32 位;不能包含 secret / change-me 等示例词) # 生成:node -e "console.log(require('crypto').randomBytes(48).toString('hex'))" diff --git a/deploy/docker-compose.sqlite.yml b/deploy/docker-compose.sqlite.yml index 0bafaed..3b6f657 100644 --- a/deploy/docker-compose.sqlite.yml +++ b/deploy/docker-compose.sqlite.yml @@ -23,7 +23,7 @@ services: context: .. dockerfile: deploy/Dockerfile target: runtime - image: classhelper-server:${APP_VERSION:-1.1.0} + image: classhelper-server:${APP_VERSION:-1.1.1} restart: unless-stopped environment: NODE_ENV: production diff --git a/deploy/docker-compose.yml b/deploy/docker-compose.yml index ebe2463..c1024b9 100644 --- a/deploy/docker-compose.yml +++ b/deploy/docker-compose.yml @@ -60,7 +60,7 @@ services: context: .. dockerfile: deploy/Dockerfile target: runtime - image: classhelper-server:${APP_VERSION:-1.1.0} + image: classhelper-server:${APP_VERSION:-1.1.1} restart: unless-stopped environment: NODE_ENV: production diff --git a/deploy/install.sh b/deploy/install.sh index a8a7266..d26a598 100644 --- a/deploy/install.sh +++ b/deploy/install.sh @@ -17,7 +17,7 @@ # 脚本会自动从 GitHub Release 取**最新版**服务端安装包,并取发布页上同名的 .sha256 做校验, # 所以整条链路只需要这一行。要加参数就接在最后:`sudo bash /tmp/classhelper-install.sh --check` # --check 只体检、不安装(不需要 root) --yes 全部默认、不交互 -# --version 1.1.0 装指定版本 --port 8080 自定义端口 +# --version 1.1.1 装指定版本 --port 8080 自定义端口 # --admin-password-stdin 从 stdin 读初始管理员密码 # # ⚠ 别写成 `bash -c "$(curl …)" --check`:`bash -c '代码' 第一个参数` 里那个参数会变成 **$0**、 @@ -529,7 +529,7 @@ resolve_package_url() { tag="$(github_latest_tag)" || true if [ -z "$tag" ]; then die "取不到 GitHub 最新版本(本机可能没有外网)。请用 --package 指定安装包,例如: - sudo bash install.sh --package /tmp/classhelper-server-linux-x64-1.1.0.tar.gz" + sudo bash install.sh --package /tmp/classhelper-server-linux-x64-1.1.1.tar.gz" fi fi ver="${tag#v}" diff --git a/deploy/package.runtime.json b/deploy/package.runtime.json index a8c6e46..27a25e4 100644 --- a/deploy/package.runtime.json +++ b/deploy/package.runtime.json @@ -1,6 +1,6 @@ { "name": "classhelper-server-runtime", - "version": "1.1.0", + "version": "1.1.1", "private": true, "type": "module", "description": "班级小助手服务端运行时(安装包 / 容器内置)", diff --git a/docs/production.md b/docs/production.md index df716aa..5f76729 100644 --- a/docs/production.md +++ b/docs/production.md @@ -4,7 +4,7 @@ | 形态 | 适用场景 | 产物 | 本机验证情况 | | --------------------- | -------------------------------------------- | -------------------------------------------------------- | -------------------------------------- | -| **A. Windows 安装包** | 学校机房、教师办公电脑(单机即完整系统) | `release-server/班级小助手服务端-<版本>-x64-setup.exe` | ✅ 已完整实测(静默安装/启停/卸载/UI) | +| **A. Windows 安装包** | 学校机房、教师办公电脑(单机即完整系统) | `releases/server/<版本>/安装包/班级小助手服务端-<版本>-x64-setup.exe` | ✅ 已完整实测(静默安装/启停/卸载/UI) | | **B. Docker + MySQL** | 云服务器、多终端共享一套数据(推荐长期方案) | `deploy/Dockerfile` + `deploy/docker-compose.yml` | ⚠️ 文件已提供,本机无 Docker 未实测 | | **C. Linux 原生部署** | 已有 Linux 服务器(systemd,SQLite 或 MySQL) | [`deploy/install.sh`](../deploy/install.sh) + `classhelper` 运维命令 | ⚠️ 本机无 Linux,实机验收见 [linux-deploy.md](linux-deploy.md) §10 | | **D. 手动部署** | 已有 Node 环境的服务器、需要自定义 | `pnpm dist:server` 的免安装目录 | ✅ 免安装目录已实测(163 项端到端) | @@ -22,10 +22,10 @@ pnpm dist:server -- --reuse-deps # 迭代打包:复用已安装依赖,跳 产物: -| 路径 | 说明 | -| ----------------------------------------------------- | ----------------------------------------------- | -| `release-server/classhelper-server/` | 免安装目录,可直接拷到任意 Windows x64 机器运行 | -| `release-server/班级小助手服务端-1.1.0-x64-setup.exe` | 安装程序(约 34 MB,NSIS) | +| 路径 | 说明 | +| ----------------------------------------------------------------------- | ----------------------------------------------- | +| `releases/server/<版本>/免安装/` | 免安装目录,可直接拷到任意 Windows x64 机器运行 | +| `releases/server/<版本>/安装包/班级小助手服务端-<版本>-x64-setup.exe` | 安装程序(约 62 MB,NSIS) | 打包内容:内置 **Node 运行时**(目标机无需安装 Node.js)、后端产物、Web 管理端产物、 生产依赖(真实目录,非软链)、迁移 SQL、`.env`(随机 JWT 密钥)、启停脚本。 @@ -35,7 +35,7 @@ pnpm dist:server -- --reuse-deps # 迭代打包:复用已安装依赖,跳 双击安装程序即可,**无需管理员权限**(当前用户级安装): - 安装目录:`%LOCALAPPDATA%\Programs\ClassHelperServer` -- 静默安装:`"班级小助手服务端-1.1.0-x64-setup.exe" /S` +- 静默安装:`"班级小助手服务端-1.1.1-x64-setup.exe" /S` - 开始菜单:启动服务 / 停止服务 / 重启服务 / 打开管理端 / 使用说明 / 卸载 - 桌面:`班级小助手服务端.lnk`(打开管理端) - 自动加入当前用户开机自启(`HKCU\...\CurrentVersion\Run`) @@ -163,7 +163,7 @@ Linux 包由 GitHub Actions 在 ubuntu runner 上构建(平台相关的依赖 ```bash # 开发机:做出 Linux 包并连同脚本一起拷到服务器 pnpm dist:server:linux -scp release-server/classhelper-server-linux-x64-*.tar.gz deploy/install.sh deploy/verify-linux.sh \ +scp releases/server/*/linux-x64/classhelper-server-linux-x64-*.tar.gz deploy/install.sh deploy/verify-linux.sh \ root@<服务器>:/tmp/ # 服务器上 @@ -176,7 +176,7 @@ sudo bash /tmp/install.sh # 交互式:选形态 → 选目录 ```bash printf '%s\n' 'StrongPass!2026' | sudo bash /tmp/install.sh --yes \ --dir /srv/classhelper --port 8080 --admin-password-stdin \ - --package /tmp/classhelper-server-linux-x64-1.1.0.tar.gz + --package /tmp/classhelper-server-linux-x64-1.1.1.tar.gz ``` 安装器做的事:识别发行版与包管理器补依赖 → 建系统用户 `classhelper` → 下载包并校验 sha256 → @@ -221,7 +221,7 @@ printf '%s\n' 'StrongPass!2026' | sudo bash /tmp/install.sh --yes \ 没有 systemd 的容器里可以用安装器的"只铺文件"模式,再自己托管进程: ```bash -sudo bash /tmp/install.sh --yes --force --package /tmp/classhelper-server-linux-x64-1.1.0.tar.gz +sudo bash /tmp/install.sh --yes --force --package /tmp/classhelper-server-linux-x64-1.1.1.tar.gz sudo -u classhelper /opt/classhelper/runtime/node/bin/node /opt/classhelper/server/dist/index.js ``` @@ -279,7 +279,7 @@ pnpm install pnpm build:shared pnpm --filter @classhelper/server build pnpm --filter @classhelper/web-admin build -pnpm dist:server -- --reuse-deps # 得到 release-server/classhelper-server 免安装目录 +pnpm dist:server -- --reuse-deps # 得到 releases/server/<版本>/免安装/ 免安装目录 ``` 把该目录拷贝到目标机,编辑 `.env`(端口、数据库、密钥、跨域),然后: diff --git a/package.json b/package.json index 832c8d5..da4c804 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "class-helper", - "version": "1.1.0", + "version": "1.1.1", "private": true, "description": "班级小助手 - 班级信息管理系统(Web 管理端 + 后端服务 + 桌面客户端)", "packageManager": "pnpm@11.8.0", diff --git a/packages/classisland-plugin/manifest.yml b/packages/classisland-plugin/manifest.yml index a730f05..e5946b2 100644 --- a/packages/classisland-plugin/manifest.yml +++ b/packages/classisland-plugin/manifest.yml @@ -14,6 +14,6 @@ description: |- 4. 可选:把班级小助手上排好的课表镜像回 ClassIsland。 entranceAssembly: 'ClassHelper.ClassIslandPlugin.dll' url: https://github.com/LoveChengke/ClassHelper -version: 1.1.0.0 +version: 1.1.1.0 apiVersion: 2.0.0.0 author: 班级小助手 diff --git a/packages/classisland-plugin/src/Services/BridgeService.cs b/packages/classisland-plugin/src/Services/BridgeService.cs index 7962b30..fb6f0f1 100644 --- a/packages/classisland-plugin/src/Services/BridgeService.cs +++ b/packages/classisland-plugin/src/Services/BridgeService.cs @@ -495,7 +495,7 @@ public sealed class BridgeService : INotifyPropertyChanged, IDisposable /* ---------------------------------------------------------------- 内部实现 */ /// 插件版本(与 manifest.yml / csproj 保持一致)。 - private const string PluginVersion = "1.1.0.0"; + private const string PluginVersion = "1.1.1.0"; /// ClassIsland 版本读不到时不该让上报失败(开发版可能为 null)。 private static string SafeAppVersion() diff --git a/packages/desktop-client/package.json b/packages/desktop-client/package.json index d9b11d2..d98216b 100644 --- a/packages/desktop-client/package.json +++ b/packages/desktop-client/package.json @@ -1,6 +1,6 @@ { "name": "@classhelper/desktop-client", - "version": "1.1.0", + "version": "1.1.1", "private": true, "description": "班级小助手 EXE 客户端(Electron + Vue 3 + Element Plus + Socket.IO + IndexedDB 离线缓存)", "author": "Class Helper", diff --git a/packages/server/package.json b/packages/server/package.json index 9f76ad5..7f319e9 100644 --- a/packages/server/package.json +++ b/packages/server/package.json @@ -1,6 +1,6 @@ { "name": "@classhelper/server", - "version": "1.1.0", + "version": "1.1.1", "private": true, "description": "班级小助手后端服务:REST API + Socket.IO 实时推送 + Prisma 数据访问", "type": "module", diff --git a/packages/server/scripts/verify-classisland.mjs b/packages/server/scripts/verify-classisland.mjs index 448110c..35a743d 100644 --- a/packages/server/scripts/verify-classisland.mjs +++ b/packages/server/scripts/verify-classisland.mjs @@ -210,7 +210,7 @@ async function main() { // ---------------------------------------------------------------- 3. 上报(状态 + 课表 + 节次) const reportBody = { - pluginVersion: '1.1.0.0', + pluginVersion: '1.1.1.0', classIslandVersion: '2.1.0.0', state: { inClass: true, diff --git a/packages/shared/package.json b/packages/shared/package.json index 18f4fd3..127a025 100644 --- a/packages/shared/package.json +++ b/packages/shared/package.json @@ -1,6 +1,6 @@ { "name": "@classhelper/shared", - "version": "1.1.0", + "version": "1.1.1", "private": true, "description": "班级小助手 - 三端共享的类型、常量与工具函数", "type": "module", diff --git a/packages/web-admin/package.json b/packages/web-admin/package.json index 575f2a4..0ebb0f4 100644 --- a/packages/web-admin/package.json +++ b/packages/web-admin/package.json @@ -1,6 +1,6 @@ { "name": "@classhelper/web-admin", - "version": "1.1.0", + "version": "1.1.1", "private": true, "description": "班级小助手 Web 管理端(Vue 3 + Vite + Element Plus)", "type": "module",