#!/usr/bin/env bash # Make sure the current directory is the location of this script to simplify matters cd "$(dirname "$(readlink -f "$0")")"; ################ ### Settings ### ################ # The name of this project project_name="pepperminty.wiki"; # The path to the lantern build engine git submodule lantern_path="./lantern-build-engine"; ### # Custom Settings ### config="./.eleventy.js"; # relative to src/ output_dir="${PWD}/public"; port_number="5726" scp_path="starbeamrainbowlabs.com:/srv/pepperminty.wiki/www/"; ############################################################################### # Check out the lantern git submodule if needed if [ ! -f "${lantern_path}/lantern.sh" ]; then git submodule update --init "${lantern_path}"; fi #shellcheck disable=SC1090 source "${lantern_path}/lantern.sh"; if [[ "$#" -lt 1 ]]; then echo -e "${FBLE}${project_name}${RS} build script"; echo -e " by Starbeamrainbowlabs"; #shellcheck disable=SC2154 echo -e "${LC}Powered by the lantern build engine, v${version}${RS}"; echo -e ""; echo -e "${CSECTION}Usage${RS}"; echo -e " ./build ${CTOKEN}{action}${RS} ${CTOKEN}{action}${RS} ${CTOKEN}{action}${RS} ..."; echo -e ""; echo -e "${CSECTION}Available actions${RS}"; echo -e " ${CACTION}setup${RS} - Perform initial setup"; echo -e " ${CACTION}build${RS} - Build the static site"; echo -e " ${CACTION}watch${RS} - Watch for changes and rebuild automatically"; echo -e " ${CACTION}server${RS} - Start a development busybox http server"; echo -e " ${CACTION}launch${RS} - Do both ${CACTION}server${RS} and ${CACTION}watch${RS}"; echo -e " ${CACTION}serve${RS} - Start a livereload server"; echo -e " ${CACTION}deploy${RS} - Build and deploy to the remote web server"; echo -e ""; exit 1; fi ############################################################################### task_setup() { task_begin "Checking environment"; check_command git true; check_command node true; check_command npm true; check_command npx true; task_end 0; task_begin "Initialising submodules"; execute git submodule update --init; task_end $?; task_begin "Installing dependencies"; npm install; task_end "$?"; } task_build() { task_begin "Building site"; cd src || { echo "Failed to cd into src"; exit 1; }; execute npx @11ty/eleventy --config="${config}" --output="${output_dir}"; task_end "$?"; } task_watch() { echo -e "Watching for changes."; while :; do # : = infinite loop # Wait for an update # inotifywait's non-0 exit code forces an exit for some reason :-/ inotifywait -qr --event modify --event close_write --format '%:e %f' src; # Rebuild the client code - spawn a sub-process to avoid the hard exit # This still doesn't work though, which is *really* annoying stage_begin "Rebuilding"; set +e; # Allow errors ./build build; set -e; stage_end 0; done } task_server() { task_begin "Starting server"; busybox httpd -vv -f -p "${port_number}" -h "${output_dir}" & pid="$!" task_end "$?"; echo -e "Server started on ${HC}http://$(hostname -I | tr ' ' '\n' | head -n1):${port_number}/${RS}" on_exit() { task_begin "Stopping server"; kill "${pid}"; task_end "$?"; } trap on_exit EXIT; wait } task_launch() { tasks_run server & tasks_run watch & wait } task_serve() { tasks_run watch & sleep 0.2; task_begin "Building site"; cd src || { echo "Failed to cd into src"; exit 1; }; execute npx @11ty/eleventy --config="${config}" --serve --output "${output_dir}"; task_end "$?"; } task_deploy() { tasks_run build; task_begin "Deploying pepperminty.wiki"; scp -r ${output_dir}/* "${scp_path}"; task_end "$?"; } ############################################################################### tasks_run "$@";