feat: generate docs
This commit is contained in:
@@ -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) */,
|
||||
|
||||
@@ -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: {
|
||||
|
||||
@@ -31,7 +31,7 @@ function Home() {
|
||||
>
|
||||
<div className="flex flex-row items-center justify-center h-[56px]">
|
||||
<Logo />
|
||||
{!collapsed && <h2 className="ml-4 text-xl font-medium">Foka CI</h2>}
|
||||
{!collapsed && <h2 className="ml-4 text-xl font-medium">Mini CI</h2>}
|
||||
</div>
|
||||
<Menu
|
||||
className="flex-1"
|
||||
|
||||
@@ -59,7 +59,7 @@ function ProjectCard({ project }: ProjectCardProps) {
|
||||
|
||||
return (
|
||||
<Card
|
||||
className="foka-card !rounded-xl border border-gray-200 h-[280px] cursor-pointer"
|
||||
className="!rounded-xl border border-gray-200 h-[280px] cursor-pointer"
|
||||
hoverable
|
||||
bodyStyle={{ padding: '20px' }}
|
||||
onClick={onProjectClick}
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
"@pages/*": ["./src/pages/*"],
|
||||
"@styles/*": ["./src/styles/*"],
|
||||
"@assets/*": ["./src/assets/*"],
|
||||
"@shared": ["src/utils"]
|
||||
"@utils/*": ["./src/utils/*"]
|
||||
}
|
||||
},
|
||||
"include": ["src"]
|
||||
|
||||
@@ -7,7 +7,6 @@
|
||||
1. 在 `controllers/` 对应模块下创建/修改 `dto.ts` 定义输入。
|
||||
2. 在 `index.ts` 中编写类,使用 `@Controller` 和 `@Post/Get` 等装饰器。
|
||||
3. 如果涉及数据库,修改 `schema.prisma` 并运行 `npx prisma db push`。
|
||||
4. 在前端 `pages/` 对应的 `service.ts` 中添加调用方法。
|
||||
|
||||
## 2. 核心逻辑位置
|
||||
|
||||
@@ -17,6 +16,6 @@
|
||||
|
||||
## 3. 交互规范
|
||||
|
||||
- 前端请求请使用 `@shared` 别名导入 `net` 实例。
|
||||
- 前端 `import` 代码优先使用路径别名,例如:`import {net} from '@utils'`。
|
||||
- 始终保持代码简洁,优先使用现有的 `libs` 工具类。
|
||||
- 修改代码后,务必确认 `pnpm dev` 是否能正常编译通过。
|
||||
|
||||
@@ -28,7 +28,12 @@ web 项目代码组织如下:
|
||||
│ └── ...
|
||||
```
|
||||
|
||||
## 3. 响应格式
|
||||
## 3. 代码规范
|
||||
|
||||
- 注释符合 jsdoc 规范
|
||||
- 代码简洁,避免冗余,移除无用的代码引用、变量、函数和css样式
|
||||
|
||||
## 4. 响应格式
|
||||
|
||||
- 后端统一返回 `APIResponse<T>` 结构:
|
||||
|
||||
@@ -38,12 +43,12 @@ web 项目代码组织如下:
|
||||
|
||||
- 由 `RouteScanner` 中的 `wrapControllerMethod` 自动封装。
|
||||
|
||||
## 3. 异步处理
|
||||
## 5. 异步处理
|
||||
|
||||
- 统一使用 `async/await`。
|
||||
- 后端错误通过抛出异常由 `exception.ts` 中间件统一捕获。
|
||||
|
||||
## 4. 格式化
|
||||
## 6. 格式化
|
||||
|
||||
- 使用 Biome 进行 Lint 和 Format。
|
||||
- 提交代码前建议运行 `pnpm --filter web format`。
|
||||
|
||||
@@ -1,14 +1,17 @@
|
||||
# ADR 0001: 技术选型
|
||||
|
||||
## 背景
|
||||
|
||||
需要构建一个轻量级、易扩展且易于本地部署的 CI 系统。
|
||||
|
||||
## 决策
|
||||
|
||||
- **语言**: 全栈 TypeScript,确保模型定义在前后端的一致性。
|
||||
- **后端框架**: Koa。相比 Express 更加轻量,利用 async/await 处理异步中间件更优雅。
|
||||
- **数据库**: SQLite。CI 系统通常是单机或小规模使用,SQLite 无需独立服务,运维成本极低。
|
||||
- **执行工具**: `zx`。相比原生的 `child_process`,`zx` 处理 Shell 交互更加直观和安全。
|
||||
|
||||
## 后果
|
||||
|
||||
- 优势:开发效率极高,部署简单。
|
||||
- 挑战:SQLite 在极高并发写入(如数百个任务同时输出日志)时可能存在性能瓶颈。
|
||||
|
||||
@@ -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` 中。
|
||||
|
||||
@@ -1,12 +1,15 @@
|
||||
# ADR 0003: 流水线执行策略
|
||||
|
||||
## 背景
|
||||
|
||||
如何确保流水线执行的隔离性与可靠性。
|
||||
|
||||
## 决策
|
||||
|
||||
- **工作目录**: 每个项目在服务器上拥有独立的 `projectDir`。
|
||||
- **执行器**: 采用线性执行。目前不支持多步骤并行,以确保日志顺序的确定性。
|
||||
- **队列**: 使用内存队列 + 数据库扫描实现。系统重启后能通过数据库中的 `pending` 状态恢复任务。
|
||||
|
||||
## 后果
|
||||
|
||||
目前的隔离级别为目录级。未来可能需要引入 Docker 容器化执行以增强安全性。
|
||||
|
||||
@@ -10,10 +10,12 @@
|
||||
|
||||
## 进行中 🚧
|
||||
|
||||
- 部署记录的分页查询优化
|
||||
- 优化: 移除菜单环境管理及页面(目前无用)
|
||||
- 优化: 部署记录的分页查询
|
||||
- 修复: 表单必填项,*号和 label 不在一行
|
||||
- 修复:项目详情页,未选中 tab【部署记录】还会拉取日志信息
|
||||
|
||||
## 待办 📅
|
||||
|
||||
- [ ] Gitea Webhook 自动触发
|
||||
- [ ] 用户权限管理 (RBAC)
|
||||
- [ ] 日志实时 Websocket 推送
|
||||
|
||||
@@ -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 配置进行代码格式化。
|
||||
Reference in New Issue
Block a user