admin d139ff3398 添加 weekly-report 技能:生成项目周报并发送邮件
- SKILL.md 定义完整执行流程(拉取代码、统计commits/PR、生成报告、发邮件)
- send_email.py 从环境变量读取 SMTP 凭证,收件人从项目 report-config.json 读取
- 更新 README 技能列表

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-27 14:02:05 +08:00

3.7 KiB
Raw Blame History

name description argument-hint
weekly-report 生成项目过去7天的周报统计每位协作者的 commit 和 PR生成个人工作日志与项目整体报告通过 SMTP 发送到配置邮箱

生成当前项目过去 7 天的周报并发送邮件。按以下步骤执行,每步完成后告知用户进度。

步骤 1读取配置

读取当前项目根目录的 report-config.json,格式如下:

{
  "recipients": ["boss@company.com", "team@company.com"],
  "project_name": "项目名称"
}

如果文件不存在,停止执行,提示用户在项目根目录创建该文件后重试。

步骤 2计算日期范围

用 Python 计算日期,避免平台差异:

python -c "from datetime import date, timedelta; d=date.today()-timedelta(days=7); print(d)"

步骤 3拉取最新代码

git pull origin main

如果当前不在 git 仓库内,停止并提示用户。

步骤 4获取过去 7 天的提交记录

git log origin/main --since="7 days ago" --format="%an|||%ae|||%ad|||%s" --date=short --no-merges

将输出按 ||| 分割,整理为结构化数据(作者姓名、邮箱、日期、提交说明)。

步骤 5获取过去 7 天合并的 PR

gh pr list --state merged --base main --limit 100 --json number,title,author,mergedAt,additions,deletions

过滤 mergedAt 在过去 7 天内的 PR按作者分组。

如果 gh 命令不可用,跳过此步并在报告中注明。

步骤 6生成报告内容

个人周报(每位协作者一份)

格式要求:

  • 姓名与提交统计commit 数、PR 数、增删行数)
  • 合并 PR 列表(编号、标题)
  • 关键 commit 摘要(按日期列出,去除 merge commit
  • 工作总结2-3 句话,用中文概括本周主要工作)

项目整体进度报告

格式要求:

  • 统计摘要:参与人数、总 commit 数、合并 PR 总数
  • 主要完成内容(按功能或模块归类,中文)
  • 整体进度评估(根据提交内容客观描述)
  • 如有未合并的 open PR列出数量作为下周关注点

拼装 HTML 报告

将个人周报和整体报告拼装成一份 HTML 邮件,写入临时文件:

python -c "
from datetime import date
filename = f'/tmp/weekly_report_{date.today().strftime(\"%Y%m%d\")}.html'
print(filename)
"

HTML 结构建议:

  1. 标题:【周报】<project_name> - <日期范围>
  2. 项目整体报告(放在最前)
  3. 分割线
  4. 各协作者个人报告(每人一节)

步骤 7检查 SMTP 环境变量

在发送前,检查以下环境变量是否全部存在:

python -c "
import os, sys
required = ['SMTP_HOST', 'SMTP_PORT', 'SMTP_USER', 'SMTP_PASSWORD']
missing = [k for k in required if not os.environ.get(k)]
if missing:
    print('缺少环境变量:' + ', '.join(missing))
    sys.exit(1)
else:
    print('环境变量检查通过')
"

如果有缺失,停止执行,提示用户配置对应环境变量:

变量 说明 示例
SMTP_HOST SMTP 服务器地址 smtp.qq.com
SMTP_PORT 端口SSL用465STARTTLS用587 465
SMTP_USER 发件人邮箱 noreply@company.com
SMTP_PASSWORD SMTP 密码或授权码 your-auth-code

绝对不要将这些值硬编码在任何文件中。

步骤 8发送邮件

使用 Glob 工具找到与本 SKILL.md 同目录的 send_email.py 的绝对路径,然后执行:

python <send_email.py的绝对路径> \
  --config report-config.json \
  --subject "【周报】<project_name> <YYYY-MM-DD>" \
  --body-file <步骤6生成的HTML文件路径>

发送成功后,告知用户已发送至哪些邮箱,并清理临时文件。