Files
recipes/build.sh
T
2016-12-10 14:45:48 -08:00

121 lines
2.7 KiB
Bash
Executable File

#!/bin/bash
OUTPUT="docs"
USAGE=$(cat <<- END
USAGE: build.sh <command> <options>
Commands:
build rebuild the site
clean remove all build artifacts
help display this help message
server run a local server
watch start a server and rebuild periodically
END
)
# Helper Functions #####################################################################################################
function start-server {
cd $OUTPUT
python -m SimpleHTTPServer 8080 >/dev/null 2>&1 &
SERVER_PID="$!"
cd ..
trap "kill $SERVER_PID; exit" SIGINT
}
function usage {
printf "$USAGE\n\n"
if [[ "$1" != "" ]]; then
printf "\n$*\n"
fi
exit
}
# Command Functions ####################################################################################################
function run-build {
mkdir -p "$OUTPUT"
cd src
find . -type f | while read FILE; do
BASENAME=$(basename "$FILE")
DIRNAME=$(dirname "$FILE")
EXT=$(echo "$BASENAME" | cut -d. -f2)
BASENAME=$(echo "$BASENAME" | cut -d. -f1)
# echo "file: $FILE, dirname: $DIRNAME, basename: $BASENAME, ext: $EXT"
if [[ "$EXT" == "pug" ]]; then
TARGET="../$OUTPUT/$DIRNAME/$BASENAME.html"
if [[ "$TARGET" -ot "$FILE" ]]; then
pug -o "../$OUTPUT/$DIRNAME" "$FILE"
fi
elif [[ "$EXT" == "png" ]]; then
TARGET="../$OUTPUT/$DIRNAME/$BASENAME.$EXT"
if [[ "$TARGET" -ot "$FILE" ]]; then
mkdir -p "../$OUTPUT/$DIRNAME"
cp "$FILE" "$TARGET"
fi
elif [[ "$EXT" == "scss" ]]; then
TARGET="../$OUTPUT/$DIRNAME/$BASENAME.css"
if [[ "$TARGET" -ot "$FILE" ]]; then
sass "$FILE" "$TARGET"
fi
fi
done
cd ..
}
COMMANDS="build"
function run-clean {
rm -rf "$OUTPUT" 2>/dev/null
}
COMMANDS="$COMMANDS,clean"
function run-help {
usage
}
COMMANDS="$COMMANDS,help"
function run-server {
start-server
echo "Running server. Press ^C to stop"
while true; do
sleep 60
done
}
COMMANDS="$COMMANDS,server"
function run-watch {
start-server
echo "Watching. Press ^C to cancel"
while true; do
run-build
sleep 2
done
}
COMMANDS="$COMMANDS,watch"
########################################################################################################################
COMMAND="$1"; shift
[[ "$COMMAND" == "" ]] && COMMAND="build"
grep -q "$COMMAND" <<< $COMMANDS || usage "Unknown command: $COMMAND"
while [[ "$1" != "" ]]; do
case "$1" in
esac
shift
done
"run-$COMMAND"