As stated in `codex-rs/README.md`: Today, Codex CLI is written in TypeScript and requires Node.js 22+ to run it. For a number of users, this runtime requirement inhibits adoption: they would be better served by a standalone executable. As maintainers, we want Codex to run efficiently in a wide range of environments with minimal overhead. We also want to take advantage of operating system-specific APIs to provide better sandboxing, where possible. To that end, we are moving forward with a Rust implementation of Codex CLI contained in this folder, which has the following benefits: - The CLI compiles to small, standalone, platform-specific binaries. - Can make direct, native calls to [seccomp](https://man7.org/linux/man-pages/man2/seccomp.2.html) and [landlock](https://man7.org/linux/man-pages/man7/landlock.7.html) in order to support sandboxing on Linux. - No runtime garbage collection, resulting in lower memory consumption and better, more predictable performance. Currently, the Rust implementation is materially behind the TypeScript implementation in functionality, so continue to use the TypeScript implmentation for the time being. We will publish native executables via GitHub Releases as soon as we feel the Rust version is usable.
88 lines
2.8 KiB
YAML
88 lines
2.8 KiB
YAML
name: rust-ci
|
|
on:
|
|
pull_request: { branches: [main] }
|
|
push: { branches: [main] }
|
|
|
|
# For CI, we build in debug (`--profile dev`) rather than release mode so we
|
|
# get signal faster.
|
|
|
|
jobs:
|
|
macos:
|
|
runs-on: macos-14
|
|
timeout-minutes: 30
|
|
defaults:
|
|
run:
|
|
working-directory: codex-rs
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
- uses: dtolnay/rust-toolchain@stable
|
|
with:
|
|
targets: aarch64-apple-darwin,x86_64-apple-darwin
|
|
|
|
- name: Initialize failure flag
|
|
run: echo "FAILED=" >> $GITHUB_ENV
|
|
|
|
- name: cargo fmt
|
|
run: cargo fmt -- --config imports_granularity=Item --check || echo "FAILED=${FAILED:+$FAILED, }cargo fmt" >> $GITHUB_ENV
|
|
|
|
- name: cargo test
|
|
run: cargo test || echo "FAILED=${FAILED:+$FAILED, }cargo test" >> $GITHUB_ENV
|
|
|
|
- name: cargo clippy
|
|
run: cargo clippy --all-features -- -D warnings || echo "FAILED=${FAILED:+$FAILED, }cargo clippy" >> $GITHUB_ENV
|
|
|
|
- name: arm64 build
|
|
run: cargo build --target aarch64-apple-darwin || echo "FAILED=${FAILED:+$FAILED, }arm64 build" >> $GITHUB_ENV
|
|
|
|
- name: x86_64 build
|
|
run: cargo build --target x86_64-apple-darwin || echo "FAILED=${FAILED:+$FAILED, }x86_64 build" >> $GITHUB_ENV
|
|
|
|
- name: Fail if any step failed
|
|
run: |
|
|
if [ -n "$FAILED" ]; then
|
|
echo -e "See logs above, as the following steps failed:\n$FAILED"
|
|
exit 1
|
|
fi
|
|
env:
|
|
FAILED: ${{ env.FAILED }}
|
|
|
|
linux-musl-x86_64:
|
|
runs-on: ubuntu-24.04
|
|
timeout-minutes: 30
|
|
defaults:
|
|
run:
|
|
working-directory: codex-rs
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
- uses: dtolnay/rust-toolchain@stable
|
|
with:
|
|
targets: x86_64-unknown-linux-musl
|
|
- name: Install musl build tools
|
|
run: |
|
|
sudo apt update
|
|
sudo apt install -y musl-tools pkg-config
|
|
|
|
- name: Initialize failure flag
|
|
run: echo "FAILED=" >> $GITHUB_ENV
|
|
|
|
- name: cargo fmt
|
|
run: cargo fmt -- --config imports_granularity=Item --check || echo "FAILED=${FAILED:+$FAILED, }cargo fmt" >> $GITHUB_ENV
|
|
|
|
- name: cargo test
|
|
run: cargo test || echo "FAILED=${FAILED:+$FAILED, }cargo test" >> $GITHUB_ENV
|
|
|
|
- name: cargo clippy
|
|
run: cargo clippy --all-features -- -D warnings || echo "FAILED=${FAILED:+$FAILED, }cargo clippy" >> $GITHUB_ENV
|
|
|
|
- name: x86_64 musl build
|
|
run: cargo build --target x86_64-unknown-linux-musl || echo "FAILED=${FAILED:+$FAILED, }x86_64 musl build" >> $GITHUB_ENV
|
|
|
|
- name: Fail if any step failed
|
|
run: |
|
|
if [ -n "$FAILED" ]; then
|
|
echo -e "See logs above, as the following steps failed:\n$FAILED"
|
|
exit 1
|
|
fi
|
|
env:
|
|
FAILED: ${{ env.FAILED }}
|