Some checks failed
CI/CD Pipeline / Test Suite (push) Has been cancelled
CI/CD Pipeline / Security Audit (push) Has been cancelled
CI/CD Pipeline / Performance Benchmarks (push) Has been cancelled
Rust CI / Security Audit (push) Has been cancelled
Rust CI / Check + Test + Lint (nightly) (push) Has been cancelled
Rust CI / Check + Test + Lint (stable) (push) Has been cancelled
CI/CD Pipeline / Build Docker Image (push) Has been cancelled
CI/CD Pipeline / Deploy to Staging (push) Has been cancelled
CI/CD Pipeline / Deploy to Production (push) Has been cancelled
CI/CD Pipeline / Cleanup (push) Has been cancelled
316 lines
9.9 KiB
Plaintext
Executable File
316 lines
9.9 KiB
Plaintext
Executable File
#!/usr/bin/env nu
|
|
|
|
# Rustelo Feature Architecture Migration Script
|
|
# Migrates p-jpl-website crates to rustelo foundation with proper dependency management
|
|
|
|
const P_JPL_PATH = "../p-jpl-website"
|
|
const FOUNDATION_PATH = "foundation/crates"
|
|
const REGISTRY_PATH = "registry"
|
|
|
|
def main [] {
|
|
print "🚀 Starting Rustelo Feature Architecture Migration"
|
|
print "📋 Phase 1: Foundation Crate Migration"
|
|
|
|
# Ensure directories exist
|
|
mkdir $FOUNDATION_PATH
|
|
mkdir $REGISTRY_PATH
|
|
|
|
# Step 1: Copy advanced crates from p-jpl-website
|
|
copy_foundation_crates
|
|
|
|
# Step 2: Create dependency registry with p-jpl-website priority
|
|
let merged_deps = (create_dependency_registry)
|
|
|
|
# Step 3: Update workspace Cargo.toml
|
|
update_workspace_config $merged_deps
|
|
|
|
# Step 4: Verify migration
|
|
verify_migration
|
|
|
|
print "✅ Migration completed successfully!"
|
|
}
|
|
|
|
def copy_foundation_crates [] {
|
|
print "📦 Copying foundation crates from p-jpl-website..."
|
|
|
|
# Core foundation crates (replaces basic rustelo crates)
|
|
let crates_to_copy = [
|
|
"client", # Advanced Leptos client (replaces basic client)
|
|
"server", # Advanced Axum server (replaces basic server)
|
|
"core-lib", # Advanced shared library (replaces shared)
|
|
"core-types" # Shared types (replaces shared types)
|
|
]
|
|
|
|
for $crate in $crates_to_copy {
|
|
let source_path = $"($P_JPL_PATH)/crates/($crate)"
|
|
let dest_path = $"($FOUNDATION_PATH)/($crate)"
|
|
|
|
if ($source_path | path exists) {
|
|
print $" → Copying ($crate)..."
|
|
cp -r $source_path $dest_path
|
|
|
|
# Update internal path dependencies to reflect new structure
|
|
update_crate_dependencies $dest_path
|
|
} else {
|
|
print $" ⚠️ Warning: ($crate) not found in p-jpl-website"
|
|
}
|
|
}
|
|
}
|
|
|
|
def create_dependency_registry [] {
|
|
print "📋 Creating dependency registry with p-jpl-website priority..."
|
|
|
|
# Parse p-jpl-website Cargo.toml
|
|
let p_jpl_cargo = (open $"($P_JPL_PATH)/Cargo.toml")
|
|
let p_jpl_deps = $p_jpl_cargo.workspace.dependencies
|
|
|
|
# Parse current rustelo Cargo.toml
|
|
let rustelo_cargo = (open "Cargo.toml")
|
|
let rustelo_deps = $rustelo_cargo.workspace.dependencies
|
|
|
|
# Merge dependencies with p-jpl-website priority
|
|
let merged_deps = ($p_jpl_deps | merge $rustelo_deps)
|
|
|
|
# Create registry dependencies structure
|
|
let registry_content = {
|
|
dependencies: $merged_deps
|
|
}
|
|
|
|
# Convert to TOML format and save
|
|
$registry_content | to toml | save --force $"($REGISTRY_PATH)/dependencies.toml"
|
|
|
|
print " ✓ Dependencies registry created with p-jpl-website priority"
|
|
|
|
# Return merged deps for workspace update
|
|
$merged_deps
|
|
}
|
|
|
|
def update_crate_dependencies [crate_path: string] {
|
|
let cargo_path = $"($crate_path)/Cargo.toml"
|
|
|
|
if ($cargo_path | path exists) {
|
|
# Read current Cargo.toml
|
|
let cargo_content = (open $cargo_path)
|
|
|
|
# Update path dependencies to reflect new structure
|
|
let updated_cargo = (
|
|
$cargo_content
|
|
| upsert dependencies.core-lib { path: "../core-lib" }
|
|
| upsert dependencies.core-types { path: "../core-types" }
|
|
| upsert dependencies.client { path: "../client" }
|
|
| upsert dependencies.server { path: "../server" }
|
|
)
|
|
|
|
# Save updated Cargo.toml
|
|
$updated_cargo | to toml | save --force $cargo_path
|
|
print $" ✓ Updated dependencies in ($crate_path)"
|
|
}
|
|
}
|
|
|
|
def update_workspace_config [merged_deps: record] {
|
|
print "🔧 Updating workspace configuration..."
|
|
|
|
# Read current workspace Cargo.toml
|
|
let cargo_content = (open "Cargo.toml")
|
|
|
|
# Update workspace members to point to foundation
|
|
let updated_members = [
|
|
# Framework crates
|
|
"framework/crates/rustelo-core",
|
|
"framework/crates/rustelo-web",
|
|
"framework/crates/rustelo-auth",
|
|
"framework/crates/rustelo-content",
|
|
"framework/crates/rustelo-cli",
|
|
# Foundation crates (from p-jpl-website)
|
|
"foundation/crates/client",
|
|
"foundation/crates/server",
|
|
"foundation/crates/core-lib",
|
|
"foundation/crates/core-types"
|
|
]
|
|
|
|
# Update workspace with new structure and dependencies
|
|
let updated_cargo = (
|
|
$cargo_content
|
|
| upsert workspace.members $updated_members
|
|
| upsert workspace.dependencies $merged_deps
|
|
| upsert workspace.dependencies.core-lib { path: "foundation/crates/core-lib" }
|
|
| upsert workspace.dependencies.core-types { path: "foundation/crates/core-types" }
|
|
| upsert workspace.dependencies.client { path: "foundation/crates/client" }
|
|
| upsert workspace.dependencies.server { path: "foundation/crates/server" }
|
|
)
|
|
|
|
# Save updated workspace Cargo.toml
|
|
$updated_cargo | to toml | save --force "Cargo.toml"
|
|
|
|
print " ✓ Workspace configuration updated"
|
|
}
|
|
|
|
def verify_migration [] {
|
|
print "🔍 Verifying migration..."
|
|
|
|
# Check that foundation crates exist
|
|
let expected_crates = ["client", "server", "core-lib", "core-types"]
|
|
|
|
for $crate in $expected_crates {
|
|
let crate_path = $"($FOUNDATION_PATH)/($crate)"
|
|
if ($crate_path | path exists) {
|
|
print $" ✓ ($crate) migrated successfully"
|
|
} else {
|
|
print $" ❌ ($crate) migration failed"
|
|
}
|
|
}
|
|
|
|
# Verify Cargo.toml syntax
|
|
try {
|
|
cargo check --workspace --all-targets
|
|
print " ✓ Workspace Cargo.toml syntax valid"
|
|
} catch {
|
|
print " ⚠️ Workspace Cargo.toml needs manual fixes"
|
|
}
|
|
|
|
# Check dependency registry
|
|
if ($"($REGISTRY_PATH)/dependencies.toml" | path exists) {
|
|
print " ✓ Dependency registry created"
|
|
} else {
|
|
print " ❌ Dependency registry missing"
|
|
}
|
|
}
|
|
|
|
# Feature extraction functions (Phase 2)
|
|
|
|
def extract_analytics_feature [] {
|
|
print "📊 Extracting analytics feature from p-jpl-website..."
|
|
|
|
let feature_dir = "features/analytics"
|
|
mkdir $feature_dir
|
|
|
|
# Copy analytics tools
|
|
let source_tools = $"($P_JPL_PATH)/crates/tools/src/analytics"
|
|
if ($source_tools | path exists) {
|
|
cp -r $source_tools $"($feature_dir)/src"
|
|
print " ✓ Analytics source copied"
|
|
}
|
|
|
|
# Create feature manifest
|
|
create_feature_manifest "analytics" {
|
|
name: "analytics"
|
|
version: "0.1.0"
|
|
source: "p-jpl-website"
|
|
description: "Comprehensive analytics system with navigation tracking, server monitoring, and browser analytics"
|
|
dependencies: {
|
|
workspace: ["chrono", "serde_json", "prometheus"]
|
|
external: ["ratatui = '0.29'", "inquire = '0.7'", "crossterm = '0.29'"]
|
|
}
|
|
environment: [
|
|
{name: "ANALYTICS_ENABLED", default: "true", required: false}
|
|
{name: "ANALYTICS_LOG_PATH", default: "logs/analytics", required: false}
|
|
]
|
|
scripts: [
|
|
{from: "scripts/analytics", to: "scripts/analytics"}
|
|
]
|
|
}
|
|
}
|
|
|
|
def extract_smart_build_feature [] {
|
|
print "🔧 Extracting smart-build feature from p-jpl-website..."
|
|
|
|
let feature_dir = "features/smart-build"
|
|
mkdir $feature_dir
|
|
|
|
# Copy build tools
|
|
let source_build = $"($P_JPL_PATH)/crates/tools/src/build"
|
|
if ($source_build | path exists) {
|
|
cp -r $source_build $"($feature_dir)/src"
|
|
print " ✓ Smart-build source copied"
|
|
}
|
|
|
|
# Create feature manifest
|
|
create_feature_manifest "smart-build" {
|
|
name: "smart-build"
|
|
version: "0.1.0"
|
|
source: "p-jpl-website"
|
|
description: "Incremental build system with intelligent caching"
|
|
dependencies: {
|
|
workspace: ["notify", "lru", "futures"]
|
|
external: []
|
|
}
|
|
environment: [
|
|
{name: "SMART_BUILD_CACHE_DIR", default: ".cache/smart-build", required: false}
|
|
{name: "SMART_BUILD_PARALLEL_JOBS", default: "auto", required: false}
|
|
]
|
|
}
|
|
}
|
|
|
|
def create_feature_manifest [name: string, config: record] {
|
|
let manifest_path = $"features/($name)/feature.toml"
|
|
|
|
let manifest_content = {
|
|
feature: {
|
|
name: $config.name
|
|
version: $config.version
|
|
source: $config.source
|
|
description: $config.description
|
|
}
|
|
dependencies: $config.dependencies
|
|
environment: {
|
|
variables: $config.environment
|
|
}
|
|
}
|
|
|
|
$manifest_content | to toml | save --force $manifest_path
|
|
print $" ✓ Feature manifest created: ($manifest_path)"
|
|
}
|
|
|
|
# Create features registry
|
|
def create_features_registry [] {
|
|
print "📋 Creating features registry..."
|
|
|
|
let features_registry = [
|
|
"# Rustelo Features Registry"
|
|
""
|
|
"[features]"
|
|
""
|
|
"[features.analytics]"
|
|
"description = \"Comprehensive analytics system\""
|
|
"source = \"p-jpl-website\""
|
|
"status = \"available\""
|
|
"requires = []"
|
|
""
|
|
"[features.smart-build]"
|
|
"description = \"Incremental build system with caching\""
|
|
"source = \"p-jpl-website\""
|
|
"status = \"available\""
|
|
"requires = []"
|
|
""
|
|
"[features.debugging-tools]"
|
|
"description = \"Enhanced debugging capabilities\""
|
|
"source = \"p-jpl-website\""
|
|
"status = \"available\""
|
|
"requires = []"
|
|
""
|
|
"[features.ui-components]"
|
|
"description = \"Reusable Leptos components\""
|
|
"source = \"p-jpl-website\""
|
|
"status = \"available\""
|
|
"requires = []"
|
|
]
|
|
|
|
$features_registry | str join "\n" | save --force $"($REGISTRY_PATH)/features.toml"
|
|
print " ✓ Features registry created"
|
|
}
|
|
|
|
# Run Phase 2 if requested
|
|
def run_phase_2 [] {
|
|
print "🚀 Running Phase 2: Feature Extraction"
|
|
|
|
mkdir features
|
|
extract_analytics_feature
|
|
extract_smart_build_feature
|
|
create_features_registry
|
|
|
|
print "✅ Phase 2 completed successfully!"
|
|
}
|
|
|
|
# Export functions for external use
|
|
export def phase_2 [] { run_phase_2 }
|