#!/usr/bin/env bash # # Build and test the site content # # Requirement: html-proofer, jekyll # # Usage: See help information set -eu SITE_DIR="_site" _config="_config.yml" _baseurl="" help() { echo "Build and test the site content" echo echo "Usage:" echo echo " bash ./tools/test.sh [options]" echo echo "Options:" echo ' -c, --config "" Specify config file(s)' echo " -h, --help Print this information." } read_baseurl() { if [[ $_config == *","* ]]; then # multiple config IFS="," read -ra config_array <<<"$_config" # reverse loop the config files for ((i = ${#config_array[@]} - 1; i >= 0; i--)); do _tmp_baseurl="$(grep '^baseurl:' "${config_array[i]}" | sed "s/.*: *//;s/['\"]//g;s/#.*//")" if [[ -n $_tmp_baseurl ]]; then _baseurl="$_tmp_baseurl" break fi done else # single config _baseurl="$(grep '^baseurl:' "$_config" | sed "s/.*: *//;s/['\"]//g;s/#.*//")" fi } main() { # clean up if [[ -d $SITE_DIR ]]; then rm -rf "$SITE_DIR" fi read_baseurl # build JEKYLL_ENV=production bundle exec jekyll b \ -d "$SITE_DIR$_baseurl" -c "$_config" # test bundle exec htmlproofer "$SITE_DIR" \ --disable-external \ --check-html \ --allow_hash_href } while (($#)); do opt="$1" case $opt in -c | --config) _config="$2" shift shift ;; -h | --help) help exit 0 ;; *) # unknown option help exit 1 ;; esac done main