# packages/sdk/rust — user-facing Rust crate (`openapp-sdk`) over core.
import "../../../justfiles/common.just"
_pkg := source_directory()
_compose := source_directory() / ".." / "docker" / "compose.yaml"
_:
@just --list
# Consumer crate: commands under packages/sdk/rust in sdk-rust.
_rust *ARGS:
SDK_DOCKER_UID="${SDK_DOCKER_UID:-$(id -u)}" SDK_DOCKER_GID="${SDK_DOCKER_GID:-$(id -g)}" docker compose -f {{ _compose }} run --rm sdk-rust \
sh -euxc '{{ ARGS }}'
# Chain multiple cargo invocations in one container.
_rust_cmd CMD:
SDK_DOCKER_UID="${SDK_DOCKER_UID:-$(id -u)}" SDK_DOCKER_GID="${SDK_DOCKER_GID:-$(id -g)}" docker compose -f {{ _compose }} run --rm sdk-rust \
sh -euxc '{{ CMD }}'
# Core workspace (OpenAPI generator lives in crates/common).
_core *ARGS:
SDK_DOCKER_UID="${SDK_DOCKER_UID:-$(id -u)}" SDK_DOCKER_GID="${SDK_DOCKER_GID:-$(id -g)}" docker compose -f {{ _compose }} run --rm sdk-core \
sh -euxc 'cd crates/common && {{ ARGS }}'
build:
@just _rust cargo build
test:
@just _rust cargo test
lint:
@just _rust_cmd 'cargo fmt --all -- --check && cargo clippy --all-targets --all-features -- -D warnings'
# OpenAPI drift for Rust core-generated sources (runs in sdk-core workspace).
openapi-check:
@just _core cargo run --features openapi-gen --bin openapp-sdk-openapi-gen -- --check
# Regenerate core OpenAPI-derived Rust (`packages/sdk/core`); this crate consumes it via path dep.
generate:
@just _core cargo run --features openapi-gen --bin openapp-sdk-openapi-gen
# Single source of truth for fmt/clippy/build/test (host or sdk-rust container).
_rust_gate_cmd := "cargo fmt --all -- --check && cargo clippy --all-targets --all-features -- -D warnings && cargo build && cargo test"
# Host toolchain — matches `.github/workflows/sdk-unified-release.yml` (not Docker `just sdk docker rust`).
# OpenAPI drift for this crate is `openapi-check` below; release CI runs `just sdk openapi-check` (includes it) before this recipe — do not duplicate here.
release-gate:
{{ _rust_gate_cmd }}
# Invoked from repo root via `scripts/pre-commit-subproject-wrapper.sh packages/sdk/rust`.
# Runs `openapi-check` then the same cargo chain as `release-gate` (in Docker). Full release still needs `just sdk openapi-check` once at the coordinator.
pre-commit: openapi-check
@just _rust_cmd '{{ _rust_gate_cmd }}'
# crates.io consumer crate (`openapp-sdk`). Requires `openapp-sdk-core` on crates.io
# (from repo root: `just sdk core publish` then `just sdk rust publish`, or `sdk-unified-release.yml`).
publish *ARGS:
@just _rust_cmd 'cargo publish {{ ARGS }}'