From 6fe4c87acf56ec4052d92e26ab39e5f59af4853a Mon Sep 17 00:00:00 2001 From: Patrick Spek Date: Sun, 16 May 2021 11:17:11 +0200 Subject: Add script for easy publishing of the site --- bin/publish | 75 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100755 bin/publish diff --git a/bin/publish b/bin/publish new file mode 100755 index 0000000..e53541e --- /dev/null +++ b/bin/publish @@ -0,0 +1,75 @@ +#!/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 <