#!/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 ### # Put any custom settings here. # The file to store the development server's PID in. server_pid_file="/tmp/pepperminty-wiki-dev-server.pid"; ############################################################################### # Check out the lantern git submodule if needed if [ ! -d "${lantern_path}" ]; then git submodule update --init "${lantern_path}"; fi source "${lantern_path}/lantern.sh"; if [[ "$#" -lt 1 ]]; then echo -e "${FBLE}${project_name}${RS} build script"; echo -e " by Starbeamrainbowlabs"; 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, check the environment (skip if only building Pepperminty Wiki itself)"; echo -e " ${CACTION}build${RS} - Build Pepperminty Wiki"; echo -e " ${CACTION}docs${RS} - Build the documentation"; echo -e " ${CACTION}docs-livereload${RS} - Start the documentation livereload server"; echo -e " ${CACTION}start-server${RS} - Start a development server"; echo -e " ${CACTION}stop-server${RS} - Stop the development server"; echo -e ""; exit 1; fi ############################################################################### function task_setup { task_begin "Checking Environment"; check_command git true; check_command npm true; check_command npm true; task_end $?; task_begin "Initialising submodules"; git submodule update --init; task_end $?; task_begin "Installing packages"; npm install; task_end $?; task_begin "Creating build folders"; mkdir -p build/_tmp; echo "This folder contains build tools automatically downloaded." >build/_tmp/README.txt; task_end $?; } function task_build { if [ -f "./build/index.php" ]; then task_begin "Deleting old build result"; rm build/index.php; task_end "$?"; fi task_begin "Building"; php build.php task_end $?; } function task_docs { task_begin "Building HTTP API Docs"; node_modules/apidoc/bin/apidoc -o './docs/RestApi/' --config apidoc.json -f '.*\.php' -e 'index.php|ModuleApi' exit_code="$?"; rm -rf doc/; task_end "${exit_code}"; task_begin "Building PHP Module API Docs"; if [ ! -f "./build/_tmp/phpdoc" ]; then subtask_begin "Downloading PHPDoc"; curl -sSL https://phpdoc.org/phpDocumentor.phar -o ./build/_tmp/phpdoc subtask_end $?; fi php ./build/_tmp/phpdoc run \ --directory . \ --target docs/ModuleApi\ --cache-folder build/_tmp/ModuleApiCache \ --ignore build/,Parsedown*,*.html \ --title "Pepperminty Wiki Module API" \ --visibility public; task_end $?; task_begin "Building Main Documentation"; node_modules/.bin/nightdocs -c nightdocs.toml task_end $?; } function task_docs-livereload { task_begin "Listening for changes to docs"; while :; do inotifywait -qr -e modify --format '%:e %f' ./docs/ nightdocs.toml; node_modules/.bin/nightdocs -c nightdocs.toml; done task_end $?; } function task_start-server { task_begin "Starting Server"; if [ -f "${server_pid_file}" ]; then task_end 1 "${FRED}${HC}Error: A development server appears to be running already. Try running the 'stop-server' task before starting it again.${RS}"; fi php -S [::]:35623 -t build/ & exit_code=$?; pid=$!; echo "${pid}" >"${server_pid_file}"; task_end "${exit_code}" ""; task_begin "Opening Browser"; sensible-browser [::]:35623; task_end $?; } function task_stop-server { task_begin "Stopping Server"; kill "$(cat "${server_pid_file}")"; rm "${server_pid_file}"; task_end $?; } ############################################################################### tasks_run $@;