90 lines
1.5 KiB
Bash
Executable file
90 lines
1.5 KiB
Bash
Executable file
#!/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 "<config_a[,config_b[...]]>" 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
|