Jesús Pérez 85ce530733
feat: update provisioning core CLI, libraries, and plugins
Update core components including CLI, Nushell libraries, plugins system,
and utility scripts for the provisioning system.

CLI Updates:
- Command implementations
- CLI utilities and dispatching
- Help system improvements
- Command validation

Library Updates:
- Configuration management system
- Infrastructure validation
- Extension system improvements
- Secrets management
- Workspace operations
- Cache management system

Plugin System:
- Interactive form plugin (inquire)
- KCL integration plugin
- Performance optimization plugins
- Plugin registration system

Utilities:
- Build and distribution scripts
- Installation procedures
- Testing utilities
- Development tools

Documentation:
- Library module documentation
- Extension API guides
- Plugin usage guides
- Service management documentation

All changes are backward compatible. No breaking changes.
2025-12-11 21:57:05 +00:00

148 lines
4.4 KiB
Plaintext

# Minimal Configuration Loader
# Fast-path config loading for help commands and basic operations
# Contains ONLY essential path detection and workspace identification (~150 lines)
# Detect current environment from ENV, workspace name, or default
export def detect-current-environment [] {
# Check explicit environment variable
if ($env.PROVISIONING_ENVIRONMENT? | is-not-empty) {
return $env.PROVISIONING_ENVIRONMENT
}
# Check if workspace name contains environment hints
let active_ws = (get-active-workspace)
if ($active_ws | is-not-empty) {
let ws_name = $active_ws.name
if ($ws_name | str contains "prod") { return "prod" }
if ($ws_name | str contains "staging") { return "staging" }
if ($ws_name | str contains "test") { return "test" }
if ($ws_name | str contains "dev") { return "dev" }
}
# Check PWD for environment hints
if ($env.PWD | str contains "prod") { return "prod" }
if ($env.PWD | str contains "staging") { return "staging" }
if ($env.PWD | str contains "test") { return "test" }
if ($env.PWD | str contains "dev") { return "dev" }
# Default environment
"dev"
}
# Get the currently active workspace (from central user config)
export def get-active-workspace [] {
let user_config_dir = ([$env.HOME "Library" "Application Support" "provisioning"] | path join)
if not ($user_config_dir | path exists) {
return null
}
# Load central user config
let user_config_path = ($user_config_dir | path join "user_config.yaml")
if not ($user_config_path | path exists) {
return null
}
let user_config = (open $user_config_path)
# Check if active workspace is set
if ($user_config.active_workspace == null) {
null
} else {
# Find workspace in list
let workspace_name = $user_config.active_workspace
let workspace = ($user_config.workspaces | where name == $workspace_name | first)
if ($workspace | is-empty) {
null
} else {
{
name: $workspace.name
path: $workspace.path
}
}
}
}
# Find project root by looking for kcl.mod or core/nulib directory
export def get-project-root [] {
let potential_roots = [
$env.PWD
($env.PWD | path dirname)
($env.PWD | path dirname | path dirname)
($env.PWD | path dirname | path dirname | path dirname)
]
let matching_roots = ($potential_roots
| where ($it | path join "kcl.mod" | path exists)
or ($it | path join "core" "nulib" | path exists))
if ($matching_roots | length) > 0 {
$matching_roots | first
} else {
$env.PWD
}
}
# Get system defaults configuration path
export def get-defaults-config-path [] {
let base_path = if ($env.PROVISIONING? | is-not-empty) {
$env.PROVISIONING
} else {
"/usr/local/provisioning"
}
($base_path | path join "provisioning" "config" "config.defaults.toml")
}
# Check if a file is encrypted with SOPS
export def check-if-sops-encrypted [file_path: string]: nothing -> bool {
let file_exists = ($file_path | path exists)
if not $file_exists {
return false
}
# Read first few bytes to check for SOPS marker
let content = (^bash -c $"head -c 100 \"($file_path)\"")
# SOPS encrypted files contain "sops" key in the header
($content | str contains "sops")
}
# Get SOPS configuration path if it exists
export def find-sops-config-path [] {
let possible_paths = [
($env.HOME | path join ".sops.yaml")
($env.PWD | path join ".sops.yaml")
($env.PWD | path join "sops" ".sops.yaml")
($env.PWD | path join ".decrypted" ".sops.yaml")
]
let existing_paths = ($possible_paths | where ($it | path exists))
if ($existing_paths | length) > 0 {
$existing_paths | first
} else {
null
}
}
# Update workspace last-used timestamp (non-critical, safe to fail silently)
export def update-workspace-last-used [workspace_name: string] {
let user_config_dir = ([$env.HOME "Library" "Application Support" "provisioning"] | path join)
if not ($user_config_dir | path exists) {
return
}
let user_config_path = ($user_config_dir | path join "user_config.yaml")
if not ($user_config_path | path exists) {
return
}
# Safe fallback - if any part fails, silently continue
# This is not critical path
}