85 lines
2.4 KiB
Bash
Executable File
85 lines
2.4 KiB
Bash
Executable File
#!/usr/bin/env sh
|
|
set -eu
|
|
|
|
SCRIPT_DIR=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd)
|
|
RELEASE_ROOT=$(CDPATH= cd -- "$SCRIPT_DIR/.." && pwd)
|
|
PREFIX=${XDG_DATA_HOME:-"$HOME/.local/share"}/bjd-cms
|
|
|
|
while [ "$#" -gt 0 ]; do
|
|
case "$1" in
|
|
--prefix)
|
|
[ "$#" -ge 2 ] || { echo "--prefix requires an absolute directory" >&2; exit 2; }
|
|
PREFIX=$2
|
|
shift 2
|
|
;;
|
|
*)
|
|
echo "usage: sh install/install.sh [--prefix ABSOLUTE_DIRECTORY]" >&2
|
|
exit 2
|
|
;;
|
|
esac
|
|
done
|
|
|
|
case "$PREFIX" in
|
|
/*) ;;
|
|
*) echo "installation prefix must be absolute" >&2; exit 2 ;;
|
|
esac
|
|
[ "$PREFIX" != "/" ] || { echo "refusing broad installation prefix /" >&2; exit 2; }
|
|
|
|
VERSION=$(tr -d '\r\n' < "$RELEASE_ROOT/VERSION")
|
|
case "$VERSION" in
|
|
*[!0-9A-Za-z.+-]*|'') echo "release VERSION is invalid" >&2; exit 2 ;;
|
|
esac
|
|
|
|
[ -f "$RELEASE_ROOT/plugin/bjd-cms-content/scripts/server.py" ] || {
|
|
echo "release plugin is incomplete" >&2
|
|
exit 2
|
|
}
|
|
[ -f "$RELEASE_ROOT/skill/bjd-cms-content/SKILL.md" ] || {
|
|
echo "release skill is incomplete" >&2
|
|
exit 2
|
|
}
|
|
|
|
VERSIONS="$PREFIX/versions"
|
|
DESTINATION="$VERSIONS/$VERSION"
|
|
STAGING="$VERSIONS/.install-$VERSION-$$"
|
|
CURRENT_NEXT="$PREFIX/.current-$VERSION-$$"
|
|
|
|
mkdir -p -- "$VERSIONS"
|
|
[ ! -e "$DESTINATION" ] && [ ! -L "$DESTINATION" ] || {
|
|
echo "version $VERSION is already installed at $DESTINATION" >&2
|
|
exit 2
|
|
}
|
|
[ ! -e "$STAGING" ] && [ ! -L "$STAGING" ] || {
|
|
echo "private staging path already exists" >&2
|
|
exit 2
|
|
}
|
|
if [ -e "$PREFIX/current" ] && [ ! -L "$PREFIX/current" ]; then
|
|
echo "refusing to replace non-symlink current path" >&2
|
|
exit 2
|
|
fi
|
|
|
|
cleanup() {
|
|
case "$STAGING" in
|
|
"$VERSIONS"/.install-*) rm -rf -- "$STAGING" ;;
|
|
esac
|
|
[ ! -L "$CURRENT_NEXT" ] || rm -- "$CURRENT_NEXT"
|
|
}
|
|
trap cleanup EXIT HUP INT TERM
|
|
|
|
mkdir -m 0755 -- "$STAGING"
|
|
cp -a -- "$RELEASE_ROOT/plugin" "$STAGING/plugin"
|
|
cp -a -- "$RELEASE_ROOT/skill" "$STAGING/skill"
|
|
cp -a -- "$RELEASE_ROOT/install" "$STAGING/install"
|
|
cp -- "$RELEASE_ROOT/VERSION" "$RELEASE_ROOT/RELEASE.json" "$STAGING/"
|
|
mv -- "$STAGING" "$DESTINATION"
|
|
|
|
ln -s -- "versions/$VERSION" "$CURRENT_NEXT"
|
|
mv -f -- "$CURRENT_NEXT" "$PREFIX/current"
|
|
trap - EXIT HUP INT TERM
|
|
|
|
echo "Installed BJD CMS Content $VERSION"
|
|
echo "Plugin: $DESTINATION/plugin/bjd-cms-content"
|
|
echo "Skill: $DESTINATION/skill/bjd-cms-content"
|
|
echo "Current pointer: $PREFIX/current"
|
|
echo "Next: read $DESTINATION/install/generic-mcp.md"
|