Skip to content

npm: remove legacy package artifact synthesis#23836

Merged
bolinfest merged 7 commits into
mainfrom
pr23836
May 21, 2026
Merged

npm: remove legacy package artifact synthesis#23836
bolinfest merged 7 commits into
mainfrom
pr23836

Conversation

@bolinfest
Copy link
Copy Markdown
Collaborator

@bolinfest bolinfest commented May 21, 2026

Why

rust-release now publishes codex-package-<target>.tar.gz as the canonical native package payload. npm staging should consume those archives directly instead of keeping legacy synthesis code that fetched rg, copied standalone binaries, and rebuilt an approximate package layout.

That also means the package builder should not know the internal shape of codex-package. It should extract and copy the target payload wholesale so future layout changes stay localized to the archive producer.

The release job stages codex, codex-responses-api-proxy, and codex-sdk together, so native artifact download should be filtered, observable, and shared across component installs. Since that native hydration is now only used by release staging, keeping a separate install_native_deps.py CLI adds an extra wrapper without a real caller.

What Changed

  • Removed legacy codex-package synthesis and related compatibility flags from npm staging.
  • Folded the remaining native artifact hydration code into scripts/stage_npm_packages.py and deleted codex-cli/scripts/install_native_deps.py.
  • Made platform package staging copy the full extracted target directory instead of enumerating package entries.
  • Kept non-codex-package native components under their component directory name instead of using a legacy destination map.
  • Split native staging by component set while sharing one workflow-artifact cache across the invocation.
  • Changed workflow artifact download to select target artifacts by name, print sizes/progress, and reuse cached artifacts.
  • Removed the implicit CI=true default from build_npm_package.py; local CI-shaped runs should set that environment explicitly.
  • Kept npm pack cache/log output in its temporary directory so packing does not write to the user npm cache.

Verification

  • python3 -m py_compile scripts/stage_npm_packages.py codex-cli/scripts/build_npm_package.py
  • python3 -m unittest discover -s scripts/codex_package -p "test_*.py"
  • scripts/stage_npm_packages.py --help
  • codex-cli/scripts/build_npm_package.py --help
  • Ran the release-shaped staging command from rust-release.yml against workflow run https://github.com/openai/codex/actions/runs/26240748758 with CI=true set locally to match GitHub Actions:
CI=true python3 ./scripts/stage_npm_packages.py \
  --release-version 0.133.0 \
  --workflow-url https://github.com/openai/codex/actions/runs/26240748758 \
  --package codex \
  --package codex-responses-api-proxy \
  --package codex-sdk

That completed successfully, downloaded only the six target artifacts once, reused the cache for codex-responses-api-proxy, and produced all nine npm tarballs. Generated tarballs and staging/artifact temp dirs were cleaned afterward.

Base automatically changed from pr23833 to main May 21, 2026 15:48
bolinfest added a commit that referenced this pull request May 21, 2026
## Why

Installing `@openai/codex` currently places a Dotslash `rg` manifest at
`node_modules/@openai/codex/bin/rg`, even though the native optional
dependency already ships the actual helper under
`vendor/<target>/codex-path/rg`. The launcher prepends that `codex-path`
directory, so the top-level `bin/rg` file is redundant in the npm
install.

The remaining direct consumers of the manifest are package-building
paths: `scripts/codex_package/ripgrep.py` and
`codex-cli/scripts/install_native_deps.py`. Keeping the manifest under
`codex-cli/bin` makes it look like a shipped npm binary, so this moves
it next to the package-builder code that owns it. The checked-in
`@openai/codex` package metadata should likewise describe only the meta
package payload; generated platform packages continue to publish
`vendor`.

## What Changed

- Moved the Dotslash ripgrep manifest from `codex-cli/bin/rg` to
`scripts/codex_package/rg`.
- Updated the package builder, npm native-artifact hydrator, README, and
CLI help text to reference the new manifest location.
- Stopped `codex-cli/scripts/build_npm_package.py` from copying `rg`
into the `@openai/codex` meta package.
- Narrowed the checked-in meta package `files` whitelist to
`bin/codex.js`.

## Verification

- `python3 -m unittest discover -s scripts/codex_package -p "test_*.py"`
- `python3 -m unittest discover -s codex-cli/scripts -p "test_*.py"`
- `python3 -m py_compile codex-cli/scripts/build_npm_package.py
codex-cli/scripts/install_native_deps.py
scripts/codex_package/ripgrep.py scripts/codex_package/cli.py
scripts/stage_npm_packages.py`
- `codex-cli/scripts/build_npm_package.py --package codex --version
0.0.0-test --pack-output <tmp>/codex-meta-no-vendor.tgz`
- `tar -tf <tmp>/codex-meta-no-vendor.tgz` showed only
`package/bin/codex.js`, `package/package.json`, and `package/README.md`.
- Direct staging check showed `codex` uses `files: ["bin/codex.js"]`
while `codex-darwin-arm64` still uses `files: ["vendor"]`.

---
[//]: # (BEGIN SAPLING FOOTER)
Stack created with [Sapling](https://sapling-scm.com). Best reviewed
with [ReviewStack](https://reviewstack.dev/openai/codex/pull/23833).
* #23836
* __->__ #23833
@bolinfest bolinfest enabled auto-merge (squash) May 21, 2026 20:37
@bolinfest bolinfest merged commit b20e969 into main May 21, 2026
31 checks passed
@bolinfest bolinfest deleted the pr23836 branch May 21, 2026 20:43
@github-actions github-actions Bot locked and limited conversation to collaborators May 21, 2026
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants