{"id":51032679,"url":"https://github.com/opensourceways/pr-issue-report","last_synced_at":"2026-06-22T02:01:47.735Z","repository":{"id":365172864,"uuid":"1270749669","full_name":"opensourceways/pr-issue-report","owner":"opensourceways","description":"每周定时统计 openEuler 社区的待处理 PR 和 Issue，按 maintainer/committer 分组，生成报表邮件发送。","archived":false,"fork":false,"pushed_at":"2026-06-16T08:19:23.000Z","size":29,"stargazers_count":0,"open_issues_count":2,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-16T08:19:55.309Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/opensourceways.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-06-16T02:39:21.000Z","updated_at":"2026-06-16T02:39:25.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/opensourceways/pr-issue-report","commit_stats":null,"previous_names":["opensourceways/pr-issue-report"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/opensourceways/pr-issue-report","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/opensourceways%2Fpr-issue-report","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/opensourceways%2Fpr-issue-report/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/opensourceways%2Fpr-issue-report/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/opensourceways%2Fpr-issue-report/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/opensourceways","download_url":"https://codeload.github.com/opensourceways/pr-issue-report/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/opensourceways%2Fpr-issue-report/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34630770,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-22T02:00:06.391Z","response_time":106,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-06-22T02:01:46.068Z","updated_at":"2026-06-22T02:01:47.727Z","avatar_url":"https://github.com/opensourceways.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"# pr-issue-report\n\n每周定时统计 openEuler 社区的待处理 PR 和 Issue，按 maintainer/committer 分组，生成报表邮件发送。\n\n## 项目结构\n\n```\n├── common.py                # 共享基础设施（日志、SIG解析、邮件映射、Excel生成、SMTP）\n├── pr_statistics.py         # PR 统计入口\n├── issue_statistics.py      # Issue 统计入口\n├── email_whitelist.yaml     # 白名单（gitee_id 列表）\n├── requirements.txt         # Python 依赖\n├── python3.11.env.sh        # Python 3.11 venv 环境\n├── Dockerfile               # 容器化部署\n└── hulk_robot_test/         # Kernel SIG 专用系统（独立项目，仅供参考）\n```\n\n## 环境变量\n\n| 变量 | 说明 |\n|---|---|\n| `email_username` | SMTP 用户名 |\n| `email_password` | SMTP 密码 |\n| `smtp_host` | SMTP 服务器 |\n| `smtp_port` | 端口，默认 465 |\n| `email_sender` | 发件人地址 |\n| `test_reviever_email` | 测试模式：重定向到该地址，仅发 3 封 PR + 3 封 Issue |\n\n## 白名单\n\n`email_whitelist.yaml` 控制邮件投递范围：\n\n| | Maintainer | Committer |\n|---|---|---|\n| **PR 邮件** | 白名单拦截 | 不拦截 |\n| **Issue 邮件** | 白名单拦截 | 白名单拦截 |\n\n白名单文件存在即为启用，不存在则不拦截。\n\n## 运行\n\n```bash\n# 安装依赖\npip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple\n\n# PR 统计\npython3 pr_statistics.py\n\n# Issue 统计\npython3 issue_statistics.py\n```\n\n## 邮件规则\n\n- 维护者 + 仓库提交者：一封邮件，上下两个表分别展示\n- 纯维护者或纯提交者：一封邮件\n- Kernel SIG 跳过（由 hulk_robot_test 独立处理）\n- 测试阶段：设置 `test_reviever_email` 后精确发送 3 封 PR + 3 封 Issue 到该测试地址\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fopensourceways%2Fpr-issue-report","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fopensourceways%2Fpr-issue-report","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fopensourceways%2Fpr-issue-report/lists"}