mirror of
https://github.com/pchuan98/codex.git
synced 2026-07-01 00:31:56 +08:00
build: package prebuilt Codex entrypoints (#23586)
## Why The package builder should describe the binaries it is actually packaging, not require callers to restate release metadata out of band. A caller-provided `--version` flag can drift from the workspace version, but running the target entrypoint to discover its version breaks cross-target packages when the produced binary cannot execute on the build host. This PR keeps package metadata tied to the repository source of truth by reading `[workspace.package].version` from `codex-rs/Cargo.toml`. It also prepares the package layout for `codex-app-server` packages: the same package structure can now represent either the CLI entrypoint or the app-server entrypoint while keeping shared sidecars such as `rg`, `bwrap`, and Windows sandbox helpers in the existing package directories. ## What changed - Removes the `--version` CLI flag from `scripts/build_codex_package.py`. - Adds Cargo.toml version discovery for `codex-package.json.version` via `codex-rs/Cargo.toml`. - Adds `--entrypoint-bin` so callers can package a prebuilt entrypoint instead of rebuilding it with Cargo. - Makes `--variant` an explicit choice between `codex` and `codex-app-server`, and uses it to select the cargo binary and packaged `bin/` entrypoint name. - Updates `scripts/codex_package/README.md` to document variants, prebuilt entrypoints, and Cargo.toml version detection. ## Verification - Compiled `scripts/build_codex_package.py` and `scripts/codex_package/*.py` with `PYTHONDONTWRITEBYTECODE=1`. - Ran `scripts/build_codex_package.py --help` and verified `--version` is gone while `--variant` and `--entrypoint-bin` are present. - Verified the package builder reads version `0.0.0` from `codex-rs/Cargo.toml`. - Built a fake cross-target `codex-app-server` package using a non-executable `--entrypoint-bin`; verified metadata records version `0.0.0`, variant `codex-app-server`, and `bin/codex-app-server` as the entrypoint.
This commit is contained in:
@@ -6,6 +6,7 @@ import stat
|
||||
from pathlib import Path
|
||||
|
||||
from .targets import PackageInputs
|
||||
from .targets import PackageVariant
|
||||
from .targets import TargetSpec
|
||||
|
||||
|
||||
@@ -30,7 +31,7 @@ def prepare_package_dir(package_dir: Path, *, force: bool) -> None:
|
||||
def build_package_dir(
|
||||
package_dir: Path,
|
||||
version: str,
|
||||
variant: str,
|
||||
variant: PackageVariant,
|
||||
spec: TargetSpec,
|
||||
inputs: PackageInputs,
|
||||
) -> None:
|
||||
@@ -41,7 +42,12 @@ def build_package_dir(
|
||||
resources_dir.mkdir()
|
||||
path_dir.mkdir()
|
||||
|
||||
copy_executable(inputs.codex_bin, bin_dir / spec.codex_name, is_windows=spec.is_windows)
|
||||
entrypoint_name = variant.entrypoint_name(spec)
|
||||
copy_executable(
|
||||
inputs.entrypoint_bin,
|
||||
bin_dir / entrypoint_name,
|
||||
is_windows=spec.is_windows,
|
||||
)
|
||||
copy_executable(inputs.rg_bin, path_dir / spec.rg_name, is_windows=spec.is_windows)
|
||||
|
||||
if inputs.bwrap_bin is not None:
|
||||
@@ -65,15 +71,19 @@ def build_package_dir(
|
||||
"layoutVersion": LAYOUT_VERSION,
|
||||
"version": version,
|
||||
"target": spec.target,
|
||||
"variant": variant,
|
||||
"entrypoint": f"bin/{spec.codex_name}",
|
||||
"variant": variant.name,
|
||||
"entrypoint": f"bin/{entrypoint_name}",
|
||||
"resourcesDir": "codex-resources",
|
||||
"pathDir": "codex-path",
|
||||
}
|
||||
write_json(package_dir / "codex-package.json", metadata)
|
||||
|
||||
|
||||
def validate_package_dir(package_dir: Path, spec: TargetSpec) -> None:
|
||||
def validate_package_dir(
|
||||
package_dir: Path,
|
||||
variant: PackageVariant,
|
||||
spec: TargetSpec,
|
||||
) -> None:
|
||||
required_dirs = [
|
||||
Path("bin"),
|
||||
Path("codex-resources"),
|
||||
@@ -94,7 +104,8 @@ def validate_package_dir(package_dir: Path, spec: TargetSpec) -> None:
|
||||
expected_metadata = {
|
||||
"layoutVersion": LAYOUT_VERSION,
|
||||
"target": spec.target,
|
||||
"entrypoint": f"bin/{spec.codex_name}",
|
||||
"variant": variant.name,
|
||||
"entrypoint": f"bin/{variant.entrypoint_name(spec)}",
|
||||
"resourcesDir": "codex-resources",
|
||||
"pathDir": "codex-path",
|
||||
}
|
||||
@@ -106,7 +117,7 @@ def validate_package_dir(package_dir: Path, spec: TargetSpec) -> None:
|
||||
)
|
||||
|
||||
required_files = [
|
||||
Path("bin") / spec.codex_name,
|
||||
Path("bin") / variant.entrypoint_name(spec),
|
||||
Path("codex-path") / spec.rg_name,
|
||||
]
|
||||
executable_files = list(required_files)
|
||||
|
||||
Reference in New Issue
Block a user