release: harden plugin deployment and recovery
This commit is contained in:
Executable
+54
@@ -0,0 +1,54 @@
|
||||
#!/usr/bin/env bash
|
||||
set -Eeuo pipefail
|
||||
|
||||
ROOT=$(CDPATH=; cd -- "$(dirname -- "${BASH_SOURCE[0]}")/.." && pwd)
|
||||
TMP=$(mktemp -d)
|
||||
trap 'rm -rf "$TMP"' EXIT
|
||||
|
||||
expect_fail() {
|
||||
local label=$1; shift
|
||||
if "$@" >"$TMP/stdout" 2>"$TMP/stderr"; then
|
||||
printf 'FAIL: %s unexpectedly succeeded\n' "$label" >&2
|
||||
return 1
|
||||
fi
|
||||
printf 'ok: %s\n' "$label"
|
||||
}
|
||||
|
||||
mkdir -p "$TMP/real" "$TMP/bin"
|
||||
ln -s "$TMP/real" "$TMP/path-link"
|
||||
|
||||
# deploy/install.sh must reject an existing symlink component and a missing
|
||||
# parent before git clone can create or write the checkout.
|
||||
expect_fail 'deploy install rejects symlink component' \
|
||||
env PLUGIN_SOURCE_DIR="$TMP/path-link/sub2api-add" PLUGIN_ALLOW_CUSTOM_PATHS=true \
|
||||
bash "$ROOT/deploy/install.sh"
|
||||
expect_fail 'deploy install rejects missing parent' \
|
||||
env PLUGIN_SOURCE_DIR="$TMP/missing/sub2api-add" PLUGIN_ALLOW_CUSTOM_PATHS=true \
|
||||
bash "$ROOT/deploy/install.sh"
|
||||
|
||||
# Stub host tools so install-local reaches path validation without requiring
|
||||
# Go or a running systemd instance.
|
||||
cat >"$TMP/bin/go" <<'EOF'
|
||||
#!/usr/bin/env bash
|
||||
if [[ ${1:-} == version ]]; then printf 'go version go1.23.0 linux/amd64\n'; else exit 0; fi
|
||||
EOF
|
||||
cat >"$TMP/bin/systemctl" <<'EOF'
|
||||
#!/usr/bin/env bash
|
||||
exit 0
|
||||
EOF
|
||||
chmod +x "$TMP/bin/go" "$TMP/bin/systemctl"
|
||||
|
||||
expect_fail 'install-local rejects symlink component' \
|
||||
env PATH="$TMP/bin:/usr/bin:/bin" PLUGIN_ALLOW_CUSTOM_PATHS=true \
|
||||
PLUGIN_INSTALL_PREFIX="$TMP/path-link/sub2api-add" \
|
||||
PLUGIN_ETC_DIR="$TMP/etc/sub2api-add" PLUGIN_VAR_DIR="$TMP/var/sub2api-add" \
|
||||
bash "$ROOT/scripts/install-local.sh" --plugin plugin-admin
|
||||
|
||||
expect_fail 'uninstall rejects symlink component' \
|
||||
env PATH="$TMP/bin:/usr/bin:/bin" PLUGIN_ALLOW_CUSTOM_PATHS=true \
|
||||
PLUGIN_INSTALL_PREFIX="$TMP/path-link/sub2api-add" \
|
||||
PLUGIN_ETC_DIR="$TMP/etc/sub2api-add" PLUGIN_VAR_DIR="$TMP/var/sub2api-add" \
|
||||
PLUGIN_SOURCE_DIR="$TMP/source/sub2api-add" \
|
||||
bash "$ROOT/deploy/uninstall.sh" --plugin plugin-admin --yes
|
||||
|
||||
printf '%s\n' 'deploy path safety checks passed'
|
||||
Reference in New Issue
Block a user