#!/bin/sh # This program is free software: you can redistribute it and/or modify it under # the terms of the GNU Affero General Public License as published by the Free # Software Foundation, either version 3 of the License, or (at your option) any # later version. # # This program is distributed in the hope that it will be useful, but WITHOUT # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS # FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more # details. readonly BASEDIR="$(CDPATH="" cd -- "$(dirname -- "$0")/.." && pwd -P)" main() { # Handle opts while getopts ":h" opt do case "$opt" in h) usage && exit 0 ;; *) printf "Invalid option passed: %s\n" "$OPTARG" >&2 ;; esac done shift $(( OPTIND - 1 )) if [ $# -lt 1 ] then printf "Must specify a directory to publish the site at\n" exit 3 fi output=$1 # Ensure output directory exists if [ ! -d "$output" ] then printf "No such directory: %s\n" "$output" exit 4 fi # Make ZFS snapshot if awk '$3 == "zfs" { print $2 }' < /proc/mounts | grep -q "$output" then zfs_subvol="$(zfs list -o name,mountpoint | awk '$2 == "'"$output"'" { print $1 }')" zfs_snapshot="$zfs_subvol@$(date +%FT%T)" printf "Creating ZFS snapshot %s\n" "$zfs_snapshot" sudo zfs snapshot "$zfs_snapshot" fi # Publish new site source cd -- "$BASEDIR/src" bundle install bundle exec jekyll build -d "$output" } usage() { cat <