302 lines
9.7 KiB
Text
302 lines
9.7 KiB
Text
# 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"
|