provisioning/justfiles/distro.just

303 lines
9.9 KiB
Text
Raw Normal View History

# Distro Module - Local Distribution Installation
# ==================================================
# Build, package, and install provisioning binaries locally
# Integrates with package.just for distribution management
# ============================================================================
# Distro Module Configuration
# ============================================================================
distro_version := version
distro_build_dir := provisioning_root / "platform" / "target" / "release"
distro_install_dir := env_var_or_default("PROVISIONING_INSTALL_DIR", home_dir() / ".local" / "bin")
# Config directories (platform-specific, macOS vs Linux)
distro_config_dir := if os() == "macos" {
home_dir() / "Library" / "Application Support" / "provisioning"
} else {
home_dir() / ".config" / "provisioning"
}
# Core provisioning binaries from platform workspace
provisioning_binaries := "provisioning-ai-service provisioning-extension-registry provisioning-vault-service provisioning-rag provisioning-daemon provisioning-control-center provisioning-orchestrator provisioning-mcp-server provisioning-detector"
# ============================================================================
# Help and Information
# ============================================================================
# Show distro module help
@distro-help:
echo "📦 DISTRIBUTION & LOCAL INSTALLATION MODULE"
echo "==========================================="
echo ""
echo "🏗️ BUILD FOR INSTALLATION"
echo " distro-build-release Build all platform binaries (release)"
echo " distro-build-debug Build all platform binaries (debug)"
echo ""
echo "💾 LOCAL INSTALLATION"
echo " distro-install Install binaries to ~/.local/bin"
echo " distro-install-system Install to /usr/local/bin (requires sudo)"
echo " distro-uninstall Remove installed binaries"
echo ""
echo "🔍 VERIFICATION & MANAGEMENT"
echo " distro-verify Verify installation integrity"
echo " distro-list List installed binaries"
echo " distro-info Show installation information"
echo ""
echo "📦 DISTRIBUTION PACKAGES"
echo " distro-package Create distribution package (uses package module)"
echo " distro-checksums Generate SHA256 checksums"
echo ""
echo "🧹 CLEANUP"
echo " distro-clean Clean build artifacts"
echo ""
echo "INSTALLATION DIRECTORY: {{distro_install_dir}}"
echo "CONFIG DIRECTORY: {{distro_config_dir}}"
echo ""
echo "EXAMPLES:"
echo " just distro-build-release && just distro-install"
echo " just distro-install PROVISIONING_INSTALL_DIR=/usr/local/bin"
echo " just distro-list"
# ============================================================================
# Build Recipes
# ============================================================================
# Build all platform binaries (release mode)
@distro-build-release:
echo "🔨 Building provisioning binaries (release)..."
cd {{provisioning_root}}/platform && {{cargo}} build -r --workspace
echo "✅ Binaries built: {{distro_build_dir}}"
# Build all platform binaries (debug mode)
@distro-build-debug:
echo "🔨 Building provisioning binaries (debug)..."
cd {{provisioning_root}}/platform && {{cargo}} build --workspace
echo "✅ Debug binaries built"
# ============================================================================
# Installation Recipes
# ============================================================================
# Install binaries locally (default: ~/.local/bin)
distro-install:
#!/usr/bin/env bash
INSTALL_DIR="{{distro_install_dir}}"
BUILD_DIR="{{distro_build_dir}}"
PROVISIONING_ROOT="{{provisioning_root}}"
echo "📦 Installing provisioning binaries to: $INSTALL_DIR"
mkdir -p "$INSTALL_DIR" || { echo "✗ Failed to create install directory"; exit 1; }
echo ""
echo "📂 Installing binaries..."
binaries_installed=0
binaries_failed=0
for binary in {{provisioning_binaries}}; do
SRC="$BUILD_DIR/$binary"
if [ -f "$SRC" ]; then
if cp "$SRC" "$INSTALL_DIR/$binary" 2>/dev/null && chmod +x "$INSTALL_DIR/$binary" 2>/dev/null; then
echo " ✓ $binary"
((binaries_installed++))
else
echo " ✗ $binary (copy failed)"
((binaries_failed++))
fi
else
echo " ✗ $binary (not found at $SRC)"
((binaries_failed++))
fi
done
echo ""
echo "📊 Installation Summary"
echo "====================="
echo "Install directory: $INSTALL_DIR"
echo "Binaries installed: $binaries_installed"
[ $binaries_failed -gt 0 ] && echo "Binaries failed: $binaries_failed"
# Check if install dir is in PATH
if ! echo "$PATH" | grep -q "$INSTALL_DIR"; then
echo ""
echo "⚠️ $INSTALL_DIR is not in your PATH"
echo "Add to ~/.bashrc or ~/.zshrc:"
echo " export PATH=\"\$PATH:$INSTALL_DIR\""
fi
echo ""
echo "✅ Installation complete!"
echo ""
echo "Verify installation:"
echo " $INSTALL_DIR/provisioning-ai-service --version"
# Install to system directory (requires sudo)
distro-install-system:
#!/usr/bin/env bash
INSTALL_DIR="/usr/local/bin"
BUILD_DIR="{{distro_build_dir}}"
echo "🔐 Installing provisioning binaries to: $INSTALL_DIR (requires sudo)"
for binary in {{provisioning_binaries}}; do
SRC="$BUILD_DIR/$binary"
if [ -f "$SRC" ]; then
echo " Installing: $binary"
if sudo cp "$SRC" "$INSTALL_DIR/$binary" && sudo chmod +x "$INSTALL_DIR/$binary"; then
echo " ✓ $binary"
else
echo " ✗ $binary (installation failed)"
fi
else
echo " ✗ $binary (not found)"
fi
done
echo "✅ System installation complete!"
# Uninstall binaries
distro-uninstall:
#!/usr/bin/env bash
set -e
INSTALL_DIR="{{distro_install_dir}}"
echo "🗑️ Uninstalling provisioning binaries from: $INSTALL_DIR"
for binary in {{provisioning_binaries}}; do
if [ -f "$INSTALL_DIR/$binary" ]; then
rm "$INSTALL_DIR/$binary"
echo " ✓ Removed $binary"
fi
done
echo "✅ Uninstallation complete!"
# ============================================================================
# Verification & Information
# ============================================================================
# Verify installation integrity
distro-verify:
#!/usr/bin/env bash
INSTALL_DIR="{{distro_install_dir}}"
echo "🔍 Verifying installation in: $INSTALL_DIR"
echo ""
found=0
missing=0
for binary in {{provisioning_binaries}}; do
if [ -f "$INSTALL_DIR/$binary" ] && [ -x "$INSTALL_DIR/$binary" ]; then
echo " ✓ $binary"
((found++))
else
echo " ✗ $binary (not found or not executable)"
((missing++))
fi
done
echo ""
echo "📊 Summary: $found found, $missing missing"
if [ $missing -gt 0 ]; then
echo "⚠️ Some binaries are missing!"
exit 1
fi
echo "✅ Installation verified!"
# List installed binaries
distro-list:
#!/usr/bin/env bash
INSTALL_DIR="{{distro_install_dir}}"
echo "📋 Installed provisioning binaries in: $INSTALL_DIR"
echo ""
if ls "$INSTALL_DIR"/provisioning-* 2>/dev/null | head -1 > /dev/null; then
ls -lh "$INSTALL_DIR"/provisioning-*
else
echo "No provisioning binaries found"
fi
# Show installation information
distro-info:
#!/usr/bin/env bash
INSTALL_DIR="{{distro_install_dir}}"
echo "📦 Provisioning Installation Information"
echo "========================================"
echo ""
echo "Installation Directory: $INSTALL_DIR"
echo ""
echo "Environment Variables:"
echo " PROVISIONING_INSTALL_DIR={{distro_install_dir}}"
echo ""
echo "Status:"
if [ -d "$INSTALL_DIR" ]; then
echo " ✓ Install dir exists"
count=$(ls "$INSTALL_DIR"/provisioning-* 2>/dev/null | wc -l)
echo " Binaries installed: $count"
else
echo " ✗ Install dir not found"
fi
echo ""
echo "In PATH:"
if echo "$PATH" | grep -q "$INSTALL_DIR"; then
echo " ✓ Install directory is in PATH"
else
echo " ✗ Install directory is NOT in PATH"
fi
# ============================================================================
# Packaging Recipes
# ============================================================================
# Create distribution package (delegates to package module)
@distro-package:
echo "📦 Creating distribution package..."
echo " (delegates to package module)"
just package-all
# Generate checksums for distribution
@distro-checksums:
#!/usr/bin/env bash
set -e
PACKAGES_DIR="{{packages_dir}}"
if [ ! -d "$PACKAGES_DIR" ]; then
echo "✗ Packages directory not found: $PACKAGES_DIR"
exit 1
fi
echo "🔐 Generating SHA256 checksums..."
cd "$PACKAGES_DIR"
count=0
for file in *.tar.gz *.zip 2>/dev/null; do
[ -f "$file" ] || continue
echo " Checksumming: $file"
sha256sum "$file" > "${file}.sha256"
((count++))
done
echo "✅ Generated $count checksums"
# ============================================================================
# Cleanup
# ============================================================================
# Clean build artifacts
@distro-clean:
echo "🧹 Cleaning distro artifacts..."
cd {{provisioning_root}}/platform && {{cargo}} clean
echo "✅ Clean complete"