mirror of
https://github.com/iflytek/skillhub.git
synced 2026-11-14 09:01:16 +00:00
fix(ci): tolerate npm scanning before DSH availability (#987)
Allow npm publish-time scanning to finish before read-only integrity verification times out; document the independently verified 0.3.0 release. Signed-off-by: XiaoSeS <87064762+XiaoSeS@users.noreply.github.com>
This commit is contained in:
parent
c4c3d5b63c
commit
1e8952f71d
5 changed files with 31 additions and 11 deletions
6
.github/workflows/release-dsh-plugin.yml
vendored
6
.github/workflows/release-dsh-plugin.yml
vendored
|
|
@ -99,13 +99,13 @@ jobs:
|
|||
PACKAGE_NAME: ${{ needs.validate.outputs.package_name }}
|
||||
VERSION: ${{ needs.validate.outputs.version }}
|
||||
run: |
|
||||
# Public metadata can remain cached for up to five minutes after upload.
|
||||
# npm scans uploads before availability; processing can exceed 15 minutes.
|
||||
# Retry only the read; never repeat npm publish after an uncertain response.
|
||||
for attempt in {1..12}; do
|
||||
for attempt in {1..40}; do
|
||||
if npm view "$PACKAGE_NAME@$VERSION" dist.integrity --json --prefer-online --fetch-retries=0 --fetch-timeout=10000 > published-integrity.json; then
|
||||
break
|
||||
fi
|
||||
if [ "$attempt" -eq 12 ]; then
|
||||
if [ "$attempt" -eq 40 ]; then
|
||||
exit 1
|
||||
fi
|
||||
sleep 30
|
||||
|
|
|
|||
|
|
@ -173,7 +173,7 @@ SaaS 使用其现有流水线部署;公共接口契约、测试数据规则与
|
|||
1. 审核包名及正式版本,将可发布 manifest 显式设为 `private: false`,完成候选版本验收并创建对应 tag。
|
||||
2. 核验仓库现有 `NPM_TOKEN` 对目标包和 tag 的发布权限,可以复用 CLI 使用的仓库 secret,无需重复配置。工作流引用的 `dsh-npm` Environment 不存在时 GitHub 会自动创建,但不自动配置审批规则;如设置了保护规则,发布还须满足这些规则。
|
||||
3. 从同一 tag 手动运行工作流并选择 `publish=true`。版本身份校验后复用 `check-dsh-plugin.yml` 的完整矩阵,所有组合成功才进入发布环境。发布负责人须下载本次运行的 `skillhub-dsh-release-candidate`,核对 tarball 与 SHA512SUMS,并关联该候选包的隔离 DSH 验收记录及本次明确授权;配置了审批规则时由审批者核对后批准。缺少验收结果时不继续发布。`publish=false` 和后续 `publish=true` 是两次独立构建,不能仅凭 tag 相同认定包字节相同;如果复用前次验收,须先确认 SHA-512 一致,否则重新验收本次候选包。
|
||||
4. 发布固定的 Linux/Node 24.2.0 检查产物,不在发布阶段重新构建。候选归档前读取 tarball 内的 `package/package.json`,重新验证包名、版本与 private 条件;不只信任源码 manifest。上传前校验 SHA-512,npm 返回成功后比较 Registry 的 `dist.integrity` 与候选 tarball。新版本刚上传后,公开读取可能短暂返回 404;使用 `--prefer-online` 读取,最多读取 12 次、失败后间隔 30 秒,单次 fetch 超时为 10 秒,以覆盖观察到的五分钟公开元数据缓存;不重复执行 `npm publish`。这些是读取重试参数,不是 npm 进程的严格墙钟时限。上传成功与公开包验证成功分别记录,超过验证期限仍须报告未完成。
|
||||
4. 发布固定的 Linux/Node 24.2.0 检查产物,不在发布阶段重新构建。候选归档前读取 tarball 内的 `package/package.json`,重新验证包名、版本与 private 条件;不只信任源码 manifest。上传前校验 SHA-512,npm 返回成功后比较 Registry 的 `dist.integrity` 与候选 tarball。npm 会在开放安装前扫描新上传的包,处理期间公开读取可能返回 404,并非单纯客户端缓存。使用 `--prefer-online` 读取,最多读取 40 次、失败后间隔 30 秒,单次 fetch 超时为 10 秒,提供约 20 分钟的等待窗口;不重复执行 `npm publish`。npm 处理可能超过该窗口,参见 [官方发布扫描说明](https://github.blog/changelog/2026-07-28-npm-publish-time-malware-scanning-and-dual-use-metadata/)。这些是读取重试参数,不是 npm 进程的严格墙钟时限。上传成功与公开包验证成功分别记录,超过验证期限仍须报告未完成。
|
||||
|
||||
预发行版本使用 npm `next`,正式版本使用 `latest`。版本已经存在或发布失败时工作流失败,不把错误当成成功;排查后按实际 Registry 状态处理,不覆盖已发布版本。该工作流不创建 GitHub Release、不部署服务端;发布后仍须按下节在干净 DSH 环境安装验收,完整性相同不能替代功能验收。
|
||||
|
||||
|
|
|
|||
|
|
@ -2,9 +2,20 @@
|
|||
|
||||
## 版本与交付状态
|
||||
|
||||
本次交付版本为 `@astron-team/skillhub-dsh@0.2.1`,对应独立标签 `dsh-v0.2.1`。本节描述待发布版本;npm 上传、公开包完整性及发布后验收须分别确认。已发布的 `0.1.0`、`0.1.1` 和 `0.2.0` 保持不变。
|
||||
本次交付版本为 `@astron-team/skillhub-dsh@0.3.0`,对应独立标签 `dsh-v0.3.0`。[功能 PR #986](https://github.com/iflytek/skillhub/pull/986) 已合并;发布流水线、公开包完整性和发布后验收分别记录于 [验证摘要](verification.md)。已发布版本保持不变。
|
||||
|
||||
DSH 基线仍为 `0.2.0-rc.2`,Node 为 `>=24.2.0 <25`,沿用下述两组完整 Cordis 组合。`0.2.0` 搜索安装状态已通过 Linux Host、真实浏览器和真实模型验收;本轮正式 SaaS 基线测试使用已发布 `0.2.0`,不调用模型。`0.2.1` 候选及平台 CI 结果以本轮实际验收为准,个人电脑桌面客户端和其他 DSH 发行版仍未验收。
|
||||
DSH 基线为 `0.2.0-rc.2`,Node 为 `>=24.2.0 <25`,沿用既有两组完整 Cordis 组合。浏览器与真实模型验收使用 Linux 官方 Host;三平台原生 Host 由 CI 验证,不扩大为个人电脑桌面客户端或其他 DSH 发行版验收。
|
||||
|
||||
## 0.3.0 市场交互与版本管理
|
||||
|
||||
- **卡片直接操作**:点击卡片进入详情,安装、卸载和检查升级使用独立按钮;仅存在当前来源安装时显示状态。内置标签中文展示,未识别标签保留来源名称。
|
||||
- **详情与版本**:隐藏完整 Markdown frontmatter,改善正文排版;短期缓存避免返回详情时反复空白加载。版本接口支持可选 `downloadableOnly`,过滤后再分页并按发布新旧排序,默认管理历史查询保持不变。SaaS 新接口契约需单独同步。
|
||||
- **范围选择**:项目范围只写当前可信工作区,用户范围供当前 DSH Host 的该用户多个项目读取;已有安装默认选中实际范围。对话省略范围时优先使用输入框旁原生问题,取消不写入,缺少问答服务则回退确认卡片。
|
||||
- **安装和卸载**:确认后安装弹窗向右展开,仅展示阶段与结果;当前库存与历史回执分开。卸载从市场、列表和详情原地确认,精简非必要技术信息,保留原预检、幂等和恢复保护。
|
||||
- **版本升级**:支持从已安装版本升级到选定的较新版本,也保留检查最新版入口。切换版本只读取信息,执行升级需要单独确认全部实际目标;同版不重复,旧版不降级,不可可靠排序时阻止升级,本地文件修改仍阻止覆盖。
|
||||
- **默认来源**:保持 `https://skill.xfyun.cn`;自定义地址与显式空地址的断开行为保持不变。不要求单独安装 CLI,不读取 CLI 登录信息,不新增登录或权限功能。
|
||||
|
||||
候选完成构建、类型、Lint、357 项测试及 Linux 官方 DSH 浏览器生命周期验证,覆盖精确非最新版升级、最新版升级、取消、本地修改保护和真实文件核对。真实模型验证原生范围选择及项目安装,不代表技能内容执行。发布后公开包验证独立记录,不以候选结果替代。
|
||||
|
||||
## 0.2.1 默认正式来源
|
||||
|
||||
|
|
@ -35,7 +46,7 @@ DSH 基线仍为 `0.2.0-rc.2`,Node 为 `>=24.2.0 <25`,沿用下述两组完
|
|||
|
||||
- **原生技能中心**:侧栏使用专用 SVG 入口;浏览和已安装视图独立。紧凑头像卡支持首字回退、实际统计、分页、排序和来源提供的标签筛选。
|
||||
- **详情与版本**:文档、版本、安全审核和评论按 `auto/show/hide` 展示;评论只读。可查看并安装指定的可下载版本,重新获取精确凭据,不绕过已有版本的冲突保护。
|
||||
- **对话交互**:搜索结果使用紧凑卡片和明确详情按钮,详情抽屉沿用固定版本与来源校验。搜索本身不安装;用户明确选择并要求安装时,可直接核验原搜索快照后执行。
|
||||
- **对话交互**:搜索结果使用紧凑卡片,详情抽屉沿用固定版本与来源校验。搜索本身不安装;用户明确要求安装时核验原搜索快照,未指定范围则先确认范围,再执行安装。
|
||||
- **安装结果**:主区呈现简洁结果和查看已安装入口,展开安装记录可核验原操作与当前库存;历史完成、当前记录变化、发现状态和模型执行保持区分。
|
||||
- **本地管理**:用户/可信项目安装、主动检查更新、完整目标集合升级、单位置卸载及失效记录清理。不存在自动更新、技能降级或强制覆盖。
|
||||
- **配置与主题**:来源和详情标签使用 shadcn/Radix 组件;支持保存、重置修改、只读与 revision 冲突。“测试连接”读取当前草稿地址而不保存,显示公开目录或基础搜索可读性及耗时,10 秒超时可重试,改地址清除旧结果;不据此宣称下载和所有模块可用。界面跟随 DSH 深浅主题,提供窄屏布局、骨架加载及减少动画设置。
|
||||
|
|
|
|||
|
|
@ -283,6 +283,6 @@
|
|||
|
||||
## 36. 0.3.0 合并与 npm 发布
|
||||
|
||||
- [ ] 36.1 同步主线,独立评审和最终检查通过后合并 PR。
|
||||
- [ ] 36.2 使用 `dsh-v0.3.0` tag 执行官方 npm 发布工作流,验证公开包完整性。
|
||||
- [ ] 36.3 公开包执行官方隔离 Host 安装验收,保留现有人工预览和会话。
|
||||
- [x] 36.1 同步主线,独立评审和最终检查通过后合并 PR(#986)。
|
||||
- [x] 36.2 使用 `dsh-v0.3.0` tag 执行官方 npm 发布工作流;上传后等待扫描完成,独立验证公开包与 CI tarball 一致。
|
||||
- [x] 36.3 公开包完成官方隔离 Profile 安装及生命周期验收;现有预览升级并核对会话和技能文件保留。
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
## 1. 当前结论
|
||||
|
||||
`0.2.1` 已通过 [PR #979](https://github.com/iflytek/skillhub/pull/979) 合并并发布;默认来源为 `https://skill.xfyun.cn`。本轮准备发布 `0.3.0` 开源交互改进,不以历史发布结果代替新代码验证。
|
||||
`0.2.1` 已通过 [PR #979](https://github.com/iflytek/skillhub/pull/979) 合并并发布;默认来源为 `https://skill.xfyun.cn`。`0.3.0` 开源交互改进已通过 PR #986 合并、发布并完成公开包独立验收,结果见本文发布验收记录,不以历史版本结果代替新代码验证。
|
||||
|
||||
2026-10-19 使用公开 npm `0.2.0` 的真实 Linux DSH 插件连接 `https://skill.xfyun.cn`,连接测试、目录、搜索、Markdown 和版本选择通过;选择 `global/scientella@20260724.052402` 实际安装到隔离项目,7 个文件及归档 fingerprint 一致,inventory 来源与目标正确,再搜索显示项目已安装旧版,DSH 发现成功。评论接口 404 按可选能力处理,安全审核 401 按匿名拒绝处理。本轮未调用模型,不据此声明技能实际执行或生产 Pod 已核验。该技能使用日期格式的非 SemVer 版本,版本比较返回 `blocked/unknown-order`,按既有策略不提供升级入口;不得把固定版本安装通过写成升级通过。升级阻断前后文件保持不变;真实卸载后 DSH 发现消失,inventory 与重新搜索的安装记录清空。公开 `0.2.0` 的正式来源基线共 9 项浏览器检查通过,无页面脚本异常。
|
||||
|
||||
|
|
@ -144,3 +144,12 @@
|
|||
自动化回归位于 `plugins/dsh/test/`,包括 `native-scope-choice.test.ts`、`install-control-state.test.tsx`、`installation-progress.test.tsx`、`removal-confirmation.test.tsx`、`upgrade-presentation.test.tsx`、`prepare-upgrade.test.ts` 与 `update-check.test.ts`。详细运行报告和截图保留在仓库外,不作为发布包内容。
|
||||
|
||||
浏览器与真实模型验收环境为 Linux 官方 DSH `0.2.0-rc.2`;macOS/Windows 原生 Host 兼容性由发布 CI 单独验证。升级故障恢复依赖现有事务自动化测试,本次浏览器结果不扩大为所有故障环境验收。发布状态以实际 tag、CI 和公开 npm 包为准。
|
||||
|
||||
## 0.3.0 发布与公开包验收(2026-10-20)
|
||||
|
||||
- [PR #986](https://github.com/iflytek/skillhub/pull/986) 合并;独立 tag 为 `dsh-v0.3.0`。PR 的 15 项检查成功、1 项按配置跳过,包含服务端、Web、真实服务 E2E 与三平台 DSH。
|
||||
- [正式发布运行](https://github.com/iflytek/skillhub/actions/runs/39385741792) 的六组 Linux/macOS/Windows、两档 Node 检查通过,包括原生 Host 及保留 Cordis 组合。npm 接收上传后进入扫描处理,原约五分钟的公开读取校验超时,发布运行因此标为失败;未重复上传。
|
||||
- 扫描结束后,官方 Registry 的 `latest` 确认为 `0.3.0`;独立下载 [公开 npm 包](https://www.npmjs.com/package/@astron-team/skillhub-dsh/v/0.3.0),`dist.integrity`、SHA-512 和全部 tarball 字节均与本次 CI 发布候选一致。上传接收、自动核验超时与后续公开包验收分别记录,不将失败的工作流描述为全绿。
|
||||
- 使用公开 tarball,通过官方安装器装入干净隔离 Profile;复用已安装的官方 DSH 程序,运行基线和插件生命周期探针均通过。该路径不等于重新从网络安装整套 DSH 依赖。
|
||||
- 现有 Linux 预览升级到公开 `0.3.0`,81 个交付文件逐字节核对;15 个历史对话归档及技能状态文件在升级和重启后保持一致。浏览器技能中心加载 3 张联调技能卡片,无页面脚本异常。
|
||||
- 本轮发布后未新增模型请求,不将先前候选的真实模型验收写为公开包的新模型验收;预览使用本地开源市场,不代表 SaaS 新契约已部署。后续发布将公开读取窗口扩大到 40 次、间隔 30 秒,保留严格完整性比对与不重复发布边界。
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue