gitlink-cli/skills/gitlink-workflow/references/workflow-contributor-growth.md

246 lines
8.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Workflow: Contributor Growth贡献者成长体系
> **前置条件:** 先阅读 [`../../gitlink-shared/SKILL.md`](../../../gitlink-shared/SKILL.md) 了解认证、全局参数和安全规则。
> **AI Agent 工作流**:此工作流专为 AI Agent 设计,用于评估和激励团队贡献者。
AI Agent 自动收集贡献者数据,使用 AHP 权重模型计算贡献分数,生成排行榜和可视化报告,并可选择颁发 Badge。
## 工作流概述
Contributor Growth 工作流通过收集 Issue、PR、代码变更、评论等数据使用 AHP层次分析法权重模型计算每个贡献者的综合分数生成排行榜、HTML 报告和 Wiki 页面,并可自动颁发 Badge。
## 适用场景
- **贡献评估**:量化团队成员的贡献程度
- **排行榜生成**:生成贡献者排行榜
- **激励机制**:通过 Badge 颁发激励贡献者
- **团队协调**:了解团队成员的参与度
## 触发词
- "贡献者" / "contributor"
- "排行榜" / "leaderboard"
- "badge" / "徽章"
- "成长" / "growth"
- "评分" / "score"
## 参数
| 参数 | 必填 | 说明 |
|------|------|------|
| `--owner` | 否 | 仓库所有者(自动从 git remote 解析) |
| `--repo` | 否 | 仓库名称(自动从 git remote 解析) |
| `--sample` | 否 | 采样 PR 数量获取代码统计(默认 10 |
| `--award` | 否 | 自动创建 Badge 颁发 Issue |
## AHP 评分模型
| 维度 | 权重 | 数据来源 | 提取字段 |
|------|------|----------|----------|
| Issues Created | 15% | `issue +list` (open + closed) | `.data.issues[].author.login` 按作者统计 |
| PRs Merged | 25% | `pr +list state=merged` | `.data.issues[].author_login` 按作者统计 |
| Code Changes | 30% | `pr +files`(采样) | `.data.files[].addition` / `.deletion`(单数) |
| Issue Comments | 15% | `issue +list` 直接提取 | `.data.issues[].comment_journals_count` |
| Team Member | 15% | `repo +members` | `.data.members[].login` 判断是否成员 |
## Badge 等级
| Badge | 分数要求 | 说明 |
|-------|----------|------|
| Champion | >= 80 | 卓越贡献 |
| Core Contributor | >= 60 | 核心贡献者 |
| Active Contributor | >= 40 | 活跃贡献者 |
| Contributor | >= 20 | 贡献者 |
| Newcomer | < 20 | 新人 |
## 工作流步骤
### 步骤 1收集数据
```bash
# Open Issues
gitlink-cli issue +list --owner {OWNER} --repo {REPO} --state open --limit 100 --format json
# Closed Issues
gitlink-cli issue +list --owner {OWNER} --repo {REPO} --state closed --limit 100 --format json
# Merged PRs
gitlink-cli pr +list --owner {OWNER} --repo {REPO} --state merged --limit 100 --format json
# 仓库成员
gitlink-cli repo +members --owner {OWNER} --repo {REPO} --limit 100 --format json
```
### 步骤 2构建贡献者数据
遍历数据为每个贡献者统计
- Issues创建的 Issue 数量
- Merged合并的 PR 数量
- Additions/Deletions代码变更行数采样
- Comments评论数量采样
### 步骤 3采样代码变更
merged PR 采样获取代码变更统计
```bash
# 获取 PR 变更文件
gitlink-cli pr +files --owner {OWNER} --repo {REPO} --id {PR_ID} --format json
```
提取字段`.data.files[].addition`、`.data.files[].deletion`**注意是单数形式不是 additions/deletions**
**已知问题**
- `pr +files` 输出的 JSON 在中文 Windows 下可能因编码问题导致解析失败GBK vs UTF-8
- 如果 Python 解析报错 `JSONDecodeError` `UnicodeDecodeError`需要指定 `encoding='utf-8'`
- 部分 PR files API 可能返回异常 try/except 跳过即可
- 降级方案 PR 数量估算代码变更量每个 PR 100
### 步骤 4采样评论数量
有两种方式获取评论数据
**方式 A推荐**直接从 `issue +list` 返回的数据中提取
- 字段`.data.issues[].comment_journals_count`
- 无需额外 API 调用效率更高
**方式 B**逐个 Issue 采样
```bash
gitlink-cli issue +view --owner {OWNER} --repo {REPO} --number {ISSUE_ID} --format json
```
- 字段`.data.comment_journals_count`
**补充**PR 的评论数可从 `pr +list` 返回的 `.data.issues[].journals_count` 获取
### 步骤 5计算 AHP 分数
```bash
# 归一化处理
NI = Issues / MaxIssues
NM = Merged / MaxMerged
NL = Lines / MaxLines
NC = Comments / MaxComments
MS = IsMember ? 1 : 0
# 加权求和
Score = NI * 15 + NM * 25 + NL * 30 + NC * 15 + MS * 15
```
### 步骤 6生成排行榜
输出格式
```
Rank Contributor Issues Merged +/- Lines Comments Score Badge
---- ------------------ ------ ------ --------- -------- ------ -------------
1 @contributor1 15 8 +1200/-300 45 82.5 Champion
2 @contributor2 10 12 +800/-200 30 68.2 Core Contributor
3 @contributor3 5 6 +400/-100 20 45.1 Active Contributor
```
### 步骤 7生成 HTML 报告
HTML 报告包含
- 汇总统计卡片
- ECharts 饼图分数分布
- 详细排行榜表格
- AHP 权重说明
### 步骤 8发布到 Wiki
```bash
gitlink-cli wiki +create \
--owner {OWNER} \
--repo {REPO} \
--title "Contributor Leaderboard {DATE}" \
--content "{WIKI_CONTENT}"
```
Wiki 内容包含
- 评分体系说明
- 排行榜表格
- 生成时间
### 步骤 9颁发 Badge可选
如果指定了 `--award` 参数为获奖者创建 Issue
```bash
gitlink-cli issue +create \
--owner {OWNER} \
--repo {REPO} \
--title "Badge Award: {BADGE}" \
--body "{ISSUE_BODY}"
gitlink-cli issue +label-add \
--owner {OWNER} \
--repo {REPO} \
--number {ISSUE_ID} \
--labels badge
```
## 输出示例
### 控制台输出
```
====== Contributor Growth System: zzx-coder/gitlink-cli ======
[STEP] Collecting data...
[ OK] Issues(open:15 closed:30) PRs(merged:25) Members:8
[STEP] Building contributor profiles...
[STEP] Analyzing PR code changes (sampling 10)...
[STEP] Sampling issue comments...
[STEP] Calculating scores...
====== Contributor Rankings ======
Rank Contributor Issues Merged +/- Lines Comments Score Badge
---- ------------------ ------ ------ --------- -------- ------ -------------
1 @zzx-coder 12 8 +1500/-400 35 85.2 Champion
2 @contributor1 8 6 +800/-200 25 62.1 Core Contributor
3 @contributor2 5 4 +400/-100 15 42.3 Active Contributor
====== Generating HTML Report ======
[ OK] HTML report: contrib-report-zzx-coder-gitlink-cli.html
[STEP] Publishing to Wiki...
[ OK] Published to Wiki: Contributor Leaderboard 2026-07-02
====== Awarding Badges ======
[ OK] Badge issue created: #45 - Badge Award: Champion (1 recipients)
[ OK] Badge issue created: #46 - Badge Award: Core Contributor (1 recipients)
====== Complete ======
Contributors: 8
HTML Report: contrib-report-zzx-coder-gitlink-cli.html
Wiki: Contributor Leaderboard 2026-07-02
Badges: Awarded
```
## 注意事项
- 代码变更统计基于采样不是全量数据
- Badge 颁发会创建 issue需要确认权限
- HTML 报告使用 ECharts 需要网络连接
- 建议定期运行如每月跟踪贡献趋势
## 已知问题与解决方案
| 问题 | 原因 | 解决方案 |
|------|------|----------|
| Python `UnicodeDecodeError: 'gbk' codec` | 中文 Windows 默认 GBK 编码gitlink-cli 输出 UTF-8 | `open(file, encoding='utf-8')` |
| `pr +files` JSON 解析失败 | 输出含特殊字符GBK 解码破坏 UTF-8 序列 | `encoding='utf-8'` 读取或用 try/except 跳过 |
| `pr +files` 字段名为 `addition` 不是 `additions` | GitLink API 使用单数形式 | `f.get('addition', f.get('additions', 0))` 兼容 |
| Issue 数据中 `comment_journals_count` 0 | 某些 Issue 确实没有评论 | 正常现象不影响评分 |
## References
- [gitlink-issue](../../gitlink-issue/SKILL.md) Issue 操作
- [gitlink-pr](../../gitlink-pr/SKILL.md) PR 操作
- [gitlink-repo](../../gitlink-repo/SKILL.md) 仓库操作
- [gitlink-wiki](../../gitlink-wiki/SKILL.md) Wiki 操作