mirror of
https://github.com/openai/codex.git
synced 2026-08-23 13:09:46 +00:00
## What changed - Add `chat.toggle_voice_mute` to the configurable TUI keymap and generated configuration schema. - Let the exec-server version-skew harness build the voice-enabled CLI on Debian-like Linux hosts without preinstalled development metadata by assembling a temporary package sysroot. - Preserve the existing build path on other Linux environments when the Debian package tools are unavailable. ## Testing - Add a shell test that verifies a non-Debian Linux environment without voice metadata still proceeds to the Cargo build. GitOrigin-RevId: 95c5ebc3f85d152a5217dee561286f2be662f79a
101 lines
3.8 KiB
Bash
Executable File
101 lines
3.8 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
set -euo pipefail
|
|
|
|
repo_root="$(cd "$(dirname "${BASH_SOURCE[0]}")/../../.." && pwd)"
|
|
minimum_supported_release="$(
|
|
sed -n 's/^pub const MINIMUM_SUPPORTED_CODEX_VERSION: &str = "\([^"]*\)";$/\1/p' \
|
|
"${repo_root}/codex-rs/exec-server-protocol/src/lib.rs"
|
|
)"
|
|
: "${minimum_supported_release:?minimum supported Codex release is missing}"
|
|
release_directory="$(mktemp -d "${TMPDIR:-/tmp}/codex-exec-server-skew.XXXXXX")"
|
|
trap 'rm -rf "${release_directory:?}"' EXIT
|
|
|
|
if [[ $# -eq 0 ]]; then
|
|
releases=(latest "${minimum_supported_release}")
|
|
else
|
|
releases=("$@")
|
|
fi
|
|
|
|
case "$(uname -s):$(uname -m)" in
|
|
Darwin:arm64) target="aarch64-apple-darwin" ;;
|
|
Darwin:x86_64) target="x86_64-apple-darwin" ;;
|
|
Linux:aarch64 | Linux:arm64) target="aarch64-unknown-linux-musl" ;;
|
|
Linux:x86_64) target="x86_64-unknown-linux-musl" ;;
|
|
*)
|
|
echo "Unsupported platform: $(uname -s) $(uname -m)" >&2
|
|
exit 1
|
|
;;
|
|
esac
|
|
|
|
asset="codex-${target}.tar.gz"
|
|
|
|
if [[ "$(uname -s)" == "Linux" ]] \
|
|
&& command -v apt-get >/dev/null \
|
|
&& command -v dpkg-deb >/dev/null \
|
|
&& command -v dpkg-architecture >/dev/null \
|
|
&& ! pkg-config --exists alsa glib-2.0 gobject-2.0 gio-2.0; then
|
|
# Debian-like hosts can download development metadata without sudo. The
|
|
# temporary sysroot still relies on runtime libraries installed on the host.
|
|
voice_package_directory="${release_directory}/voice-packages"
|
|
voice_sysroot="${release_directory}/voice-sysroot"
|
|
mkdir -p "${voice_package_directory}" "${voice_sysroot}"
|
|
(
|
|
cd "${voice_package_directory}"
|
|
apt-get download libasound2-dev libglib2.0-dev libcap-dev libffi-dev libmount-dev \
|
|
libpcre2-dev libselinux1-dev zlib1g-dev libblkid-dev libsepol-dev
|
|
)
|
|
for package in "${voice_package_directory}"/*.deb; do
|
|
dpkg-deb --extract "${package}" "${voice_sysroot}"
|
|
done
|
|
|
|
voice_multiarch="$(dpkg-architecture -qDEB_HOST_MULTIARCH)"
|
|
voice_library_directory="${voice_sysroot}/usr/lib/${voice_multiarch}"
|
|
for library in "${voice_library_directory}"/*.so; do
|
|
[[ -L "${library}" ]] || continue
|
|
library_target="$(readlink "${library}")"
|
|
if [[ ! -e "${voice_library_directory}/${library_target}" && -e "/usr/lib/${voice_multiarch}/${library_target}" ]]; then
|
|
ln -s "/usr/lib/${voice_multiarch}/${library_target}" "${voice_library_directory}/${library_target}"
|
|
fi
|
|
done
|
|
|
|
export PKG_CONFIG_PATH="${voice_library_directory}/pkgconfig${PKG_CONFIG_PATH:+:${PKG_CONFIG_PATH}}"
|
|
export PKG_CONFIG_SYSROOT_DIR="${voice_sysroot}"
|
|
fi
|
|
|
|
cd "${repo_root}/codex-rs"
|
|
cargo build -p codex-cli --bin codex
|
|
export CODEX_TEST_CURRENT_CODEX="${CARGO_TARGET_DIR:-${repo_root}/codex-rs/target}/debug/codex"
|
|
|
|
echo "Testing current Codex compatibility through authenticated Noise"
|
|
export CODEX_TEST_RELEASED_CODEX="${CODEX_TEST_CURRENT_CODEX}"
|
|
just test -p codex-exec-server --test relay version_skew --test-threads 1
|
|
|
|
tested_release_version=""
|
|
for release in "${releases[@]}"; do
|
|
release="${release#rust-v}"
|
|
if [[ "${release}" == "${tested_release_version}" ]]; then
|
|
echo "Skipping Codex ${release}; this release was already tested"
|
|
continue
|
|
fi
|
|
|
|
if [[ "${release}" == "latest" ]]; then
|
|
release_url="https://github.com/openai/codex/releases/latest/download/${asset}"
|
|
else
|
|
release_url="https://github.com/openai/codex/releases/download/rust-v${release}/${asset}"
|
|
fi
|
|
|
|
binary_directory="${release_directory}/${release}"
|
|
mkdir -p "${binary_directory}"
|
|
echo "Downloading released Codex from ${release_url}"
|
|
curl -fsSL "${release_url}" -o "${binary_directory}/${asset}"
|
|
tar -xzf "${binary_directory}/${asset}" -C "${binary_directory}"
|
|
|
|
export CODEX_TEST_RELEASED_CODEX="${binary_directory}/codex-${target}"
|
|
release_output="$("${CODEX_TEST_RELEASED_CODEX}" --version)"
|
|
echo "${release_output}"
|
|
tested_release_version="${release_output##* }"
|
|
|
|
just test -p codex-exec-server --test relay version_skew --test-threads 1
|
|
done
|