diff --git a/apps/server/middlewares/session.ts b/apps/server/middlewares/session.ts index ce9af3d..1ecc98d 100644 --- a/apps/server/middlewares/session.ts +++ b/apps/server/middlewares/session.ts @@ -4,11 +4,11 @@ import type { Middleware } from './types.ts'; export class Session implements Middleware { apply(app: Koa): void { - app.keys = ['foka-ci']; + app.keys = ['mini-ci']; app.use( session( { - key: 'foka.sid', + key: 'mini-ci.sid', maxAge: 86400000, autoCommit: true /** (boolean) automatically commit headers (default true) */, overwrite: true /** (boolean) can overwrite or not (default true) */, diff --git a/apps/web/rsbuild.config.ts b/apps/web/rsbuild.config.ts index 09dc38c..7ce3249 100644 --- a/apps/web/rsbuild.config.ts +++ b/apps/web/rsbuild.config.ts @@ -7,7 +7,7 @@ import { pluginSvgr } from '@rsbuild/plugin-svgr'; export default defineConfig({ plugins: [pluginReact(), pluginLess(), pluginSvgr()], html: { - title: 'Foka CI', + title: 'Mini CI', }, source: { define: { diff --git a/apps/web/src/pages/home/index.tsx b/apps/web/src/pages/home/index.tsx index ac8e355..8549d88 100644 --- a/apps/web/src/pages/home/index.tsx +++ b/apps/web/src/pages/home/index.tsx @@ -31,7 +31,7 @@ function Home() { >
- {!collapsed &&

Foka CI

} + {!collapsed &&

Mini CI

}
` 结构: @@ -38,12 +43,12 @@ web 项目代码组织如下: - 由 `RouteScanner` 中的 `wrapControllerMethod` 自动封装。 -## 3. 异步处理 +## 5. 异步处理 - 统一使用 `async/await`。 - 后端错误通过抛出异常由 `exception.ts` 中间件统一捕获。 -## 4. 格式化 +## 6. 格式化 - 使用 Biome 进行 Lint 和 Format。 - 提交代码前建议运行 `pnpm --filter web format`。 diff --git a/docs/decisions/0001-tech-stack.md b/docs/decisions/0001-tech-stack.md index b90346d..789739c 100644 --- a/docs/decisions/0001-tech-stack.md +++ b/docs/decisions/0001-tech-stack.md @@ -1,14 +1,17 @@ # ADR 0001: 技术选型 ## 背景 + 需要构建一个轻量级、易扩展且易于本地部署的 CI 系统。 ## 决策 + - **语言**: 全栈 TypeScript,确保模型定义在前后端的一致性。 - **后端框架**: Koa。相比 Express 更加轻量,利用 async/await 处理异步中间件更优雅。 - **数据库**: SQLite。CI 系统通常是单机或小规模使用,SQLite 无需独立服务,运维成本极低。 - **执行工具**: `zx`。相比原生的 `child_process`,`zx` 处理 Shell 交互更加直观和安全。 ## 后果 + - 优势:开发效率极高,部署简单。 - 挑战:SQLite 在极高并发写入(如数百个任务同时输出日志)时可能存在性能瓶颈。 diff --git a/docs/decisions/0002-state.md b/docs/decisions/0002-state.md index ce2a367..46063aa 100644 --- a/docs/decisions/0002-state.md +++ b/docs/decisions/0002-state.md @@ -1,15 +1,18 @@ # ADR 0002: 状态管理 ## 背景 + 需要在前端管理用户信息、全局配置以及各页面的复杂 UI 状态。 ## 决策 + - **全局状态**: 使用 Zustand。 -- **理由**: - - 相比 Redux 模板代码极少。 - - 相比 Context API 性能更好且不引起全量重绘。 - - 符合 React 19 的 Concurrent 模式。 +- **理由**: + - 相比 Redux 模板代码极少。 + - 相比 Context API 性能更好且不引起全量重绘。 + - 符合 React 19 的 Concurrent 模式。 - **持久化**: 对关键状态(如 Token)使用 Zustand 的 persist 中间件。 ## 后果 + 状态管理逻辑高度内聚在 `apps/web/src/stores` 中。 diff --git a/docs/decisions/0003-pipeline-execution.md b/docs/decisions/0003-pipeline-execution.md index f232b3b..cf1837d 100644 --- a/docs/decisions/0003-pipeline-execution.md +++ b/docs/decisions/0003-pipeline-execution.md @@ -1,12 +1,15 @@ # ADR 0003: 流水线执行策略 ## 背景 + 如何确保流水线执行的隔离性与可靠性。 ## 决策 + - **工作目录**: 每个项目在服务器上拥有独立的 `projectDir`。 - **执行器**: 采用线性执行。目前不支持多步骤并行,以确保日志顺序的确定性。 - **队列**: 使用内存队列 + 数据库扫描实现。系统重启后能通过数据库中的 `pending` 状态恢复任务。 ## 后果 + 目前的隔离级别为目录级。未来可能需要引入 Docker 容器化执行以增强安全性。 diff --git a/docs/status.md b/docs/status.md index 0304f75..2e81c89 100644 --- a/docs/status.md +++ b/docs/status.md @@ -10,10 +10,12 @@ ## 进行中 🚧 -- 部署记录的分页查询优化 +- 优化: 移除菜单环境管理及页面(目前无用) +- 优化: 部署记录的分页查询 +- 修复: 表单必填项,*号和 label 不在一行 +- 修复:项目详情页,未选中 tab【部署记录】还会拉取日志信息 ## 待办 📅 - [ ] Gitea Webhook 自动触发 - [ ] 用户权限管理 (RBAC) -- [ ] 日志实时 Websocket 推送 diff --git a/specs/instructions.md b/specs/instructions.md deleted file mode 100644 index 93988d2..0000000 --- a/specs/instructions.md +++ /dev/null @@ -1,90 +0,0 @@ -# MiniCI 项目开发指南 - -MiniCI 是一个轻量级的持续集成(CI)系统,采用 Monorepo 架构。 - -## 技术栈 - -### 核心架构 - -- **Monorepo**: 使用 pnpm workspace 管理。 -- **包管理器**: pnpm。 -- **代码格式化**: Biome。 - -### 后端 (apps/server) - -- **框架**: Koa (v3)。 -- **语言**: TypeScript。 -- **路由**: 基于 TC39 装饰器的自定义路由系统。 -- **数据库**: SQLite + Prisma ORM。 -- **任务执行**: `zx` (Shell 脚本执行), 自研 `ExecutionQueue` (任务队列)。 -- **日志**: Pino。 -- **验证**: Zod。 - -### 前端 (apps/web) - -- **框架**: React 19。 -- **构建工具**: Rsbuild。 -- **样式**: Tailwind CSS + Arco Design + Less。 -- **状态管理**: Zustand。 -- **路由**: React Router 7。 -- **请求**: Axios。 - -## 项目结构 - -```text -MiniCI/ -├── apps/ -│ ├── server/ # 后端服务 -│ │ ├── controllers/ # 控制器层 (路由处理) -│ │ ├── decorators/ # TC39 路由装饰器 -│ │ ├── libs/ # 核心逻辑库 (Git, 队列, 路由扫描) -│ │ ├── runners/ # 流水线执行器 -│ │ ├── prisma/ # 数据库模型定义 -│ │ └── generated/ # Prisma 生成的代码 -│ └── web/ # 前端应用 -│ ├── src/ -│ │ ├── pages/ # 页面组件及对应的 Service/Types -│ │ ├── components/ # 通用组件 -│ │ ├── stores/ # Zustand 状态管理 -│ │ └── shared/ # 通用请求和工具类 -└── specs/ # 项目规范与文档 -``` - -## 开发规范 - -### 1. 后端路由 - -必须使用装饰器定义路由。 - -- 类必须标记 `@Controller('prefix')`。 -- 方法必须标记 `@Get('path')`, `@Post('path')` 等。 -- 路由自动扫描并在 `app.ts` 中通过 `initMiddlewares` 加载。 - -### 2. 数据库操作 - -- 使用 Prisma 客户端 (`apps/server/libs/prisma.ts`)。 -- 修改模型后运行 `pnpm --filter server prisma generate`。 - -### 3. 前端开发 - -- 优先使用 **Arco Design** 组件。 -- 样式使用 **Tailwind CSS**。 -- 每个页面或模块应包含自己的 `service.ts`(处理 API 请求)和 `types.ts`。 - -### 4. 任务执行逻辑 - -- 所有流水线执行都通过 `ExecutionQueue` 调度。 -- 具体的执行逻辑位于 `PipelineRunner`,它会处理 Git 仓库的准备和步骤脚本的执行。 - -## 常用命令 - -- **全量开发**: `pnpm dev` -- **后端单独开发**: `pnpm --filter server dev` -- **前端单独开发**: `pnpm --filter web dev` -- **数据库同步**: `npx prisma db push` (在 server 目录下) - -## 注意事项 - -- **安全性**: 执行流水线脚本时需注意命令注入风险,目前主要由 `zx` 处理。 -- **性能**: 构建日志实时写入数据库,注意大规模并发下的 IO 压力。 -- **编码**: 遵循项目中的 Biome 配置进行代码格式化。