Skip to content

Commit 4de6457

Browse files
committed
docs: add pr collaboration guidelines
1 parent 7a0dd1b commit 4de6457

3 files changed

Lines changed: 324 additions & 0 deletions

File tree

.github/pull_request_template.md

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
## 这次 PR 是做什么
2+
3+
请用几句话说明这个 PR 的目的。
4+
5+
示例:修复资源发布表单没有校验,导致空内容也能发布的问题。
6+
7+
## 改了什么
8+
9+
-
10+
-
11+
-
12+
13+
## 提交方自检
14+
15+
- [ ] 我确认这个 PR 只做一件事,没有混入无关修改。
16+
- [ ] 我已经本地运行过相关功能。
17+
- [ ] 我已经运行 `npm test`,或说明了为什么不需要跑。
18+
- [ ] 我已经运行 `npm run lint`,或说明了为什么不需要跑。
19+
- [ ] 我已经运行 `npm run build`,或说明了为什么不需要跑。
20+
- [ ] 如果改了 UI,我已经附上截图或录屏。
21+
- [ ] 如果改了数据库,我已经更新 `supabase-schema.sql` 并写清楚线上需要执行什么 SQL。
22+
- [ ] 如果新增环境变量,我已经更新 README 或部署文档。
23+
- [ ] 我没有提交 `.env.local`、密钥、token、service role key。
24+
25+
## 截图或录屏
26+
27+
如果改了页面、样式、交互,把截图放在这里。
28+
29+
## 数据库 / 环境变量 / 部署影响
30+
31+
请选择并填写:
32+
33+
- 数据库:无 / 有,说明:
34+
- 环境变量:无 / 有,说明:
35+
- 部署影响:无 / 有,说明:
36+
37+
## 我是怎么测试的
38+
39+
写清楚你实际做过的测试,不要只写“已测试”。
40+
41+
```bash
42+
npm test
43+
npm run lint
44+
npm run build
45+
```
46+
47+
手动测试步骤:
48+
49+
1.
50+
2.
51+
3.
52+
53+
## 需要维护者重点看的地方
54+
55+
-
56+
-

CONTRIBUTING.md

