mirror of
https://github.com/shy3130/tick-stock-panel.git
synced 2026-11-02 02:16:13 +00:00
chore(contributing): 引入 DCO 贡献来源声明 + 再许可授权条款
为未来的协议切换 (MIT → AGPL-3.0) 与商业双授权做准备: - CONTRIBUTING.md 新增第 14 节: 每次提交须带 Signed-off-by 尾注 (git commit -s), 并授予维护者永久、不可撤销、全球范围、非独占、 免版税的再许可权; 明确本节仅对生效日之后的提交生效, 历史贡献永久 保持 MIT; 列出需签署正式 CLA 的情形 (职务作品/专利/大额贡献)。 - .github/workflows/dco.yml: PR 事件逐提交检查 Signed-off-by 尾注, 跳过 merge commit; 仅检查 PR, 不阻塞 main 上的直接提交。 - README.md 贡献入口补充 DCO 提醒。 仅有 DCO 尾注不足以支撑协议切换 —— 缺少明确的再许可授权时, 维护者 只能在现有协议下分发第三方贡献, 无法完成 AGPL 化与商业双授权。 Signed-off-by: shy3130 <shy3130@qq.com>
This commit is contained in:
@@ -0,0 +1,46 @@
|
||||
name: DCO
|
||||
|
||||
# 贡献来源声明检查: PR 的每个提交必须带 Signed-off-by 尾注
|
||||
# (见 CONTRIBUTING.md §14)。只检查 PR 事件, 不阻塞 main 上的直接提交
|
||||
# (维护者自己的提交在本地用 git commit -s 签署)。
|
||||
on:
|
||||
pull_request:
|
||||
branches: [main]
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
pull-requests: read
|
||||
|
||||
jobs:
|
||||
dco:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0 # 需要完整历史才能取 PR 的全部提交
|
||||
|
||||
- name: 检查 Signed-off-by
|
||||
env:
|
||||
BASE_SHA: ${{ github.event.pull_request.base.sha }}
|
||||
HEAD_SHA: ${{ github.event.pull_request.head.sha }}
|
||||
run: |
|
||||
set -euo pipefail
|
||||
missing=0
|
||||
# 逐提交检查尾注; merge commit 由 GitHub 生成, 跳过
|
||||
while read -r sha; do
|
||||
[ -z "$sha" ] && continue
|
||||
parents=$(git rev-list --parents -n 1 "$sha" | wc -w)
|
||||
if [ "$parents" -gt 2 ]; then continue; fi
|
||||
if ! git log -1 --format='%B' "$sha" | grep -qiE '^Signed-off-by: .+ <.+@.+>'; then
|
||||
echo "::error::提交 $sha 缺少 Signed-off-by 尾注 — 请用 git commit -s 签署 (见 CONTRIBUTING.md §14)"
|
||||
git log -1 --format=' %h %s' "$sha"
|
||||
missing=1
|
||||
fi
|
||||
done < <(git rev-list "$BASE_SHA".."$HEAD_SHA")
|
||||
|
||||
if [ "$missing" -ne 0 ]; then
|
||||
echo ""
|
||||
echo "修复方式: git rebase --signoff $BASE_SHA 后强推分支"
|
||||
exit 1
|
||||
fi
|
||||
echo "所有提交均已签署 DCO"
|
||||
@@ -372,4 +372,59 @@ PR 描述必须包含:
|
||||
- 审查 PR 时先报告问题,按严重级别排序并引用文件行号;最后再给合并建议和简短总结。
|
||||
- 完成后检查 `git diff` 和 `git status`,准确说明改了什么、验证了什么、仍有什么风险。
|
||||
|
||||
## 14. 贡献许可与来源声明
|
||||
|
||||
本项目采用 **DCO(Developer Certificate of Origin)+ 贡献再许可授权**的组合:提交时声明来源,并授予维护者更换协议所需的再许可权。
|
||||
|
||||
### 14.1 每次提交必须签署 DCO
|
||||
|
||||
所有提交必须带 `Signed-off-by` 尾注,声明你创作了该贡献、或有权按本项目条款提交,并同意本节的贡献许可条款:
|
||||
|
||||
```bash
|
||||
git commit -s -m "fix(scope): 说明"
|
||||
```
|
||||
|
||||
`-s` 会自动追加一行(姓名与邮箱须与 Git 配置一致):
|
||||
|
||||
```
|
||||
Signed-off-by: 你的名字 <you@example.com>
|
||||
```
|
||||
|
||||
DCO 完整声明见 <https://developercertificate.org/>。未签署的 PR 不予合并,CI 的 DCO 检查会拦下。
|
||||
|
||||
### 14.2 贡献再许可授权
|
||||
|
||||
提交贡献即表示你授予本项目维护者一项**永久、不可撤销、全球范围、非独占、免版税**的版权许可,允许维护者:
|
||||
|
||||
- 按项目当前协议(见 `LICENSE`)分发你的贡献;
|
||||
- 在未来将项目整体或部分更换为其他开源协议(包括 copyleft 协议,如 AGPL-3.0);
|
||||
- 为商业双授权目的,对你的贡献进行再许可。
|
||||
|
||||
你保留自己贡献的版权与署名权,本条款不改变你的署名权,也不影响你对自己贡献的独立使用。
|
||||
|
||||
> 为什么需要这一条:项目计划在未来版本引入 AGPL-3.0,并可能提供商业许可(AGPL + 商业双授权)。若没有明确的再许可授权,维护者只能在现有协议下分发第三方贡献,无法完成协议切换与双授权。仅有 DCO 不足以支撑这一权利,因此本条与 DCO 同时适用。
|
||||
|
||||
### 14.3 历史贡献的边界
|
||||
|
||||
本节条款**仅对生效日之后的提交生效**:
|
||||
|
||||
- 此前已合入的贡献仍按其提交时生效的 MIT 协议授权,**历史版本永久保持 MIT**,不会被追溯变更;
|
||||
- 维护者会另行联系主要历史贡献者补签再许可授权;未补签的部分继续按 MIT 生效,不影响项目继续以 MIT 分发既有代码。
|
||||
|
||||
### 14.4 需要签署正式 CLA 的情形
|
||||
|
||||
以下情形需要签署书面 CLA(个人 ICLA 或公司 CCLA),仅靠 DCO 尾注不够:
|
||||
|
||||
- 贡献属于你在雇主职责范围内完成的工作(须公司签署 CCLA);
|
||||
- 贡献涉及你或雇主持有的专利;
|
||||
- 单次贡献规模较大,或对项目架构有实质影响。
|
||||
|
||||
需要时由维护者在 PR 中提出并提供文本,签署记录归档在仓库外单独保存。
|
||||
|
||||
### 14.5 提交前自检
|
||||
|
||||
- [ ] 提交已用 `git commit -s` 签署 DCO;
|
||||
- [ ] `Signed-off-by` 的姓名邮箱真实且与 Git 提交身份一致;
|
||||
- [ ] 若贡献受雇于公司或涉及专利,已在 PR 中说明。
|
||||
|
||||
遵循本指南的衡量标准不是文档写得多,而是:改动范围更小、金融口径有证据、插件边界不被绕过、测试能真实复现问题、复审结论可执行,且相同问题不再反复返工。
|
||||
|
||||
@@ -660,6 +660,8 @@ PORT=3018 # 服务端口
|
||||
>
|
||||
> 协议全文与第三方组件许可清单亦可见应用内「设置 → 关于 → 开源许可」。
|
||||
|
||||
**贡献**:提交 PR 前请阅读 [CONTRIBUTING.md](./CONTRIBUTING.md);所有提交须用 `git commit -s` 签署 DCO(贡献来源声明),并同意其中第 14 节的贡献再许可条款。
|
||||
|
||||
本项目依赖 [TickFlow](https://tickflow.org/auth/register?ref=V3KDKGXPEA) 提供数据服务,使用前请遵守其服务条款
|
||||
|
||||
内置数据源插件 [fuyao](https://fuyao.aicubes.cn/docs/api-reference/) 提供同花顺 REST 数据接口(行情 / 财务 / 龙虎榜 / 盘前风向标 / 交易日历等),需自备 API Key,使用前请遵守其服务条款
|
||||
|
||||
Reference in New Issue
Block a user