docmachine-containers/scripts/gx-teaching

138 lines
3.1 KiB
Text
Raw Normal View History

2021-11-23 22:48:06 +00:00
#!/bin/sh
# vim: set ft=sh:
2021-12-23 21:42:53 +00:00
# Set defaults
BASEDIR="$(pwd)"
BASEHASH="$(echo "$BASEDIR" |sha256sum |head -c7)"
2021-12-21 15:39:51 +00:00
ACTION="watch"
VERBOSITY="0"
2021-11-23 22:48:06 +00:00
DOCKER_IMAGE=glenux/teaching-boilerplate:latest
2021-12-21 15:39:51 +00:00
DOCKER_OPT_TTY="-t"
gxt_usage() {
echo "Usage: $0 [options]"
echo ""
echo "-d, --data-dir DIR Content directory"
echo "-a, --action ACTION Action (watch, build, shell, etc.)"
echo "-t, --tty Enable TTY mode (needed for shell)"
echo "-v, --verbose Enable verbosity"
echo "-h, --help Show this help"
}
2021-12-21 15:39:51 +00:00
# Parse arguments
while [ $# -gt 0 ]; do
ARG="${1:-}"
OPT="${2:-}"
shift
2021-12-21 15:55:46 +00:00
# echo "DEBUG: ARG=$ARG OPT=$OPT"
2021-12-21 15:39:51 +00:00
case "$ARG" in
-a|--action)
shift # argument requires a parameter
if [ -z "$OPT" ]; then
>&2 echo "ERROR: missing argument for --action"
exit 1
fi
ACTION="$OPT"
;;
2021-12-21 15:39:51 +00:00
-d|--data-dir)
shift # argument requires a parameter
if [ -z "$OPT" ]; then
>&2 echo "ERROR: missing argument for --data-dir"
exit 1
fi
if [ ! -d "$OPT" ]; then
>&2 echo "ERROR: argument for --data-dir must be a directory"
exit 1
fi
BASEDIR="$(cd "$OPT" && pwd)"
;;
-h|--help)
>&2 gxt_usage
exit 0
2021-12-21 15:39:51 +00:00
;;
-T|--no-tty)
DOCKER_OPT_TTY=""
;;
-v|--verbosity)
VERBOSITY="$((VERBOSITY+1))"
2021-12-21 15:39:51 +00:00
;;
*)
>&2 gxt_usage
2021-12-21 15:39:51 +00:00
>&2 echo "ERROR: unknown option '$ARG'"
exit 1
;;
esac
done
2021-11-23 22:48:06 +00:00
echo "basedir = $BASEDIR"
echo "docker_image = $DOCKER_IMAGE"
echo "action = $ACTION"
2022-11-02 19:53:20 +00:00
## Detect Marp SCSS
2021-11-25 16:52:03 +00:00
if [ -f "$BASEDIR/.marp/theme.scss" ]; then
2021-11-24 18:35:20 +00:00
DOCKER_OPT_MARP_THEME="-v $BASEDIR/.marp:/app/.marp"
2021-11-25 16:52:03 +00:00
echo "Theme: detected Marp files. Adding option to command line ($DOCKER_OPT_MARP_THEME)"
else
echo "Theme: no theme detected. Using default files"
2021-11-24 18:35:20 +00:00
fi
2022-11-02 19:53:20 +00:00
## Detect Mkdocs configuration - old format (full)
if [ -f "$BASEDIR/mkdocs.yml" ]; then
2022-01-28 17:41:34 +00:00
>&2 echo "Mkdocs: detected mkdocs.yml file. Please rename to mkdocs-patch.yml"
exit 1
fi
2022-11-02 19:53:20 +00:00
## Detect Mkdocs configuration - new format (patch)
2022-01-28 17:41:34 +00:00
if [ -f "$BASEDIR/mkdocs-patch.yml" ]; then
DOCKER_OPT_MKDOCS_CONFIG="-v $BASEDIR/mkdocs-patch.yml:/app/mkdocs-patch.yml"
2022-01-28 17:41:34 +00:00
echo "Mkdocs: detected mkdocs-patch.yml file. Adding option to command line ($DOCKER_OPT_MKDOCS_CONFIG)"
else
2022-01-28 17:41:34 +00:00
echo "Mkdocs: no mkdocs-patch.yml detected. Using default files"
fi
2022-11-02 19:53:20 +00:00
## Detect slides
if [ -d "$BASEDIR/slides" ]; then
DOCKER_OPT_MARP_PORT="-p 5200:5200"
fi
2022-11-02 19:53:20 +00:00
## Detect docs
if [ -d "$BASEDIR/docs" ]; then
DOCKER_OPT_MKDOCS_PORT="-p 5100:5100"
fi
2021-11-24 18:35:20 +00:00
if [ "$VERBOSITY" -gt 0 ]; then
set -x
fi
DOCKER_NAME="gx-teaching-$BASEHASH"
DOCKER_CID="$(docker ps -f "name=$DOCKER_NAME" -q)"
if [ -n "$DOCKER_CID" ]; then
docker kill "$DOCKER_NAME"
fi
2021-12-21 15:39:51 +00:00
docker run -i $DOCKER_OPT_TTY \
--name "$DOCKER_NAME" \
--rm \
--shm-size=1gb \
-e "EXT_UID=$(id -u)" \
-e "EXT_GID=$(id -g)" \
2021-11-23 22:48:06 +00:00
-v "$BASEDIR/docs:/app/docs" \
-v "$BASEDIR/slides:/app/slides" \
2021-11-25 17:44:46 +00:00
-v "$BASEDIR/images:/app/images" \
2021-11-23 22:48:06 +00:00
-v "$BASEDIR/_build:/app/_build" \
$DOCKER_OPT_MKDOCS_CONFIG \
2021-11-24 18:35:20 +00:00
$DOCKER_OPT_MARP_THEME \
$DOCKER_OPT_MKDOCS_PORT \
$DOCKER_OPT_MARP_PORT \
2021-11-23 22:48:06 +00:00
"$DOCKER_IMAGE" "$ACTION"
2022-11-02 19:53:20 +00:00
if [ "$VERBOSITY" -gt 0 ]; then
set +x
fi
2021-11-23 22:48:06 +00:00
# TODO: ask current user permissions
# TODO: fix permissions on generated files