ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

opencodex v2.7.29 发布全流程解析:从 dev 合并到 npm publish 的自动化门禁与验证

opencodex v2.7.29 发布全流程解析:从 dev 合并到 npm publish 的自动化门禁与验证 【免费下载链接】opencodexUniversal provider proxy for OpenAI Codex Claude Code — use any LLM (Claude, Gemini, Grok, DeepSeek, Ollama…) with Codex CLI, App, SDK, and Claude Code项目地址https://gitcode.com/gh_mirrors/ope/opencodex点击查看免费下载导读本文以 devlog/_fin/260721_release-v2729 中的 v2.7.29「Merge Release」阶段为骨架完整还原 opencodexnpm 包名bitkyc08/opencodex一次补丁版本发布的执行链路分支合并、发布前门禁类型检查 / 全量测试 / 隐私扫描、版本号提升、受保护分支推送、CI 等待、Release workflow 分发与最终 dist-tag 验证。读完本文你将掌握bun scripts/release.ts version --publish这条命令背后每一步在做什么、为什么这样做以及如何用npm view独立核验发布结果。一、本次发布的目标与变更范围v2.7.29 是一次仅做合并与发布的补丁版本迭代目标在 000_plan.md 中写得很清楚Objective把dev分支合并进main并将 v2.7.29 发布到 npm约束不引入破坏性变更不做配置 schema 改动release.ts强制要求必须位于main分支、工作区干净、tsc通过、测试通过、隐私扫描通过验收标准合并无冲突c1、tsc退出码为 0c2、测试套件退出码为 0c3、npm view bitkyc08/opencodex dist-tags的latest为2.7.29c4。自 v2.7.28 以来的 13 个 commit 中计划文档记录的关键变更包括修复 Alibaba Token Plan 自定义 Base URL 被覆盖的问题allowBaseUrlOverride: true修复qwen3.8-max-preview的reasoning_content保留问题新增 Cloudflare Workers AI 提供方支持PR #191修复ocx stop/start后 GUI 请求日志丢失的问题PR #195更新后硬性固定监听端口PR #193其余包括ocx accountCLI 文档、redaction 修复、provider-quotas 路由PR #180等。值得注意的是当前仓库根目录 package.json 的版本号已经是2.61.0说明版本线早已越过 2.7.29本文讲述的是当时那次发布的流程机制这套机制至今仍在使用只是门禁内容在 scripts/release.ts 中持续演进。二、一键发布命令形态与整体流程2.1 命令语法发布助手支持三种调用方式见 scripts/release.ts 头部注释# 指定版本本次发布使用 bun scripts/release.ts 2.7.29 --publish # 由脚本从 dist-tags 与远程 tag 推导下一个版本 bun scripts/release.ts --bump patch --publish # 仅观察最近一次 Release workflow 的运行 bun scripts/release.ts watch其中--publish是真发布开关不带该参数时版本提升提交/推送照常发生但 Release workflow 的 npm 发布步骤是 dry-run。这意味着 dry run 也可以完整走通流程、把真实发布 commit 推到远端并通过 CI——这正是设计意图dry run 的目的就是用真实 commit 演练整个发布链路。2.2 流程总览按 010_phase1.md 的 Steps 与release.ts的实现一次完整发布由以下阶段组成分支合并git checkout main→git merge devfast-forward 或 merge commit发布前门禁preflight类型检查、全量测试、隐私扫描、依赖审计、版本唯一性与前进性检查版本提升npm version 2.7.29 --no-git-tag-version仅改package.json不打本地 tag提交并推送release: v2.7.29受保护分支走专用 SSH deploy key等待 CI等待ci.ymlCross-platform CI与service-lifecycle.yml对发布 SHA 全部成功分发并观察gh workflow run release.yml携带版本/tag/expected-sha 参数分发随后 watch 直到结束。三、发布前门禁什么条件才允许出包release.ts的 preflight 阶段是一个不满足就 abort的硬门禁且大量检查是联网实时校验而非依赖本地缓存。3.1 分支与工作区git rev-parse --abbrev-ref HEAD # 必须是 main 或 preview git status --porcelain # 必须为空工作区干净main分支只能发布稳定 semver不含-后缀preview分支只能发布X.Y.Z-preview.YYYYMMDD[.N]形式的预发布版本且main必须使用latestdist-tag、preview必须使用previewdist-tag二者错配直接拒绝release.ts。3.2 版本唯一性与通道前进性脚本会并行做三类是否已存在检查release.tsnpm 上是否已有bitkyc08/opencodex2.7.29npm view探测 E404远端 Git 是否已有v2.7.29taggit ls-remote含 peeled 引用GitHub 是否已有同名 Releasegh release view。任何一项命中即判为部分或全部已使用要求人工选择下一个未使用的补丁版本。此外还有一个容易被忽略的前进性断言release.ts新版本必须让latest通道的 tip严格前移防止从落后于主线的 dev 分支切出一个已过时但未使用的版本号造成通道回退。3.3 依赖审计、类型检查与测试bun run audit:high # 根目录 gui 目录两级依赖审计 bun x tsc --noEmit # 类型检查 bun test --isolate tests ... # 全量测试含分片隔离策略 bun run privacy:scan # 隐私扫描bun scripts/privacy-scan.tspackage.json中的脚本定义package.json给出了确切命令test为bun scripts/test.tstypecheck为bun x tsc --noEmitaudit:high为bun audit --audit-levelhigh cd gui bun audit --audit-levelhigh。测试隔离策略是本文档值得深挖的演进点。010 文档中写的是bun test --isolate tests整个目录单进程而当前 release.ts 已经改为与 CI 完全一致的分组方式先排除掉 storage-policy 与 api-usage 这类 Worker 密集的测试文件--path-ignore-patterns再把这些文件逐个用独立的bun test --isolate file进程跑。原因在代码注释中讲得很直白整目录单进程会跑出 CI 从不使用的分组方式导致门禁在api-usage上失败而同一 commit 的所有 CI job 全绿——这是最坏的门禁形态挡住了好版本还让人不再信任它。当前实现与 scripts/ci/run-bun-test-batches.sh 中is_general_test_file的排除名单api-storage-policy*.test.ts、api-storage.test.ts、api-usage.test.ts以及 .github/workflows/ci.yml 中独立的storage-policy与api-usagejob 一一对应。3.4 隐私扫描privacy:scan对应 scripts/privacy-scan.ts是 opencodex 作为多 Provider 代理的合规红线扫描仓库与产物中是否泄漏 token、密钥、凭据等敏感信息。它同时是 package.json 中prepush钩子的一部分prepush typecheck gui lint test privacy scan gui doctor说明该扫描不止在发布时执行日常推送也会触发。四、版本提升、提交与受保护分支推送4.1 幂等化的版本提升npm version 2.7.29 --no-git-tag-version--no-git-tag-version表示只改package.json、不创建本地 tag版本 tag 由 Release workflow 在 npm 发布成功后创建。release.ts对已处于目标版本的情况做了幂等处理release.ts如果package.json已经是目标版本则跳过提升——否则 dry run 之后再跑--publish会因npm version报 Version not changed 而卡死这正是历史上真实踩过的坑。4.2 受保护分支的 SSH 发布密钥main与preview分支带有要求 PR 的 branch ruleset管理员绕过方式为bypass_mode: pull_request——能合并 PR但不能直接 push。release.ts在注释中记录了 v2.29.0 发布正是死在这个环节。解决方案不是运行时关掉保护那是 crash-open进程在关闭与恢复之间死掉会让分支处于无保护状态且窗口期内所有管理员都获得绕过能力而是专用的 write deploy keyrelease.ts通过环境变量OCX_RELEASE_SSH_KEY指定私钥路径只有版本提升的那一次 push 使用它GIT_SSH_COMMANDssh -i key -o IdentitiesOnlyyespush 目标从origin远端 URL 推导https://…转为git…fork 场景可用OCX_RELEASE_SSH_REPO覆盖isSshRemote与sshTargetFromOrigin会拒绝一切带凭据的 URL防止 token 被折叠进 push 目标并被失败命令打印到终端与日志release.ts。# 需要时显式指定否则走普通 push 路径 OCX_RELEASE_SSH_KEY/path/to/deploy_key \ bun scripts/release.ts 2.7.29 --publish未设置该变量时push 行为与普通git push origin branch完全一致贡献者或 CI clone 不受影响——这是按路径 opt-in 的设计。五、等待 CI 与 Release workflow 分发5.1 等待两个 workflow版本提升 commit 推送后release.ts依次等待Cross-platform CIci.yml20 分钟超时、10 秒轮询CI_WAIT_TIMEOUT_MS/CI_POLL_MS按--commit sha过滤后寻找statuscompleted conclusionsuccess的运行一旦发现任何失败结论立即 abortService lifecycleservice-lifecycle.yml因为版本提升必然触碰package.json而 release.yml 的 service gate 要求 release SHA 已有一条成功的 Service lifecycle 运行所以也要等它否则分发会与还在跑的 workflow 竞争。5.2 实时远端守卫与分发分发前有一道最后防线release.ts用git ls-remote实时读取网络上的远端分支头与本地 release SHA 比对。本地 remote-tracking ref 可能落后数分钟而workflow_dispatch解析的是可变分支——如果不做这步检查就可能发布一个未审计的新 commit。比对通过后才执行gh workflow run release.yml \ --ref branch \ -f version2.7.29 \ -f taglatest \ -f expected-shareleaseSha \ -f dry-runfalse随后脚本轮询查找刚分发的 Release run 并gh run watch直到结束。5.3 Release workflow 的双重防线.github/workflows/release.yml 定义了 workflow_dispatch 输入version必须等于 package.json、taglatest/preview、dry-run默认 true、expected-sha必需发布 commit 的不可变 SHA。第一个 jobvalidate-dispatch会运行 .github/scripts/release-dispatch-guard.cjs该文件位于.github目录内校验GITHUB_SHA与expected-sha一致拒绝为移动后的分支发布。随后package-standalone矩阵在五个平台/目标上构建独立二进制bun-linux-x64、bun-darwin-arm64、bun-darwin-x64、bun-windows-x64、bun-linux-arm64其中三个带 smoke 测试。npm 发布本身通过 Trusted PublishingOIDC完成不需要 NPM_TOKENrelease.ts。六、发布验证与独立核验010 文档给出的最终验证命令与验收标准 c4 一致npm view bitkyc08/opencodex dist-tags --json # 期望输出中包含 latest: 2.7.29这是发布是否真正生效的独立证据——不依赖发布脚本自身的输出而是直接查询 npm registry 的 dist-tag 元数据。配合前文本地git tag不在发布路径内版本 tag 由 workflow 在 npm 发布后创建因此npm view才是权威验收点。七、版本线工具链发布背后的秩序保障010 文档只描述了发 2.7.29但支撑版本号合法性的是一套独立的版本线模块 scripts/version-line.ts解析与比较parseVersion/compareVersions实现严格 semver 排序可选v前缀、pre-release 段、忽略 build metadata下一个稳定版nextStableRelease从latestdist-tag 与远端稳定 tag 中取最新作为基数做 bump若存在更高核心的 preview 未关闭会拒绝 patch bumphigher-core preview is open下一个 previewnextPreviewRelease生成X.Y.Z-preview.YYYYMMDD[.N]带日期戳回退检测与同一天序数递增可发布断言assertReleasable要求候选版本严格高于全部已发布 tagdry run 可放行tag 恰好指向当前 head的唯一例外。在--bump模式下release.ts通过git ls-remote --tags --refs origin refs/tags/v*拉取远端 tag 集合交给上述函数推导版本因此本地 checkout 即使 tag 陈旧或缺失也不影响推导——远端才是版本线的所有权人。八、关键路径速查环节文件关键内容发布执行器scripts/release.tspreflight → bump → push → wait CI → dispatch → watch版本线逻辑scripts/version-line.tssemver 解析、next stable/preview、assert-releasableCI 工作流.github/workflows/ci.yml分片测试、storage-policy/api-usage 独立 job、gates发布工作流.github/workflows/release.ymldispatch 守卫、多平台 standalone、npm 发布测试批处理scripts/ci/run-bun-test-batches.sh分片/批大小/超时、隔离文件排除名单脚本定义package.jsontest/typecheck/audit:high/privacy:scan与prepush钩子九、结语v2.7.29 的发布看起来只是合分支、升版本、发 npm三句话但实现层面是双 workflowCI Service lifecycle门禁、联网实时版本校验、受保护分支专用密钥、分发前实时 SHA 守卫、OIDC 免 token 发布的完整体系。从 010 文档记录的bun test --isolate tests到当前实现的分组隔离也印证了这套门禁始终在与 CI 的真实形态对齐——发布脚本不是 CI 的简化模拟而是 CI 的一致性执行者。需要实践时克隆仓库后先跑一次不带--publish的 dry run 观察整条链路再用npm view bitkyc08/opencodex dist-tags --json核验通道状态即可。赞分享【免费下载链接】opencodexUniversal provider proxy for OpenAI Codex Claude Code — use any LLM (Claude, Gemini, Grok, DeepSeek, Ollama…) with Codex CLI, App, SDK, and Claude Code项目地址https://gitcode.com/gh_mirrors/ope/opencodex点击查看免费下载相关推荐opencodex 发布推广实战dev → main → preview 三线合并与 npm 发布全流程opencodex 发布推广实战dev → main → preview 三线合并与 npm 发布全流程 本指南讲解 opencodex 项目Universopencodex 双通道发布流水线实战从 dev 合并到 npm 的 latest/preview 双 dist-tag 发布opencodex 双通道发布流水线实战从 dev 合并到 npm 的 latest/preview 双 dist tag 发布 opencodexUnivopencodex 发布工程实战从 v2.1.8 发布计划解读版本门禁、CI 验证与 npm 可信发布流水线opencodex 发布工程实战从 v2.1.8 发布计划解读版本门禁、CI 验证与 npm 可信发布流水线 本文以仓库中的 v2.1.8 发布计划 http上一篇低成本服务器改造Amlogic S905X设备Armbian系统网络优化全指南下一篇突破网盘限速的7大实用技巧揭秘直链下载工具的高效使用指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表