#!/usr/bin/env bash set -euo pipefail # Deploy this luxtools plugin checkout into a mounted DokuWiki plugins dir. # Default target is the user's mount path. # # Usage: # ./deploy.sh # deploy to /thebe/Web/lib/plugins/luxtools/ # ./deploy.sh --dry-run # show what would change # ./deploy.sh /path/to/luxtools # ./deploy.sh --no-delete # don't delete extraneous files at target # ./deploy.sh --preserve-times # keep source mtimes at target TARGET="/thebe/Web/lib/plugins/luxtools" DRY_RUN=0 DELETE=1 PRESERVE_TIMES=0 while (($#)); do case "$1" in --dry-run|-n) DRY_RUN=1 shift ;; --no-delete) DELETE=0 shift ;; --preserve-times) PRESERVE_TIMES=1 shift ;; -h|--help) sed -n '1,80p' "$0" exit 0 ;; *) TARGET="$1" shift ;; esac done if ! command -v rsync >/dev/null 2>&1; then echo "Error: rsync is required." >&2 exit 1 fi SRC_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" # Safety checks: make sure source looks like luxtools plugin if [[ ! -f "$SRC_DIR/plugin.info.txt" ]]; then echo "Error: '$SRC_DIR' doesn't look like luxtools (missing plugin.info.txt)." >&2 exit 1 fi # Ensure target dir exists mkdir -p "$TARGET" # Safety check: refuse to deploy to an obviously wrong directory. # Allow empty dir (fresh install) OR existing luxtools plugin dir. if [[ -e "$TARGET/plugin.info.txt" ]]; then if ! grep -qi "^base\s\+luxtools" "$TARGET/plugin.info.txt" 2>/dev/null; then echo "Error: target '$TARGET' has a plugin.info.txt, but it doesn't look like luxtools." >&2 echo "Refusing to deploy." >&2 exit 1 fi fi RSYNC_ARGS=( -a --human-readable --itemize-changes --chmod=Du=rwx,Dgo=rx,Fu=rw,Fgo=r --exclude=deploy.sh --exclude=.git/ --exclude=_dokuwiki/ --exclude=_agent-data/ --exclude=.github/ --exclude=.vscode/ --exclude=_test/ --exclude=deleted.files --exclude=*.swp --exclude=*.swo --exclude=.DS_Store ) # DokuWiki's combined CSS (lib/exe/css.php) is cached and invalidated based on source file mtimes. # When deploying to a mounted/remote filesystem with a different clock, preserving mtimes can make # DokuWiki think the cache is always newer than your plugin CSS. Avoid that by default. if (( ! PRESERVE_TIMES )); then RSYNC_ARGS+=(--no-times --omit-dir-times) fi if ((DRY_RUN)); then RSYNC_ARGS+=(--dry-run) fi if ((DELETE)); then RSYNC_ARGS+=(--delete) fi echo "Deploying luxtools from: $SRC_DIR/" echo "Deploying luxtools to: $TARGET/" rsync "${RSYNC_ARGS[@]}" "$SRC_DIR/" "$TARGET/" echo "Done."