--- name: publish description: 发布软件安装包到用户指定的下载站,生成独立下载页、版本信息、SHA-256 校验值和软件列表;已有 OTA 按项目原协议维护。用户说“发布”“把这个软件放到下载网站”“上传安装包供下载”时使用。 --- # 发布 把构建好的软件发布到一个稳定网页,让使用者打开网址即可找到软件、选择适合设备的版本并下载。 示例下载站:https://d.zhangyue.site/ 。本 Skill 的公开说明:https://d.zhangyue.site/skills/publish/ 。内部调用标识为 `$publish`,对外名称为「发布」。 ## 使用方式 对 AI 助手说:“用发布 Skill,把当前软件发布到我的下载站。”提供项目或安装包位置、目标站点;版本、平台和变更说明可从项目读取。也可以将本文件交给支持 Skill 的助手,作为发布流程说明。 阅读或安装本 Skill 不会获得示例站点的上传权限。下载访客无需账号;发布者需由站点所有者另行提供 SSH 或其支持的部署凭据。没有凭据时,先整理安装包和发布清单,向用户询问凭据所在的本地配置位置,不要求把密钥写进聊天、Skill 或网站。 ## 输入信息 - 软件名称与稳定的 slug,例如 `sample-app`。 - 版本、目标平台与架构。 - 明确选中的可分发安装包,例如 APK、DMG、EXE 或 ZIP。 - 简介、版本说明、安装要求。 - 用户指定的下载站及经过授权的部署方式。 本地发布清单示例(path 仅供本地读取,不进入公开元数据): ```json { "slug": "sample-app", "name": "示例软件", "version": "1.2.0", "summary": "一句话说明软件用途。", "notes": "本次版本的改动。", "installation": "安装要求与操作步骤。", "artifacts": [ {"path": "/absolute/path/Sample-1.2.0.apk", "platform": "Android · ARM64"} ] } ``` ## 发布步骤 1. 检查项目的构建、签名和导出配置;按需要生成安装包,确认版本、平台和文件可用性。明确本次要公开的文件,不上传整个仓库、日志、密钥、存档或私密配置。 2. 查看目标站点的现有结构与发布脚本。已有软件保持原 slug、下载地址和更新协议;新软件建议采用 `/apps//`,安装包放在 `releases//` 下。 3. 为选中的安装包计算大小和 SHA-256。列出具体版本、文件及目标 URL;用户已经要求发布这些内容时,按已授权范围继续。 4. 优先执行项目或站点已有发布工具。没有工具时,用用户授权的 SSH/SCP 等部署方式先上传到私有暂存区,在服务器重新校验大小与哈希,再原子替换到公开目录。同版本同名文件若内容不同,应递增版本,不能静默覆盖。 5. 生成手机和桌面均可阅读的软件页,展示简介、版本、平台、大小、下载按钮、安装说明和校验值。更新首页软件列表时保留其他条目;保留已有旧版本链接,并在修改目录元数据前备份。 6. 安装包先发布,页面和版本元数据后更新。尽量在服务器端加锁,避免并行发布互相覆盖。一次失败后检查原因;权限不足、版本冲突或目标归属不明时不要盲目重试或覆盖。 7. 验证 HTTPS 页面、下载链接、文件大小与哈希,必要时下载完整文件。检查手机布局,向用户提供首页及软件页链接、版本和实际测试范围。 ## OTA 与安装限制 静态下载站提供下载,不会自动让软件获得应用内更新能力。已有 OTA 继续使用项目的签名清单、版本号、固定来源和客户端流程,不用普通 `latest.json` 覆盖签名更新协议。 Android 覆盖更新需相同包名与签名、递增 versionCode,安装由系统确认。签名不同时不要建议用户直接卸载而忽略本地数据。iOS 需合法可用的签名与分发方式,上传 IPA 并不代表任意 iPhone 可安装。其他平台遵循项目原有签名与安装流程。 ## 交付 返回可访问的下载链接、发布版本及验证结果。不要把上传成功当成验证完成,不宣称没有测试过的真机安装或自动更新已经通过。 ## 配置与隐私 凭据由发布者在自己的环境中配置,只读入需要它的进程,不写进公开文档或安装包。日常上传通常不需要 DNS API;仅在用户明确需要域名配置时修改对应记录,保留其他站点。公开说明不包含示例站点的管理密钥或服务器登录配置。