49 lines
1.9 KiB
Shell
Executable file
49 lines
1.9 KiB
Shell
Executable file
#!/usr/bin/env bash
|
|
#
|
|
# Regenerate TypeScript announcement ACP types from this crate's ts-rs derives.
|
|
#
|
|
# The Rust structs (RemoteAnnouncement, AnnouncementCta, AnnouncementsRefreshed)
|
|
# are the single source of truth for the `x.ai/announcements/update` payload.
|
|
# Pipeline:
|
|
# 1. cargo test --features ts → ts-rs writes every binding to a temp dir
|
|
# (TS_RS_EXPORT_DIR; the `ts` feature stays off for normal/Bazel builds)
|
|
# 2. copy each binding + a "do not edit" header into the desktop consumer's
|
|
# generated types directory (committed, so the TS app never needs cargo)
|
|
# 3. format the destination so committed bytes stay house-formatted
|
|
#
|
|
# Usage: ./generate.sh (run from this package directory)
|
|
set -euo pipefail
|
|
shopt -s nullglob
|
|
|
|
CRATE_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
# Desktop consumer lives three levels up from this crate in the workspace tree.
|
|
REPO_ROOT="$(cd "$CRATE_DIR/../../.." && pwd)"
|
|
DESKTOP_DIR="$REPO_ROOT/frontend/apps/grok-desktop"
|
|
DST="$DESKTOP_DIR/src/acp/generated"
|
|
TMP="$(mktemp -d)"
|
|
trap 'rm -rf "$TMP"' EXIT
|
|
|
|
echo "[generate] 1/3 exporting ts-rs bindings (cargo test --features ts) …"
|
|
(cd "$CRATE_DIR" && TS_RS_EXPORT_DIR="$TMP" cargo test --quiet --features ts)
|
|
|
|
# Never clobber the committed bindings unless the export actually produced some.
|
|
bindings=("$TMP"/*.ts)
|
|
[[ ${#bindings[@]} -gt 0 ]] || {
|
|
echo "[generate] no bindings exported — aborting before touching $DST" >&2
|
|
exit 1
|
|
}
|
|
|
|
echo "[generate] 2/3 copying ${#bindings[@]} bindings -> $DST"
|
|
mkdir -p "$DST"
|
|
rm -f "$DST"/*.ts
|
|
for f in "${bindings[@]}"; do
|
|
{
|
|
echo "// generated — do NOT edit by hand."
|
|
echo "// Regenerate via generate.sh in the xai-grok-announcements package."
|
|
cat "$f"
|
|
} >"$DST/$(basename "$f")"
|
|
done
|
|
|
|
echo "[generate] 3/3 formatting (oxfmt) …"
|
|
(cd "$DESKTOP_DIR" && pnpm exec oxfmt --write src/acp/generated)
|
|
echo "[generate] done — ${#bindings[@]} bindings."
|