|
7 | 7 | @echo " make build - Build sdist and wheel with uv" |
8 | 8 | @echo " make publish - Publish to PyPI via uv (uses PYPI_API_TOKEN)" |
9 | 9 | @echo " make clean - Remove build artifacts" |
| 10 | + @echo " make gen-protocol - Generate Python protocol bindings from codex-rs" |
10 | 11 |
|
11 | 12 | venv: |
12 | 13 | uv venv --python 3.13 |
|
16 | 17 | uv run --group dev ruff format . |
17 | 18 |
|
18 | 19 | lint: |
19 | | - uv run --group dev ruff format --check . |
20 | | - uv run --group dev ruff check . |
| 20 | + uv run --group dev ruff format . |
| 21 | + uv run --group dev ruff check --fix --unsafe-fixes . |
21 | 22 | uv run --group dev mypy codex |
22 | 23 |
|
23 | 24 | test: |
24 | | - uv run --group dev pytest |
| 25 | + @bash -lc 'uv run --group dev pytest -q; ec=$$?; if [ $$ec -eq 5 ]; then echo "No tests collected"; exit 0; else exit $$ec; fi' |
25 | 26 |
|
26 | 27 | build: |
27 | 28 | uv build |
28 | 29 |
|
29 | 30 | publish: build |
30 | | - @if [ -z "$${PYPI_API_TOKEN}" ]; then \ |
31 | | - echo "PYPI_API_TOKEN is not set"; \ |
| 31 | + @# Load local environment if present |
| 32 | + @set -e; \ |
| 33 | + if [ -f .env ]; then set -a; . ./.env; set +a; fi; \ |
| 34 | + if [ -n "$${UV_PUBLISH_TOKEN:-}" ]; then \ |
| 35 | + echo "Publishing with token (UV_PUBLISH_TOKEN)"; \ |
| 36 | + uv publish --token "$${UV_PUBLISH_TOKEN}"; \ |
| 37 | + elif [ -n "$${PYPI_API_TOKEN:-}" ]; then \ |
| 38 | + echo "Publishing with token (PYPI_API_TOKEN)"; \ |
| 39 | + uv publish --token "$${PYPI_API_TOKEN}"; \ |
| 40 | + elif [ -n "$${UV_PUBLISH_USERNAME:-}" ] && [ -n "$${UV_PUBLISH_PASSWORD:-}" ]; then \ |
| 41 | + echo "Publishing with username/password (UV_PUBLISH_USERNAME)"; \ |
| 42 | + uv publish --username "$${UV_PUBLISH_USERNAME}" --password "$${UV_PUBLISH_PASSWORD}"; \ |
| 43 | + elif [ -n "$${PYPI_USERNAME:-}" ] && [ -n "$${PYPI_PASSWORD:-}" ]; then \ |
| 44 | + echo "Publishing with username/password (PYPI_USERNAME)"; \ |
| 45 | + uv publish --username "$${PYPI_USERNAME}" --password "$${PYPI_PASSWORD}"; \ |
| 46 | + else \ |
| 47 | + echo "No credentials found. Set UV_PUBLISH_TOKEN or PYPI_API_TOKEN, or UV_PUBLISH_USERNAME/UV_PUBLISH_PASSWORD (or PYPI_USERNAME/PYPI_PASSWORD)."; \ |
32 | 48 | exit 1; \ |
33 | 49 | fi |
34 | | - uv publish --token "$$PYPI_API_TOKEN" |
35 | 50 |
|
36 | 51 | clean: |
37 | 52 | rm -rf build dist *.egg-info .pytest_cache .mypy_cache .ruff_cache |
| 53 | + |
| 54 | +gen-protocol: |
| 55 | + @echo "Generating TypeScript protocol types via codex-proj/codex-rs ..." |
| 56 | + @mkdir -p .generated/ts |
| 57 | + @if command -v codex >/dev/null 2>&1; then \ |
| 58 | + if codex --help | grep -q "generate-ts"; then \ |
| 59 | + echo "Using 'codex generate-ts'"; \ |
| 60 | + codex generate-ts --out .generated/ts; \ |
| 61 | + else \ |
| 62 | + echo "'codex' installed but no generate-ts; falling back"; \ |
| 63 | + cd codex-proj/codex-rs && cargo run -p codex-protocol-ts -- --out ../../.generated/ts; \ |
| 64 | + fi; \ |
| 65 | + else \ |
| 66 | + echo "Using cargo run -p codex-protocol-ts"; \ |
| 67 | + cd codex-proj/codex-rs && cargo run -p codex-protocol-ts -- --out ../../.generated/ts; \ |
| 68 | + fi |
| 69 | + @echo "Generating Python bindings ..." |
| 70 | + @python3 scripts/generate_protocol_py.py .generated/ts |
| 71 | + @$(MAKE) fmt |
| 72 | + |
| 73 | +.PHONY: build-native dev-native |
| 74 | + |
| 75 | +build-native: |
| 76 | + @echo "Building native extension with maturin..." |
| 77 | + @maturin build -m crates/codex_native/Cargo.toml --release |
| 78 | + |
| 79 | +dev-native: |
| 80 | + @echo "Installing native extension in dev mode..." |
| 81 | + @maturin develop -m crates/codex_native/Cargo.toml |
0 commit comments