添加新 Hap 到合集
当用户提供一个新的鸿蒙 HAP 项目链接(或从 issue 中获取到待收录仓库链接)时,按以下步骤将其收录进 README.md。
第 1 步:查看 issue
在项目根目录用终端运行以下命令拉取本仓库的 issue 列表(需先设置 GITHUB_TOKEN 环境变量):
uv run .agents/skills/add-hap/scripts/fetch_issues.py
脚本会输出 106 号之后(即从 107 号开始)的 open issue 及其正文摘要,从中看是否有人提供了 GitHub 软件仓库链接。
- 如果找到此类 issue,取其中提供的仓库链接作为待收录项目,进入下一步。
- 如果用户已直接提供项目链接,可跳过本步的查找过程,直接使用用户提供的链接。
第 2 步:收集项目信息
访问上一步确定的项目链接(用 fetch 工具抓取 GitHub 仓库页面和 README),收集:
- 项目名:有中文名就用中文名(通常在 README 中),没有就用仓库英文名。
- 项目简介:根据 README 用中文写一句话简短描述软件功能(不超过 30 字左右,与表格中现有条目风格一致)。
第 3 步:判断目标分类表格
按优先级依次检查项目的 module.json5 中的 deviceTypes:
- 抓取
entry/src/main/module.json5(GitHub raw 链接形如:https://raw.githubusercontent.com/<owner>/<repo>/<branch>/entry/src/main/module.json5,分支通常是main或master)。 - 如果是 Flutter 跨端项目,鸿蒙代码在
ohos子目录,改抓ohos/entry/src/main/module.json5。 - 分类规则:
deviceTypes同时包含phone、tablet和2in1→ 一次开发,多端部署- 包含
phone、tablet但没有2in1→ 鸿蒙手机/平板 - 只有
2in1→ 鸿蒙电脑 - 抓不到 module.json5 时,根据 README 判断;仍无法判断时,默认放入 一次开发,多端部署
第 4 步:获取最新 release 日期
访问项目的 releases 页面(https://github.com/<owner>/<repo>/releases),获取最新一次 release 的发布日期,格式化为 MM-DD(如 07-31)。如果最新 release 是去年发布的,使用 YYYY-MM-DD 格式。
第 5 步:写入 apps.yaml 数据源并生成 README
在项目根目录的 apps.yaml 中对应该项目的分类列表下追加一条记录(缩进 4 空格加 - name:,后续字段缩进 6 空格),格式为:
- name: 项目名
url: https://github.com/<owner>/<repo>
link: https://github.com/<owner>/<repo>/releases
desc: 一句话描述。
time: MM-DD
字段说明:
link通常等于url+/releases;如果项目没有 release(如用 Telegram 群组分发),link填实际下载地址。time用第 4 步获取的日期:今年发布用MM-DD,去年及更早发布用YYYY-MM-DD。- 下载链接若以
/releases/结尾需去掉末尾斜杠。
然后在项目根目录用终端运行以下命令生成 README(生成器会自动按日期倒序排序,无需手动插行):
uv run .agents/skills/add-hap/scripts/generate_readme.py
生成后应同时提交 apps.yaml 与 README.md 两个文件的变更。
第 6 步:更新贡献者名单并生成 SVG
- 检查项目的开发者(仓库 owner 的用户名)是否已在
CONTRIBUTING.md中(该文件每行格式为- [显示名](https://github.com/用户名),列表按首字母排序)。 - 如果已存在,跳到下一步。
- 如果不存在,将该开发者按
- [用户名](https://github.com/用户名)格式插入到CONTRIBUTING.md的正确排序位置,然后在项目根目录用终端运行:
uv run .agents/skills/add-hap/scripts/contributers.py
(uv 不带参数运行,脚本需要 GITHUB_TOKEN 环境变量来获取头像。如果运行失败,报告错误并告知用户。)
第 7 步:回复并关闭 issue
确认 apps.yaml、README.md(及 CONTRIBUTING.md/SVG)的变更已提交后,如果本次收录的项目来自第 1 步发现的某个 issue,用终端运行以下命令回复该 issue 并关闭它(需设置 GITHUB_TOKEN 环境变量):
uv run .agents/skills/add-hap/scripts/close_issue.py <issue编号>
脚本会向该 issue 发表评论「已收录,感谢分享」并将其置为 closed。
注意:
- 仅当项目是从 issue 中获取的才需要本步;如果用户直接提供了项目链接、没有对应 issue,则跳过本步。
- 如果回复或关闭失败(如评论已存在、issue 已被关闭),报告错误并告知用户。
第 8 步:广播新收录通知
在项目根目录用终端运行以下命令,向订阅者广播本次新收录的应用(需先设置 BROADCAST_UNION_ID 和 BROADCAST_CHANNEL_ID 环境变量):
uv run --env-file .env .agents/skills/add-hap/scripts/broadcast.py 新收录应用:<应用名1>、<应用名2>、<应用名3>
脚本会调用 common.send_broadcast 向订阅者推送一条纯文本消息。若环境变量未设置或接口失败,脚本会打印提示但不影响本次收录结果;本步可选,广播失败无需重试。