Skip to content

release: publish standalone bwrap artifacts#21256

Merged
bolinfest merged 1 commit intomainfrom
pr21256
May 6, 2026
Merged

release: publish standalone bwrap artifacts#21256
bolinfest merged 1 commit intomainfrom
pr21256

Conversation

@bolinfest
Copy link
Copy Markdown
Collaborator

@bolinfest bolinfest commented May 5, 2026

Summary

  • Build Linux bwrap before the main release binaries.
  • Export the release bwrap SHA-256 as CODEX_BWRAP_SHA256 so the Codex binary can verify the bundled fallback.
  • Sign, stage, and upload bwrap alongside the primary Linux release artifacts.

Verification

  • YAML parse check for .github/workflows/rust-release.yml

Stack created with Sapling. Best reviewed with ReviewStack.

Copy link
Copy Markdown
Contributor

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 7d9f2f68f7

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment on lines +382 to +385
if [[ "${{ matrix.target }}" == *linux* && "${{ matrix.bundle }}" == "primary" ]]; then
cp "target/${{ matrix.target }}/release/bwrap" "$dest/bwrap-${{ matrix.target }}"
cp "target/${{ matrix.target }}/release/bwrap.sigstore" \
"$dest/bwrap-${{ matrix.target }}.sigstore"
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Bundle bwrap where installers actually look

For Linux releases installed through the documented standalone/npm path, staging bwrap only as a top-level release asset leaves it unused: scripts/install/install.sh installs from the platform npm tarball and only copies codex plus codex-resources/rg, while the launcher searches for codex-resources/bwrap next to the executable. In environments without a system bwrap, those installs will still hit the “no bundled codex-resources/bwrap” path despite this workflow publishing a separate asset; the platform package/installer needs to include or fetch this binary into codex-resources/bwrap.

Useful? React with 👍 / 👎.

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good callout. In this stack, #21256 is intentionally just the producer step: build/sign/stage the Linux bwrap release artifact and burn its digest into the Codex binary. The current consumer/package layout fix is in the next PR, #21257, which places Linux bwrap at vendor/<target>/codex-resources/bwrap for npm and has the current standalone installer copy it to codex-resources/bwrap.

One related wrinkle: #18910/#18901 are introducing a newer standalone archive path that bypasses npm internals. If that stack lands, it should pick up the same layout rule by adding bwrap to the Linux standalone archive staging path and copying it into archive codex-resources/bwrap. So I do not think this should move into #21256, but #18910 should rebase on this stack or take the equivalent archive-staging update.

@bolinfest bolinfest force-pushed the pr21256 branch 2 times, most recently from 3ef40b7 to e8ae081 Compare May 5, 2026 22:55
@bolinfest bolinfest force-pushed the pr21255 branch 2 times, most recently from 1a8cae2 to 74039c1 Compare May 5, 2026 23:13
bolinfest added a commit that referenced this pull request May 6, 2026
**Summary**
- Add `codex-bwrap`, a standalone `bwrap` binary built from the existing
vendored bubblewrap sources.
- Remove the linked vendored bwrap path from `codex-linux-sandbox`;
runtime now prefers system `bwrap` and falls back to bundled
`codex-resources/bwrap`.
- Add bundled SHA-256 verification with missing/all-zero digest as the
dev-mode skip value, then exec the verified file through
`/proc/self/fd`.
- Keep `launcher.rs` focused on choosing and dispatching the preferred
launcher. Bundled lookup, digest verification, and bundled exec now live
in `linux-sandbox/src/bundled_bwrap.rs`; Bazel runfiles lookup lives in
`linux-sandbox/src/bazel_bwrap.rs`; shared argv/fd exec helpers live in
`linux-sandbox/src/exec_util.rs`.
- Teach Bazel tests to surface the Bazel-built `//codex-rs/bwrap:bwrap`
through `CARGO_BIN_EXE_bwrap`; `codex-linux-sandbox` only honors that
fallback in debug Bazel runfiles environments so release/user runtime
lookup stays tied to `codex-resources/bwrap`.
- Allow `codex-exec-server` filesystem helpers to preserve just the
Bazel bwrap/runfiles variables they need in debug Bazel builds, since
those helpers intentionally rebuild a small environment before spawning
`codex-linux-sandbox`.
- Verify the Bazel bwrap target in Linux release CI with a build-only
check. Running `bwrap --version` is too strong for GitHub runners
because bubblewrap still attempts namespace setup there.

**Verification**
- Latest update: `cargo test -p codex-linux-sandbox`
- Latest update: `just fix -p codex-linux-sandbox`
- `cargo check --target x86_64-unknown-linux-gnu -p codex-linux-sandbox`
could not run locally because this macOS machine does not have
`x86_64-linux-gnu-gcc`; GitHub Linux Bazel CI is expected to cover the
Linux-only modules.
- Earlier in this PR: `cargo test -p codex-bwrap`
- Earlier in this PR: `cargo test -p codex-exec-server`
- Earlier in this PR: `cargo check --release -p codex-exec-server`
- Earlier in this PR: `just fix -p codex-linux-sandbox -p
codex-exec-server`
- Earlier in this PR: `bazel test --nobuild
//codex-rs/linux-sandbox:linux-sandbox-all-test
//codex-rs/core:core-all-test
//codex-rs/exec-server:exec-server-file_system-test
//codex-rs/app-server:app-server-all-test` (analysis completed; Bazel
then refuses to run tests under `--nobuild`)
- Earlier in this PR: `bazel build --nobuild //codex-rs/bwrap:bwrap`
- Prior to this update: `just bazel-lock-update`, `just
bazel-lock-check`, and YAML parse check for
`.github/workflows/bazel.yml`


---
[//]: # (BEGIN SAPLING FOOTER)
Stack created with [Sapling](https://sapling-scm.com). Best reviewed
with [ReviewStack](https://reviewstack.dev/openai/codex/pull/21255).
* #21257
* #21256
* __->__ #21255
Base automatically changed from pr21255 to main May 6, 2026 00:14
@bolinfest bolinfest requested a review from a team as a code owner May 6, 2026 00:14
@bolinfest bolinfest merged commit 3ec18a2 into main May 6, 2026
26 of 38 checks passed
@bolinfest bolinfest deleted the pr21256 branch May 6, 2026 00:15
@github-actions github-actions Bot locked and limited conversation to collaborators May 6, 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