mirror of
https://github.com/webinstall/webi-installers.git
synced 2026-05-29 20:13:02 +00:00
- _scripts/deploy-webinstall: rsync-based deploy to beta.webi.sh and next.webi.sh that excludes _cache, restarts the webinstall service via serviceman (sourcing ~/.config/envman/PATH.env so serviceman is on PATH for non-interactive ssh). Uses an end-of-line anchored process match so only the node worker is touched, never its supervisor. - AGENTS.md: document the cache-only Node server (two paths, canonical os/arch/libc/ext vocabulary), add a domains table for prod/beta/next, remove stale normalize.js references. - .gitignore: ignore agent session files (LOCAL.md, agents/, etc) and local test fixtures (testdata/).
101 lines
3.1 KiB
Bash
Executable File
101 lines
3.1 KiB
Bash
Executable File
#!/bin/sh
|
|
set -e
|
|
set -u
|
|
|
|
# Deploy the Node.js webinstall (installer server) to a target host.
|
|
# Usage: _scripts/deploy-webinstall <host>
|
|
# e.g. _scripts/deploy-webinstall beta.webi.sh
|
|
# _scripts/deploy-webinstall next.webi.sh
|
|
|
|
fn_main() {
|
|
g_host="${1:-}"
|
|
if test -z "${g_host}"; then
|
|
printf 'Usage: %s <host>\n' "$0" >&2
|
|
printf ' e.g. %s beta.webi.sh\n' "$0" >&2
|
|
exit 1
|
|
fi
|
|
|
|
# beta.webi.sh → ~/srv/beta.webinstall.dev/installers/
|
|
# next.webi.sh → ~/srv/next.webinstall.dev/installers/
|
|
b_subdomain="${g_host%%.*}"
|
|
g_dest="~/srv/${b_subdomain}.webinstall.dev/installers/"
|
|
|
|
# Verify the build-classifier submodule is populated. rsync will
|
|
# happily push an empty submodule directory, after which Node
|
|
# crashes at startup with `Cannot find module './build-classifier/
|
|
# host-targets.js'`. New worktrees from `git worktree add` don't
|
|
# init submodules by default.
|
|
if ! test -f ./_webi/build-classifier/host-targets.js; then
|
|
printf 'fatal: _webi/build-classifier submodule not initialized\n' >&2
|
|
printf ' run: git submodule update --init _webi/build-classifier\n' >&2
|
|
exit 1
|
|
fi
|
|
|
|
printf '%s\n' "Deploying to ${g_host}:${g_dest} ..."
|
|
|
|
rsync -avz --delete \
|
|
--exclude='.git' \
|
|
--exclude='node_modules' \
|
|
--exclude='_cache' \
|
|
--exclude='LIVE_cache' \
|
|
--exclude='webicached' \
|
|
--exclude='classify' \
|
|
--exclude='fetchraw' \
|
|
--exclude='inspect' \
|
|
--exclude='e2etest' \
|
|
--exclude='zigtest' \
|
|
--exclude='distributables.csv' \
|
|
--exclude='agents/' \
|
|
./ "${g_host}:${g_dest}"
|
|
|
|
printf '%s\n' "Restarting webinstall ..."
|
|
|
|
# shellcheck disable=SC2029
|
|
ssh "${g_host}" "
|
|
. ~/.config/envman/PATH.env 2>/dev/null
|
|
rm -rf ${g_dest}_cache 2>/dev/null
|
|
serviceman restart webinstall
|
|
"
|
|
|
|
printf '%s\n' "Waiting for restart ..."
|
|
sleep 3
|
|
|
|
fn_smoke_test
|
|
}
|
|
|
|
fn_smoke_test() {
|
|
printf '%s\n' "Smoke testing https://${g_host}/ ..."
|
|
|
|
b_headers="$(curl -sI --max-time 5 "https://${g_host}/api/releases/go.json?limit=1")"
|
|
|
|
if printf '%s' "${b_headers}" | grep -qi 'X-Robots-Tag: noindex'; then
|
|
printf '%s\n' " [ok] X-Robots-Tag: noindex"
|
|
else
|
|
printf '%s\n' " [FAIL] Missing X-Robots-Tag header"
|
|
fi
|
|
|
|
if printf '%s' "${b_headers}" | grep -qi 'rel="canonical"'; then
|
|
printf '%s\n' " [ok] Link: canonical"
|
|
else
|
|
printf '%s\n' " [FAIL] Missing canonical Link header"
|
|
fi
|
|
|
|
b_version="$(curl -sS --max-time 5 "https://${g_host}/api/releases/go.json?limit=1" | jq -r '.[0].version')"
|
|
if test "${b_version}" != "0.0.0" && test -n "${b_version}"; then
|
|
printf '%s\n' " [ok] API returns go ${b_version}"
|
|
else
|
|
printf '%s\n' " [FAIL] API returned error or empty for go"
|
|
fi
|
|
|
|
b_shebang="$(curl -sS --max-time 5 "https://${g_host}/node" | head -1)"
|
|
if test "${b_shebang}" = "#!/bin/sh"; then
|
|
printf '%s\n' " [ok] Installer path serves shell script"
|
|
else
|
|
printf '%s\n' " [FAIL] Installer path unexpected: ${b_shebang}"
|
|
fi
|
|
|
|
printf '%s\n' "Done."
|
|
}
|
|
|
|
fn_main "$@"
|