Lines changed: 264 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,264 @@
1+
# Research Hub 协作与 PR 规范
2+
3+
这个仓库的代码修改统一走 Pull Request。不要直接往 `main` 推代码。
4+
5+
PR 的目的不是增加麻烦,而是让每一次改动都能被看见、被测试、能回退。只要影响网站代码、数据库结构、登录、发布、上传、部署配置,都必须走 PR。
6+
7+
## 什么情况需要提交 PR
8+
9+
需要提交 PR:
10+
11+
- 修改页面、样式、交互、组件。
12+
- 修 bug。
13+
- 新增功能,比如资源发布、文章发布、PDF 上传、评论回复。
14+
- 修改 API、数据库 schema、权限规则。
15+
- 修改依赖、构建脚本、部署配置。
16+
- 修改文档、README、协作规范。
17+
18+
不需要提交 PR:
19+
20+
- 只是在网站里正常发布一篇文章。
21+
- 只是在网站里正常发布一个资源。
22+
- 只是在评论区回复别人。
23+
24+
内容创作走网站功能。代码和配置修改走 GitHub PR。
25+
26+
## 提交方应该怎么做
27+
28+
### 1. 先拿到最新代码
29+
30+
如果你是仓库成员:
31+
32+
```bash
33+
git checkout main
34+
git pull origin main
35+
```
36+
37+
如果你不是仓库成员,先 Fork 仓库,再从自己的 Fork 创建分支。
38+
39+
### 2. 创建一个清楚的分支名
40+
41+
分支名要让别人一眼看懂你在改什么。
42+
43+
推荐格式:
44+
45+
```bash
46+
git checkout -b feat/article-editor
47+
git checkout -b fix/empty-resource-validation
48+
git checkout -b docs/pr-rules
49+
git checkout -b chore/update-deps
50+
```
51+
52+
常用前缀:
53+
54+
- `feat/`:新功能。
55+
- `fix/`:修 bug。
56+
- `docs/`:文档。
57+
- `style/`:只改样式。
58+
- `refactor/`:重构,不改变功能。
59+
- `chore/`:依赖、脚本、配置。
60+
61+
### 3. 本地跑起来再改
62+
63+
```bash
64+
npm ci
65+
npm run dev
66+
```
67+
68+
本地地址:
69+
70+
```text
71+
http://localhost:3001
72+
```
73+
74+
如果需要登录、数据库、上传功能,先配置 `.env.local`。不要把 `.env.local`、密钥、token、service role key 提交到 GitHub。泄露密钥是低级错误,别干。
75+
76+
### 4. 控制 PR 范围
77+
78+
一个 PR 只做一件事。
79+
80+
正确示例:
81+
82+
- 只修“空表单也能发布”的校验问题。
83+
- 只新增“评论回复”功能。
84+
- 只新增“PR 协作规范”文档。
85+
86+
错误示例:
87+
88+
- 一个 PR 同时改登录、上传、首页 UI、数据库和 README。
89+
- 顺手格式化全仓库文件。
90+
- 改了很多无关文件,但 PR 里不解释。
91+
92+
范围越小,越容易 review,也越容易合并。
93+
94+
### 5. 改数据库时必须说明
95+
96+
如果你改了数据库结构,必须同时做这些事:
97+
98+
- 更新 `supabase-schema.sql`
99+
- 在 PR 里写清楚新增或修改了哪些表、字段、索引、权限。
100+
- 说明线上是否需要手动执行 SQL。
101+
- 说明旧数据会不会受影响。
102+
103+
只改代码不改 schema,最后线上炸掉,这种 PR 不合格。
104+
105+
### 6. 提交前先自测
106+
107+
提交 PR 前至少跑:
108+
109+
```bash
110+
npm test
111+
npm run lint
112+
npm run build
113+
```
114+
115+
如果你只改了文档,可以说明“只改文档,未跑构建”。
116+
117+
如果你改了页面或交互,PR 里必须放截图。移动端有明显变化时,也要放移动端截图。
118+
119+
### 7. 写清楚 PR 内容
120+
121+
PR 描述必须包含:
122+
123+
- 为什么要改。
124+
- 改了什么。
125+
- 怎么测试的。
126+
- 是否影响数据库、环境变量、部署。
127+
- 是否有截图或录屏。
128+
- 还有什么风险。
129+
130+
不要只写“fix bug”“update”“优化一下”。这种描述没有 review 价值。
131+
132+
### 8. Review 后怎么处理
133+
134+
维护者提出修改意见后,提交方应该:
135+
136+
- 在同一个分支继续提交 commit。
137+
- 回答每一条关键问题。
138+
- 改完后重新跑必要检查。
139+
- 如果不同意 review 意见,说明原因,不要沉默。
140+
141+
不要开一个新 PR 来逃避旧 PR 的 review。
142+
143+
## 维护者应该怎么做
144+
145+
维护者就是仓库负责人或有合并权限的人。
146+
147+
### 1. 先看 PR 是否合格
148+
149+
先检查:
150+
151+
- 标题是否清楚。
152+
- 描述是否说明了目的、改动、测试结果。
153+
- 是否有无关文件。
154+
- 是否有截图。
155+
- 是否提到数据库或环境变量影响。
156+
157+
描述不清楚就要求补充,不要急着看代码。
158+
159+
### 2. 优先看风险点
160+
161+
Review 时重点看:
162+
163+
- 表单是否有校验,不能再出现空内容也能发布。
164+
- 登录态和权限是否正确。
165+
- 用户输入是否可能破坏页面或数据。
166+
- API 是否处理错误情况。
167+
- 数据库 schema 是否和代码一致。
168+
- 上传文件是否限制类型和大小。
169+
- 移动端布局是否能正常使用。
170+
- 是否泄露密钥、token、数据库连接信息。
171+
172+
样式细节可以讨论,但安全、数据、权限问题必须优先。
173+
174+
### 3. 本地或预览环境验证
175+
176+
维护者至少选择一种方式验证:
177+
178+
- 拉到本地运行。
179+
- 使用 Vercel Preview 查看。
180+
- 对纯文档 PR 直接读 diff。
181+
182+
涉及功能修改时,建议本地跑:
183+
184+
```bash
185+
npm test
186+
npm run lint
187+
npm run build
188+
```
189+
190+
如果 PR 涉及数据库,先在测试 Supabase 项目里执行 SQL,确认不会破坏线上数据。
191+
192+
### 4. 如何给 review 意见
193+
194+
Review 意见要具体:
195+
196+
- 指出文件和位置。
197+
- 说明为什么有问题。
198+
- 给出可以执行的修改建议。
199+
200+
不要只写“这里不行”“再优化一下”。这种意见没法执行。
201+
202+
### 5. 合并前检查
203+
204+
合并前确认:
205+
206+
- PR 范围明确。
207+
- CI 通过。
208+
- 必要测试通过。
209+
- review 对话已解决。
210+
- 没有密钥泄露。
211+
- 数据库变更有说明。
212+
- UI 改动有截图。
213+
- 部署影响已确认。
214+
215+
推荐使用 Squash merge,让 `main` 的历史保持干净。
216+
217+
## 推荐的 GitHub 仓库设置
218+
219+
建议给 `main` 分支开启保护规则:
220+
221+
- 禁止直接 push 到 `main`
222+
- 必须通过 PR 合并。
223+
- 至少 1 个维护者 review。
224+
- CI 必须通过。
225+
- 所有 review 对话必须解决。
226+
- 禁止 force push。
227+
- 禁止删除 `main`
228+
229+
这样其他人可以参与修改,但不会随便把线上版本改坏。
230+
231+
## PR 标题建议
232+
233+
标题用中文或英文都可以,但必须具体。
234+
235+
推荐:
236+
237+
```text
238+
fix: 修复资源空表单也能发布的问题
239+
feat: 新增文章发布入口
240+
docs: 新增 PR 协作规范
241+
chore: 更新 Vercel 部署说明
242+
```
243+
244+
不推荐:
245+
246+
```text
247+
update
248+
fix
249+
优化
250+
改了一些东西
251+
```
252+
253+
## 最低合并标准
254+
255+
一个 PR 至少要满足:
256+
257+
- 解决了一个明确问题。
258+
- 没有引入明显回归。
259+
- 没有无关改动。
260+
- 本地检查或 CI 通过。
261+
- 描述能让别人看懂。
262+
- 需要人工操作的地方写清楚了。
263+
264+
达不到这些标准,就不要合并。

README.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,10 @@ npm run lint
4040
npm run build
4141
```
4242

43+
## Contributing
44+
45+
All code, schema, configuration, and documentation changes should go through Pull Requests. Read [`CONTRIBUTING.md`](./CONTRIBUTING.md) before opening a PR.
46+
4347
## Vercel Deployment
4448

4549
Production deployment now targets Vercel. The repository keeps a lightweight GitHub Actions CI workflow for tests, lint, and build checks only.

0 commit comments

Comments
 (0)