perf(server): split server-list to dedicated thin handler + ADR-025 pre-commit guard
This commit is contained in:
parent
271f41aa53
commit
889feeb37c
3 changed files with 115 additions and 1 deletions
|
|
@ -3,3 +3,35 @@
|
||||||
use toolkit.nu fmt
|
use toolkit.nu fmt
|
||||||
|
|
||||||
fmt # --check --verbose
|
fmt # --check --verbose
|
||||||
|
|
||||||
|
# ADR-025: Block root star-imports of lib_provisioning / main_provisioning.
|
||||||
|
# A line matching `use lib_provisioning *` or `use main_provisioning *` at the
|
||||||
|
# start of a file (top-level) reintroduces the transitive parse cost this
|
||||||
|
# refactor was designed to eliminate. All imports must be selective.
|
||||||
|
let staged = (git diff --cached --name-only | lines | where { str ends-with ".nu" })
|
||||||
|
|
||||||
|
if ($staged | length) > 0 {
|
||||||
|
let violations = (
|
||||||
|
$staged
|
||||||
|
| each {|f|
|
||||||
|
let hits = (
|
||||||
|
do { git show $":($f)" } | complete
|
||||||
|
| if $in.exit_code == 0 { $in.stdout } else { "" }
|
||||||
|
| lines
|
||||||
|
| enumerate
|
||||||
|
| where { $it.item | str starts-with "use lib_provisioning *" or $it.item | str starts-with "use main_provisioning *" }
|
||||||
|
| each {|row| $" ($f):($row.index + 1): ($row.item | str trim)"}
|
||||||
|
)
|
||||||
|
$hits
|
||||||
|
}
|
||||||
|
| flatten
|
||||||
|
)
|
||||||
|
|
||||||
|
if ($violations | length) > 0 {
|
||||||
|
print "❌ ADR-025 star-import violation — selective imports required:"
|
||||||
|
for v in $violations { print $v }
|
||||||
|
print ""
|
||||||
|
print "Replace `use lib_provisioning *` with explicit `use lib_provisioning/path/to/module.nu [sym1 sym2]`"
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -1115,8 +1115,15 @@ else
|
||||||
esac
|
esac
|
||||||
;;
|
;;
|
||||||
server | s)
|
server | s)
|
||||||
# Intercept subcommand --help before Nu absorbs it at the top-level main
|
# Route list/sync to the lightweight handler (loads only list.nu, ~255ms).
|
||||||
|
# All other subcommands go to the full handler (~1.15s).
|
||||||
_srv_sub="${2:-}"
|
_srv_sub="${2:-}"
|
||||||
|
case "$_srv_sub" in
|
||||||
|
list|ls|l|sync)
|
||||||
|
$NU "${NU_ARGS[@]}" "$PROVISIONING/core/nulib/provisioning-server-list.nu" $CMD_ARGS </dev/null
|
||||||
|
exit $? ;;
|
||||||
|
esac
|
||||||
|
# Intercept subcommand --help before Nu absorbs it at the top-level main
|
||||||
_has_help=false
|
_has_help=false
|
||||||
for _a in "$@"; do [ "$_a" = "--help" ] || [ "$_a" = "-h" ] && _has_help=true && break; done
|
for _a in "$@"; do [ "$_a" = "--help" ] || [ "$_a" = "-h" ] && _has_help=true && break; done
|
||||||
if [ "$_has_help" = "true" ]; then
|
if [ "$_has_help" = "true" ]; then
|
||||||
|
|
|
||||||
75
nulib/provisioning-server-list.nu
Normal file
75
nulib/provisioning-server-list.nu
Normal file
|
|
@ -0,0 +1,75 @@
|
||||||
|
#!/usr/bin/env nu
|
||||||
|
# Thin entry for `server list` and `server sync`.
|
||||||
|
# Loads only servers/list.nu (~255ms vs ~1.15s for the full server handler).
|
||||||
|
# Bash wrapper routes `server list/ls/l/sync` here; all other server subcommands
|
||||||
|
# go to provisioning-server.nu.
|
||||||
|
|
||||||
|
export-env {
|
||||||
|
let lib_dirs_raw = ($env.NU_LIB_DIRS? | default "")
|
||||||
|
let current_lib_dirs = if ($lib_dirs_raw | type) == "string" {
|
||||||
|
if ($lib_dirs_raw | is-empty) { [] } else { ($lib_dirs_raw | split row ":") }
|
||||||
|
} else {
|
||||||
|
$lib_dirs_raw
|
||||||
|
}
|
||||||
|
let dynamic = ($env.PROVISIONING? | default "" | path join "core" "nulib")
|
||||||
|
$env.NU_LIB_DIRS = ([
|
||||||
|
"/opt/provisioning/core/nulib"
|
||||||
|
"/usr/local/provisioning/core/nulib"
|
||||||
|
] | append $current_lib_dirs | append (if ($dynamic | is-not-empty) { [$dynamic] } else { [] }))
|
||||||
|
|
||||||
|
let args_raw = ($env.PROVISIONING_ARGS? | default "")
|
||||||
|
$env.PROVISIONING_ARGS = ($args_raw | str replace --regex '^(server|s)\s+' '')
|
||||||
|
|
||||||
|
let _coerce = {|raw| $raw == "true" or $raw == "1" }
|
||||||
|
let raw_no_titles = ($env.PROVISIONING_NO_TITLES? | default "")
|
||||||
|
if ($raw_no_titles | describe) == "string" and ($raw_no_titles | is-not-empty) {
|
||||||
|
$env.PROVISIONING_NO_TITLES = (do $_coerce $raw_no_titles)
|
||||||
|
}
|
||||||
|
let raw_no_terminal = ($env.PROVISIONING_NO_TERMINAL? | default "")
|
||||||
|
if ($raw_no_terminal | describe) == "string" and ($raw_no_terminal | is-not-empty) {
|
||||||
|
$env.PROVISIONING_NO_TERMINAL = (do $_coerce $raw_no_terminal)
|
||||||
|
}
|
||||||
|
let raw_titles_shown = ($env.PROVISIONING_TITLES_SHOWN? | default "")
|
||||||
|
if ($raw_titles_shown | describe) == "string" and ($raw_titles_shown | is-not-empty) {
|
||||||
|
$env.PROVISIONING_TITLES_SHOWN = (do $_coerce $raw_titles_shown)
|
||||||
|
}
|
||||||
|
let raw_debug = ($env.PROVISIONING_DEBUG? | default "")
|
||||||
|
if ($raw_debug | describe) == "string" and ($raw_debug | is-not-empty) {
|
||||||
|
$env.PROVISIONING_DEBUG = (do $_coerce $raw_debug)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
use servers/list.nu *
|
||||||
|
|
||||||
|
def main [
|
||||||
|
...args: string
|
||||||
|
--infra (-i): string = ""
|
||||||
|
--debug (-x)
|
||||||
|
--out: string = ""
|
||||||
|
]: nothing -> nothing {
|
||||||
|
if $debug { $env.PROVISIONING_DEBUG = true }
|
||||||
|
|
||||||
|
let first = ($args | get 0? | default "")
|
||||||
|
let rest = if $first in ["server" "s"] { $args | skip 1 } else { $args }
|
||||||
|
let subcmd = ($rest | get 0? | default "list")
|
||||||
|
|
||||||
|
match $subcmd {
|
||||||
|
"list" | "ls" | "lis" | "l" | "" => {
|
||||||
|
if ($infra | is-not-empty) {
|
||||||
|
main list --infra $infra --debug=$debug --out=$out
|
||||||
|
} else {
|
||||||
|
main list --debug=$debug --out=$out
|
||||||
|
}
|
||||||
|
}
|
||||||
|
"sync" => {
|
||||||
|
if ($infra | is-not-empty) {
|
||||||
|
main sync --infra $infra
|
||||||
|
} else {
|
||||||
|
main sync
|
||||||
|
}
|
||||||
|
}
|
||||||
|
_ => {
|
||||||
|
error make { msg: $"server-list handler received unexpected subcommand '($subcmd)'" }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Add table
Reference in a new issue