samhuri.net/bin/compile.sh
2017-05-21 15:20:11 -07:00

81 lines
1.6 KiB
Bash
Executable file

#!/bin/zsh
# bail on errors
set -e
export PATH="$HOME/.rbenv/shims:$PATH"
DIR=$(dirname "$0")
HARP="node_modules/harp/bin/harp"
BLOG_DIR="${1:-${DIR}/..}"
TARGET="${BLOG_DIR%/}/${2:-www}"
LOCK_FILE="$BLOG_DIR/compile.lock"
if [[ -e "$LOCK_FILE" ]]; then
echo "Bailing, another compilation is running"
exit 1
fi
function lock {
echo $$ >| "$LOCK_FILE"
}
function delete_lock_file {
rm -f "$LOCK_FILE"
}
trap delete_lock_file SIGHUP SIGINT SIGTERM SIGEXIT
lock
function main() {
echo "* compile rss feed"
compile_feeds
echo "* harp compile $BLOG_DIR $TARGET"
rm -rf "$TARGET/*" "$TARGET/.*"
"$HARP" compile "$BLOG_DIR" "$TARGET"
# clean up temporary feeds
rm $BLOG_DIR/public/feed.xml
rm $BLOG_DIR/public/feed.json
echo "* munge html files to make them available without an extension"
munge_html
echo "* inline CSS"
ruby -w $DIR/inline-css.rb "$TARGET"
echo "* minify js"
minify_js
delete_lock_file
}
function compile_feeds() {
ruby -w $DIR/feeds.rb $BLOG_DIR/public
}
function munge_html() {
for FILE in "$TARGET"/*.html "$TARGET"/posts/*/*/*.html "$TARGET"/posts/drafts/*.html "$TARGET"/projects/*.html; do
FILENAME="${FILE##*/}"
case "$FILENAME" in
index.html)
continue
;;
missing.html)
continue
;;
esac
# make posts available without an .html extension
FILE_DIR="${FILE%.html}"
mkdir -p "$FILE_DIR"
mv "$FILE" "$FILE_DIR/index.html"
done
}
function minify_js() {
for FILE in "$TARGET"/js/*.js; do
$DIR/minify-js.sh "$FILE" > /tmp/minified.js && mv /tmp/minified.js "$FILE" || echo "* failed to minify $FILE"
done
}
main