--- name: weekly-report description: 生成项目过去7天的周报,统计每位协作者的 commit 和 PR,生成个人工作日志与项目整体报告,通过 SMTP 发送到配置邮箱 argument-hint: "" --- 生成当前项目过去 7 天的周报并发送邮件。按以下步骤执行,每步完成后告知用户进度。 ## 步骤 1:读取配置 读取当前项目根目录的 `report-config.json`,格式如下: ```json { "recipients": ["boss@company.com", "team@company.com"], "project_name": "项目名称" } ``` 如果文件不存在,**停止执行**,提示用户在项目根目录创建该文件后重试。 ## 步骤 2:计算日期范围 用 Python 计算日期,避免平台差异: ```bash python -c "from datetime import date, timedelta; d=date.today()-timedelta(days=7); print(d)" ``` ## 步骤 3:拉取最新代码 ```bash git pull origin main ``` 如果当前不在 git 仓库内,停止并提示用户。 ## 步骤 4:获取过去 7 天的提交记录 ```bash git log origin/main --since="7 days ago" --format="%an|||%ae|||%ad|||%s" --date=short --no-merges ``` 将输出按 `|||` 分割,整理为结构化数据(作者姓名、邮箱、日期、提交说明)。 ## 步骤 5:获取过去 7 天合并的 PR ```bash 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 邮件,写入临时文件: ```bash python -c " from datetime import date filename = f'/tmp/weekly_report_{date.today().strftime(\"%Y%m%d\")}.html' print(filename) " ``` HTML 结构建议: 1. 标题:`【周报】 - <日期范围>` 2. 项目整体报告(放在最前) 3. 分割线 4. 各协作者个人报告(每人一节) ## 步骤 7:检查 SMTP 环境变量 在发送前,检查以下环境变量是否全部存在: ```bash 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用465,STARTTLS用587) | `465` | | `SMTP_USER` | 发件人邮箱 | `noreply@company.com` | | `SMTP_PASSWORD` | SMTP 密码或授权码 | `your-auth-code` | **绝对不要将这些值硬编码在任何文件中。** ## 步骤 8:发送邮件 使用 Glob 工具找到与本 SKILL.md 同目录的 `send_email.py` 的绝对路径,然后执行: ```bash python \ --config report-config.json \ --subject "【周报】 " \ --body-file <步骤6生成的HTML文件路径> ``` 发送成功后,告知用户已发送至哪些邮箱,并清理临时文件。