website-htmx-rustelo-code/scripts/admin/website.nu

71 lines
2.2 KiB
Text
Raw Permalink Normal View History

2026-07-10 03:44:13 +01:00
# Website-specific NATS ops commands.
#
# These publish fire-and-forget signals on the `ops.*` subjects consumed by
# CI/CD listeners and the server's config-reload watcher.
use ../../../rustelo/code/admin/lib/common.nu [build-admin-subject, nats-admin-url, nats-admin-creds]
# Internal: fire-and-forget publish (no reply expected).
def nats-pub [
subject: string
payload: string
--url: string = ""
--creds: string = ""
] {
let server = nats-admin-url $url
let creds_path = nats-admin-creds $creds
let base = ["pub", "--server", $server, $subject, $payload]
let args = if ($creds_path | is-not-empty) {
["--creds", $creds_path] ++ $base
} else {
$base
}
^nats ...$args
}
# Publish a deploy signal to the ops bus.
#
# CI/CD calls this after a successful build to notify running supervisors or
# monitoring tooling. The server does NOT restart automatically; this is a
# signal only.
#
# Payload: { "version": "...", "sha": "...", "timestamp": "..." }
#
# Examples:
# website deploy --version "v1.3.0" --sha "abc1234"
export def "website deploy" [
--version: string = "unknown" # Semantic version or git tag
--sha: string = "" # Git commit SHA (optional)
--url: string = ""
--creds: string = ""
] {
let subject = build-admin-subject "ops.deploy"
let ts = date now | format date "%Y-%m-%dT%H:%M:%SZ"
let payload = { version: $version, sha: $sha, timestamp: $ts } | to json --raw
nats-pub $subject $payload --url $url --creds $creds
print $"Deploy signal published — version: ($version)"
}
# Trigger a hot config-reload on the running server (rbac.ncl, external-services, etc.).
#
# The server's config-reload handler receives this signal and re-reads all
# hot-reloadable config files. No restart required.
#
# Examples:
# website reload
# website reload --reason "updated rbac.ncl"
export def "website reload" [
--reason: string = "" # Optional human-readable reason (logged server-side)
--url: string = ""
--creds: string = ""
] {
let subject = build-admin-subject "ops.config-reload"
let payload = { reason: $reason } | to json --raw
nats-pub $subject $payload --url $url --creds $creds
print "Config-reload signal published."
}