What · 是什么
npm 包(6 平台 optionalDependencies)+ GitHub Release 二进制 + install.sh/ps1,Makefile 覆盖率 90% 门禁
npm 包 @alibaba-group/open-code-review 作为分发入口,bin 指向 bin/ocr.js,postinstall 钩子自动下载对应平台原生二进制
6 平台覆盖:@alibaba-group/ocr-{darwin-x64,darwin-arm64,linux-x64,linux-arm64,win32-x64,win32-arm64} 作为 optionalDependencies 按平台安装
install.sh:经 GitHub API 解析 latest tag → 下载后 sha256sum 校验完整性 → 安装到 OCR_INSTALL_DIR(默认 /usr/local/bin),支持 OCR_VERSION 锁定版本与 OCR_GITHUB_MIRROR 镜像加速
install.ps1:面向 PowerShell 5.1+,安装到 %LOCALAPPDATA%\Programs\ocr,免管理员权限
Makefile 提供完整构建链:build / test(race 检测) / coverage(90% 阈值门禁,低于即失败) / vet / check / build-all(6 平台交叉编译,CGO_ENABLED=0 静态二进制) / sha256sum / dist
启动时后台运行 update.js 检查新版本,18 分钟冷却防频繁请求,OCR_NO_UPDATE 可禁用自动更新
Why · 为什么
原理 · Principle
单一 npm 入口 + postinstall 下载二进制,兼顾『一条命令安装』与『原生性能』,比纯 Go 发布链更贴近 JS 生态用户
sha256sum 校验保证供应链安全,镜像变量解决部分网络环境 GitHub 不可达问题
90% 覆盖率门禁与 race 检测保证发布质量,交叉编译产出静态二进制降低运行时依赖
自动更新让用户及时获得修复与安全补丁,冷却与开关避免打扰
How · 怎么做
npm 安装:npm install -g @alibaba-group/open-code-review,postinstall 自动下载当前平台二进制
脚本安装(Linux/macOS):curl -sSL https://raw.githubusercontent.com/alibaba/open-code-review/main/install.sh | bash;自定义目录用 OCR_INSTALL_DIR=/opt/ocr,锁版本用 OCR_VERSION=v1.x.x,国内加速用 OCR_GITHUB_MIRROR
Windows 安装:以 PowerShell 5.1+ 执行 install.ps1,二进制落于 %LOCALAPPDATA%\Programs\ocr
本地开发构建:make build 编译当前平台;make build-all 交叉编译 6 平台;make test 带 race 检测;make coverage 触发 90% 门禁
产出发布物:make sha256sum 生成校验和,make dist 打包分发包
禁用自动更新:设置 OCR_NO_UPDATE=1 后启动不再检查新版本,适合受控生产环境
案例 · Cases
| 代表性案例 |
|---|
| 团队统一安装:运维脚本指定 OCR_VERSION 固定版本 + sha256sum 校验,避免版本漂移 |
| 离线内网环境:使用 OCR_GITHUB_MIRROR 指向内网镜像完成安装与更新 |
| 开发迭代:make test 的 race 检测捕获并发 bug,make coverage 门禁在合并前拦截覆盖率下滑 |
| Windows 无管理员权限:install.ps1 装入用户目录,无需 UAC 即可使用 |
反模式 · Anti-patterns
- 绕过 npm postinstall 或直接下载 GitHub Release 二进制却跳过 sha256sum 校验,供应链风险敞口
- 在代理/内网环境用默认 GitHub 地址安装失败后不换 OCR_GITHUB_MIRROR,而是改用不校验的下载方式
- CI 中每次全新安装最新版(不锁 OCR_VERSION),上游发布即影响构建结果,不可复现
- 误以为 npm 包即完整二进制而忽略 optionalDependencies 平台限制,在不支持平台上静默降级
正反实例论证 · Evidence
正例 · Pro
install.sh + sha256sum 校验安装
curl -sSL https://raw.githubusercontent.com/alibaba/open-code-review/main/install.sh | bash# 经 GitHub API 解析 latest tag 后下载,sha256sum 校验通过才落盘OCR_INSTALL_DIR=/opt/ocr OCR_VERSION=v1.x.x ./install.sh固定版本 + 校验和验证保证供应链安全,OCR_INSTALL_DIR 自定义安装目录,国内环境可用 OCR_GITHUB_MIRROR。
反例 · Con
跳过校验直接下载 Release 二进制
curl -sSL https://github.com/alibaba/open-code-review/releases/download/xxx/ocr-linux-x64 -o ocrchmod +x ocr绕过 npm postinstall 与 sha256sum 校验,无法确认二进制完整性,供应链风险敞口,内网场景易被替换。
正例 · Pro
make coverage 90% 门禁守住发布质量
make test # race 检测make coverage # 覆盖率低于 90% 即失败make build-all # CGO_ENABLED=0 六平台交叉编译make sha256sum distrace 检测 + 覆盖率门禁 + vet/check 在发布前拦截质量问题,静态二进制降低运行时依赖。
反例 · Con
CI 每次装最新版不锁版本
curl -sSL .../install.sh | bash # 无 OCR_VERSION上游发布即影响构建结果,昨日通过的流水线今日失败且不可复现,排障成本高。
正例 · Pro
受控环境禁用自动更新
export OCR_NO_UPDATE=1ocr review启动时不再触发后台 update.js 版本检查(默认 18 分钟冷却),版本行为可预期,适合生产与离线环境。
反例 · Con
内网安装失败后改用不校验方式
# GitHub 直连超时后,不走 OCR_GITHUB_MIRRORwget <不可信镜像> && chmod +x ocr放弃校验的下载方式换来可用性,二进制来源不可信,供应链风险与可用性改善不成比例。
实践资产 · Assets
相关边
本节点没有与其他节点的关系边。