fix(distro): correct install recipes — all 5 binaries, install-full for frontend
Some checks are pending
Rust CI / Security Audit (push) Waiting to run
Rust CI / Check + Test + Lint (nightly) (push) Waiting to run
Rust CI / Check + Test + Lint (stable) (push) Waiting to run

distro::install now explicitly builds vapora-backend, vapora-agents,
  vapora-mcp-server, vapora-a2a, and vapora-cli in one cargo pass.
  vapora-a2a and vapora-mcp-server were missing from the build command;
  vapora-a2a was absent from the copy list entirely.

  Replaces the broken UI=true parameter with a separate install-full recipe
  that depends on install and runs trunk --release. just 1.x treats KEY=value
  tokens as positional args to the first recipe parameter when invoked via
  module syntax (distro::recipe), not as named overrides.

  install-targets now includes wasm32-unknown-unknown with an idempotent check.
  build-all-targets excludes wasm32 from the workspace loop to avoid failures
  on crates that don't support WASM.
This commit is contained in:
Jesús Pérez 2026-02-17 23:31:47 +00:00
parent d2806935d6
commit e91e3cb67a
Signed by: jesus
GPG Key ID: 9F243E355E0BC939
2 changed files with 49 additions and 63 deletions

View File

@ -10,12 +10,14 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
### Fixed - `distro.just` build and installation ### Fixed - `distro.just` build and installation
- `distro::install`: now builds all 5 server binaries in one `cargo build --release` pass - `distro::install`: now builds all 5 server binaries in one `cargo build --release` pass
- Added `vapora-a2a` and `vapora-mcp-server` to the explicit build list (were missing; copied from stale `target/release/` if present) - Added `vapora-a2a` and `vapora-mcp-server` to the explicit build list (were missing; silently copied from stale `target/release/` if present, skipped otherwise)
- Added `vapora-a2a` binary to the install copy list (was absent entirely) - Added `vapora-a2a` to the install copy list (was absent entirely)
- Added `UI=true` optional parameter: runs `trunk build --release` before copying; validates `trunk` is available first - Missing binary → explicit warning with count; exits non-zero if zero installed
- Missing binary → explicit warning with count instead of silent skip; exits non-zero if zero installed - `distro::install-full`: new recipe — runs `install` as a dependency then `trunk build --release`
- `distro::install-targets`: added `wasm32-unknown-unknown`; changed to idempotent check (`rustup target list --installed`) before calling `rustup target add` - Replaces the broken `UI=true` parameter approach: `just` 1.x treats `KEY=value` tokens as positional args to the first parameter when invoked via module syntax (`distro::recipe`), not as named overrides
- `distro::build-all-targets`: explicitly excludes `wasm32-unknown-unknown` from the workspace loop (WASM requires per-crate build via `trunk`; the loop would fail on non-WASM crates) - Validates `trunk` is in PATH before attempting the build
- `distro::install-targets`: added `wasm32-unknown-unknown`; idempotent — checks `rustup target list --installed` before calling `rustup target add`
- `distro::build-all-targets`: excludes `wasm32-unknown-unknown` from the workspace loop; WASM requires per-crate `trunk` build, not `cargo build --workspace --target wasm32`
### Added - NatsBridge + A2A JetStream Integration ### Added - NatsBridge + A2A JetStream Integration

View File

