# 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"