Skip to content

Releases: reactnativecn/react-native-update-cli

v2.29.3

Choose a tag to compare

@sunnylqm sunnylqm released this 14 Oct 02:40
ca5816e
  • parseApk / parseIpa / parseApp / parseAab now print JSON and omit the raw bundle bytes, so the bundleHash content fingerprint is clean to read (#100).

v2.29.2

Choose a tag to compare

@sunnylqm sunnylqm released this 12 Oct 07:54
b86803b

English

Fixes

  • bundle no longer hangs when the .ppk cannot be written: a full disk, a read-only directory, or an output path that is a directory left packing waiting forever. It now fails with the write error and removes the partial file. (#98)
  • No crash on a write error while building a patch or a slimmed native package: such an error could surface as an unhandled rejection and end the process before the partial file was cleaned up. It is now reported normally and the partial file is removed. (#98)

Improvements

  • Fewer dependencies: cgbi-to-png and properties are removed. hermesEnabled in android/gradle.properties is read directly, with the same results for the usual forms (=/:/space separators, comments, last assignment wins). (#98)
  • Faster package commands: uploadApk / uploadIpa / parseApk / parseIpa read the archive once instead of twice. The APK/IPA reader now only parses the fields the CLI uses (version name, pushy_build_time meta-data), and the output is unchanged on real release APKs. (#98)
  • Cheaper version check: the background "newer version available" check only reads the registry's latest tag. It no longer resolves installed copies on every check. The cache location and format are unchanged. (#98)
  • Sentry upload runs sentry-cli sourcemaps upload --help once instead of twice to detect its capabilities. (#98)
  • Hermes base verification: internal cleanup with no behavior change. The diff-transform layout sent with patches is byte-identical for every HBC version. docs/hermes-base-verification.md now covers HBC v99. (#99)

Behavior notes

  • A corrupt HarmonyOS .app now reports the underlying zip error instead of "bundle not found", like .apk / .ipa already did.
  • selectApp with a malformed update.json now fails with the same "failed to parse update.json" error that other commands give.

About 2,700 lines of dead or duplicated code were removed in #98 and #99.

Full Changelog: v2.29.1...v2.29.2

中文

修复

  • .ppk 写不进去时,bundle 不再卡住:磁盘已满、目录只读,或输出路径本身是一个目录时,打包原先会一直等待。现在会直接报出写入错误,并删除写了一半的文件。(#98)
  • 生成补丁包或精简原生包时遇到写入错误,进程不再崩溃:这类错误原先可能变成未处理的 Promise 拒绝,在清理半成品文件之前就让进程退出。现在会正常报错,并删除半成品文件。(#98)

改进

  • 依赖更少:移除了 cgbi-to-png 和 properties。android/gradle.properties 中的 hermesEnabled 改为直接读取,常见写法(=/:/空格分隔、注释、以最后一次赋值为准)的结果与原来一致。(#98)
  • 原生包命令更快:uploadApk / uploadIpa / parseApk / parseIpa 对安装包只扫描一遍,原来要扫两遍。APK/IPA 解析现在只解析 CLI 用到的字段(版本名、pushy_build_time meta-data),在真实 release APK 上的输出不变。(#98)
  • 版本检查更轻:后台的“有新版本”检查只读取 registry 的 latest 标签,不再在每次检查时查找本地已安装的副本。缓存位置和格式不变。(#98)
  • Sentry 上传检测 sentry-cli 能力时,只运行一次 sentry-cli sourcemaps upload --help,原来要运行两次。(#98)
  • Hermes base 校验:内部清理,行为不变。随补丁下发的 diff-transform 布局对所有 HBC 版本逐字节一致。docs/hermes-base-verification.md 补充了 HBC v99 的内容。(#99)

行为说明

  • HarmonyOS .app 文件损坏时,现在会报出底层的 zip 错误,不再提示“找不到 bundle”。这与 .apk / .ipa 原有的行为一致。
  • update.json 格式错误时,selectApp 现在会报出与其它命令相同的“解析 update.json 失败”错误。

#98 和 #99 共删除了约 2,700 行无用或重复的代码。

完整变更:v2.29.1...v2.29.2

v2.29.1

Choose a tag to compare

@sunnylqm sunnylqm released this 12 Oct 03:50
2f68d62

Changes

  • Fewer dependencies: bytebuffer, fs-extra, node-fetch and form-data (and their transitive deps) are replaced by Node built-ins. (#97)
  • Uploads stream over node:http(s) with the same proxy support, Content-Length framing, retries and multipart format; a file that shrinks mid-upload now fails at once instead of waiting out the deadline.
  • APK parsing: resources.arsc is decoded ~5× faster.
  • Fix: app names from UTF-16 resource string pools (older aapt output) were garbled (M\0y\0A\0p\0p\0).
  • Fix: emptying the bundle output directory no longer treats an unreadable directory as already empty.

v2.29.0

Choose a tag to compare

@sunnylqm sunnylqm released this 04 Oct 12:31
4704131
  • feat(hermes): 支持 Hermes 字节码 HBC v99(hermes-compiler 260318099,RN 0.88):HBC 差分变换沿用晚期 v98 文件布局;--verifyHermesBase 等价校验支持 v99 函数头(去 NumCacheNewObject),遇 typed 模式 NewTypedObjectWithBuffer 按无法校验处理
  • ci: 真实编译器矩阵加入 hermes-compiler@260318099.0.4

v2.28.3

Choose a tag to compare

@sunnylqm sunnylqm released this 30 Sep 04:57
3ac05b5
  • feat(publish): 明文 JS bundle 发布时上报 bytecodeVersion 0(不再不报),服务端据此不再把它当作 Hermes 基础包反复下载检查
  • feat(package): 上传原生包时上报内嵌 bundle 的 bytecodeVersion(HBC 版本或 0),服务端退到原生包作基础时只选版本匹配或未知的包
  • 日志:服务端基础包为明文 JS 时显示 plain JS

v2.28.2

Choose a tag to compare

@sunnylqm sunnylqm released this 30 Sep 04:03
7e6ef3e
  • fix(hermes-base): Range 下载的超时取整。之前 bundle 超过 64 KB 时超时为小数,Node 的 AbortSignal.timeout() 报错,按需下载总是退回整包下载
  • feat(hermes-base): 服务端不知道基础包的 HBC 版本时,先读 bundle 前 128 字节;是普通 JS 或其他 HBC 版本就直接放弃,不再下载整个 bundle

v2.28.1

Choose a tag to compare

@sunnylqm sunnylqm released this 29 Sep 12:29
cd20265

Changes

  • cresc: parallel chunked uploads to GCS. Files of 2 MiB or more are uploaded as up to 32 parts, 4 at a time with per-part retries, and composed on the server — much faster over long, lossy links (e.g. from mainland China). Servers that do not support it keep the single upload. (#94)
  • GCS uploads no longer run a pointless TCP latency probe when the primary and backup URLs are the same. (#94)
  • Upload deadline now allows 5 s per MB (about 200 KB/s) on a 30 s base, so slow links no longer time out mid-transfer. (#93)

v2.28.0

Choose a tag to compare

@sunnylqm sunnylqm released this 23 Sep 03:16
b28b95b

English

Features

  • Redact the Hermes base equivalence-check detail before it is reported at version/create. Quoted string operands, function names and file paths coming from compiler stderr become stable tokens (str#<hash>/<length>, fn#<hash>, path#<hash>.<ext>); opcodes, registers, counts and literal kinds are kept, so a report is still triageable. The local console keeps printing the unredacted text. (#87)
  • Report hermesBaseFingerprint: a grouping key computed from the redacted detail with registers, ids and offsets removed, so the same defect groups together across apps and builds. Servers that do not know the field ignore it. (#87)

Test tooling

  • The fuzzer's dedup key is now the same fingerprint function the CLI reports, so a fuzz finding and the same defect seen in the field land in one group. (#87)

Validation and compatibility

  • Passed all seven CI jobs, including the HBC 96 and HBC 98 compiler regressions, Node.js 18.17 runtime checks and the publish dry run.
  • Update-package formats and the Node.js >=18.17.0 requirement are unchanged. The server protocol only gains one optional field.

Full changelog: v2.27.1...v2.28.0

中文

新功能

  • version/create 上报 Hermes base 等价校验的 detail 前先脱敏:引号内的字符串操作数、函数名、编译器 stderr 带出的文件路径替换为稳定标记(str#<hash>/<长度>、fn#<hash>、path#<hash>.<扩展名>),保留 opcode、寄存器、计数和字面量类型,仅凭上报内容仍可排查。本地控制台照常输出原文。 (#87)
  • 新增上报 hermesBaseFingerprint:在脱敏后的 detail 上去掉寄存器、id 与偏移后计算的分组键,同一缺陷在不同应用、不同构建之间归为一组。不认识该字段的服务端会忽略它。 (#87)

测试工具

  • fuzz 的去重键改用与上报相同的指纹函数,fuzz 发现的问题与线上同一缺陷落在同一组。 (#87)

验证与兼容性

  • 通过全部七项 CI 任务,包括 HBC 96 和 HBC 98 编译器回归、Node.js 18.17 运行时检查和发布预演。
  • 更新包格式与 Node.js >=18.17.0 要求不变;服务端协议只新增一个可选字段。

完整变更: v2.27.1...v2.28.0

v2.27.1

Choose a tag to compare

@github-actions github-actions released this 23 Sep 01:26
51e2d32

English

Fixes

  • Fix false Hermes base rejections when DefineOwnById changes operand width and the pretty disassembly truncates property names, including non-ASCII names. Full property names remain checked by the binary/raw audit. (#85)
  • Compare CacheNewObject shapes by their ordered, fully decoded property keys instead of physical table indices. Registers and cache indices remain significant; undecodable references fail safely. (#85)
  • Use neutral account renewal notice prefixes in English and Chinese, without changing the message body or placeholders. (#85)

Test tooling

  • Require all requested positive fuzz comparisons, zero compilation failures, and at least one effective planted difference before a run can succeed. Keep unsuccessful samples for diagnosis. (#85)
  • Mutate actual JavaScript string tokens rather than quote-matching regex results, avoiding invalid source around escaped quotes. Reject missing, empty or invalid --rounds values with exit code 2 before creating output or invoking the compiler. (#85)

Validation and compatibility

  • The merged source commit passed all seven CI jobs, including HBC 96 and HBC 98 compiler regressions, 50 seeded fuzz rounds per compiler, Node.js 18.17 runtime checks, and the publish dry run. The compiler matrix uses react-native@0.77.3, hermes-compiler@250829098.0.16 and hermes-compiler@250829098.0.17.
  • Update-package formats, server protocols and the Node.js >=18.17.0 requirement are unchanged. Both verification passes and the plain-compilation fallback remain in place. The dedicated CacheNewObject tests use synthetic binary fixtures; broader unknown-opcode auditing remains a separate follow-up.

Full changelog: v2.27.0...v2.27.1

中文

修复

  • 修复 DefineOwnById 操作数宽度变化、pretty 反汇编截断属性名时错误拒绝正常 Hermes base 的问题,包括非 ASCII 属性名。完整属性名仍由二进制/raw 核对检查。 (#85)
  • CacheNewObject 按有序、完整解码的属性键比较 shape,不再直接比较物理表索引。寄存器和 cache 索引仍参与比较,无法解码的引用会安全失败。 (#85)
  • 英文和中文的账号续费提示使用中性通知前缀,不改变消息正文或占位符。 (#85)

测试工具

  • fuzz 必须完成全部请求的正例比较、没有编译失败,并至少检查一个有效的植入差异,才能返回成功。保留未成功的样本用于诊断。 (#85)
  • 按真实 JavaScript 字符串 token 进行变异,替代匹配引号的正则,避免在转义引号附近生成非法源码。--rounds 缺值、空值或非法值在创建输出或调用编译器前以退出码 2 拒绝。 (#85)

验证与兼容性

  • 合并后的源码提交通过全部七项 CI 任务,包括 HBC 96 和 HBC 98 编译器回归、每种编译器 50 轮固定种子 fuzz、Node.js 18.17 运行时检查和发布预演。编译器矩阵使用 react-native@0.77.3、hermes-compiler@250829098.0.16 和 hermes-compiler@250829098.0.17。
  • 更新包格式、服务端协议及 Node.js >=18.17.0 要求均未改变。保留两轮校验和普通编译回退。CacheNewObject 专项测试使用合成二进制样本,更全面的未知 opcode 审计仍是独立的后续工作。

完整变更: v2.27.0...v2.27.1

v2.27.0

Choose a tag to compare

@sunnylqm sunnylqm released this 17 Sep 04:53
e096219

English

  • Automatically display the current account, plan, and expiration date when the working directory contains login credentials.
  • Show cached account information immediately and refresh it in a detached background process, without delaying commands or CLI exit. Cache entries are isolated by working directory, brand, and credentials.
  • Warn Pushy paid users when their plan expires in less than 30 days, with a renewal link. Cresc subscriptions do not receive renewal reminders.
  • Advance cached server time when calculating remaining validity; background lookup failures preserve the last successful cache.

中文

  • 工作目录存在登录凭证时,自动展示当前账号、套餐等级和有效期。
  • 优先展示本地缓存,通过独立后台进程刷新,不阻塞命令执行或 CLI 退出;缓存按工作目录、品牌和凭证隔离。
  • Pushy 付费套餐剩余不足 30 天时,显示黄色加粗续费提醒及续费链接;Cresc 自动续费套餐不提醒。
  • 根据缓存后的时间推移重新计算剩余有效期;后台查询失败时保留上次成功的缓存。