@ -17,11 +17,12 @@ distro-help:
@echo "" @echo ""
@echo "Installation:" @echo "Installation:"
@echo " just distro::install Install server binaries to ~/.local/bin" @echo " just distro::install Install server binaries to ~/.local/bin"
@echo " just distro::install DIR=/path Install to custom directory" @echo " just distro::install /usr/local Install to custom directory"
@echo " just distro::install UI=true Also build frontend (trunk --release)" @echo " just distro::install-full Install server binaries + build frontend"
@echo " just distro::install-full /opt Custom dir + frontend"
@echo "" @echo ""
@echo " Binaries installed: vapora-backend, vapora-agents, vapora-mcp-server," @echo " Binaries: vapora-backend, vapora-agents, vapora-mcp-server,"
@echo " vapora-a2a, vapora (CLI)" @echo " vapora-a2a, vapora (CLI)"
@echo "" @echo ""
@echo "Utilities:" @echo "Utilities:"
@echo " just distro::clean-targets Clean target build artifacts" @echo " just distro::clean-targets Clean target build artifacts"
@ -106,36 +107,31 @@ build-all-targets:
# === INSTALLATION === # === INSTALLATION ===
# Build and install all release binaries. # Install server binaries only (native targets).
# #
# Usage: # Usage:
# just distro::install → ~/.local/bin, native only # just distro::install → ~/.local/bin
# just distro::install DIR=/usr/local/bin → custom dir, native only # just distro::install /usr/local/bin → custom dir
# just distro::install UI=true → ~/.local/bin + trunk --release
# just distro::install DIR=/opt UI=true → custom dir + trunk --release
# #
# Binaries: vapora-backend, vapora-agents, vapora-mcp-server, vapora-a2a, vapora (CLI) # Binaries: vapora-backend, vapora-agents, vapora-mcp-server, vapora-a2a, vapora (CLI)
[doc("Build and install server binaries (DIR=path, UI=true for frontend)")] [doc("Build and install server binaries (default: ~/.local/bin)")]
install DIR="" UI="false": install DIR="":
#!/bin/bash #!/bin/bash
set -e set -e
WORKSPACE="{{ WORKSPACE_ROOT }}" WORKSPACE="{{ WORKSPACE_ROOT }}"
WORKSPACE="$(cd "$WORKSPACE" && pwd)" || { echo "✗ Failed to access workspace"; exit 1; } WORKSPACE="$(cd "$WORKSPACE" && pwd)" || { echo "✗ Failed to access workspace"; exit 1; }
if [ -z "{{ DIR }}" ]; then INSTALL_DIR="{{ DIR }}"
if [ -z "$INSTALL_DIR" ]; then
INSTALL_DIR="$HOME/.local/bin" INSTALL_DIR="$HOME/.local/bin"
else
INSTALL_DIR="{{ DIR }}"
fi fi
echo "=== Building and Installing VAPORA binaries ===" echo "=== Building and Installing VAPORA server binaries ==="
echo "Workspace: $WORKSPACE" echo "Workspace: $WORKSPACE"
echo "Install directory: $INSTALL_DIR" echo "Install directory: $INSTALL_DIR"
echo "Frontend (UI): {{ UI }}"
echo "" echo ""
# Build all server binaries in one pass (Cargo deduplicates shared deps)
echo "Building release binaries..." echo "Building release binaries..."
cd "$WORKSPACE" cd "$WORKSPACE"
cargo build --release \ cargo build --release \
@ -148,35 +144,12 @@ install DIR="" UI="false":
echo "✓ Native binaries built" echo "✓ Native binaries built"
echo "" echo ""
# Optionally build the Leptos frontend via trunk
if [ "{{ UI }}" = "true" ]; then
if ! command -v trunk &>/dev/null; then
echo "✗ trunk not found. Install with: cargo install trunk"
exit 1
fi
echo "Building frontend (trunk --release)..."
cd "$WORKSPACE/crates/vapora-frontend"
trunk build --release
echo "✓ Frontend built → $WORKSPACE/crates/vapora-frontend/dist"
cd "$WORKSPACE"
echo ""
fi
# Copy binaries to install dir
mkdir -p "$INSTALL_DIR" || { echo "✗ Failed to create $INSTALL_DIR"; exit 1; } mkdir -p "$INSTALL_DIR" || { echo "✗ Failed to create $INSTALL_DIR"; exit 1; }
echo "Installing to $INSTALL_DIR..." echo "Installing to $INSTALL_DIR..."
declare -a BINARIES=(
"vapora-backend"
"vapora-agents"
"vapora-mcp-server"
"vapora-a2a"
"vapora"
)
INSTALLED=0 INSTALLED=0
MISSING=0 MISSING=0
for BIN_NAME in "${BINARIES[@]}"; do for BIN_NAME in vapora-backend vapora-agents vapora-mcp-server vapora-a2a vapora; do
BIN_PATH="$WORKSPACE/target/release/$BIN_NAME" BIN_PATH="$WORKSPACE/target/release/$BIN_NAME"
if [ -f "$BIN_PATH" ]; then if [ -f "$BIN_PATH" ]; then
cp "$BIN_PATH" "$INSTALL_DIR/" cp "$BIN_PATH" "$INSTALL_DIR/"
@ -184,24 +157,15 @@ install DIR="" UI="false":
echo " ✓ $BIN_NAME" echo " ✓ $BIN_NAME"
INSTALLED=$((INSTALLED + 1)) INSTALLED=$((INSTALLED + 1))
else else
echo " ✗ $BIN_NAME (not found in target/release — build may have failed)" echo " ✗ $BIN_NAME (not found — build may have failed)"
MISSING=$((MISSING + 1)) MISSING=$((MISSING + 1))
fi fi
done done
echo "" echo ""
if [ "$INSTALLED" -eq 0 ]; then [ "$INSTALLED" -eq 0 ] && { echo "✗ No binaries installed"; exit 1; }
echo "✗ No binaries were installed" [ "$MISSING" -gt 0 ] && echo "⚠ $MISSING binaries missing"
exit 1 echo "✓ $INSTALLED/$((INSTALLED + MISSING)) binaries installed to $INSTALL_DIR"
fi
if [ "$MISSING" -gt 0 ]; then
echo "⚠ $MISSING binaries missing — check build output above"
fi
echo "✓ Installation complete ($INSTALLED/$((INSTALLED + MISSING)) binaries)"
echo ""
echo "Install dir: $INSTALL_DIR"
if echo "$INSTALL_DIR" | grep -q "\.local/bin"; then if echo "$INSTALL_DIR" | grep -q "\.local/bin"; then
echo "" echo ""
@ -214,11 +178,31 @@ install DIR="" UI="false":
echo " $INSTALL_DIR/vapora-backend --help" echo " $INSTALL_DIR/vapora-backend --help"
echo " $INSTALL_DIR/vapora-agents --help" echo " $INSTALL_DIR/vapora-agents --help"
echo " $INSTALL_DIR/vapora-a2a --help" echo " $INSTALL_DIR/vapora-a2a --help"
echo ""
if [ "{{ UI }}" = "true" ]; then # Install server binaries + build Leptos frontend via trunk.
echo "" # Calls install first, then runs trunk --release.
echo "Frontend dist: $WORKSPACE/crates/vapora-frontend/dist" #
# Usage:
# just distro::install-full → ~/.local/bin + dist/
# just distro::install-full /usr/local/bin → custom dir + dist/
[doc("Build and install server binaries + Leptos frontend (trunk --release)")]
install-full DIR="": (install DIR)
#!/bin/bash
set -e
WORKSPACE="{{ WORKSPACE_ROOT }}"
WORKSPACE="$(cd "$WORKSPACE" && pwd)" || { echo "✗ Failed to access workspace"; exit 1; }
if ! command -v trunk &>/dev/null; then
echo "✗ trunk not found. Install with: cargo install trunk"
exit 1
fi fi
echo "Building frontend (trunk --release)..."
cd "$WORKSPACE/crates/vapora-frontend"
trunk build --release
echo "✓ Frontend built → $WORKSPACE/crates/vapora-frontend/dist"
echo "" echo ""
# === UTILITIES === # === UTILITIES ===