blob: f6b9a817c04ae9752a594e0f0467198143270f10 [file] [log] [blame] [edit]
#!/bin/bash
# This script runs in a loop (configurable with LOOP), checks for updates to the
# Hugo docs theme or to the docs on certain branches and rebuilds the public
# folder for them. It has be made more generalized, so that we don't have to
# hardcode versions.
# Warning - Changes should not be made on the server on which this script is running
# becauses this script does git checkout and merge.
set -e
GREEN='\033[32;1m'
RESET='\033[0m'
HOST="${HOST:-https://dgraph.io/docs/badger}"
# Name of output public directory
PUBLIC="${PUBLIC:-public}"
# LOOP true makes this script run in a loop to check for updates
LOOP="${LOOP:-true}"
# Binary of hugo command to run.
HUGO="${HUGO:-hugo}"
# TODO - Maybe get list of released versions from Github API and filter
# those which have docs.
# Place the latest version at the beginning so that version selector can
# append '(latest)' to the version string, followed by the master version,
# and then the older versions in descending order, such that the
# build script can place the artifact in an appropriate location.
VERSIONS_ARRAY=(
'master'
)
joinVersions() {
versions=$(printf ",%s" "${VERSIONS_ARRAY[@]}")
echo "${versions:1}"
}
function version { echo "$@" | gawk -F. '{ printf("%03d%03d%03d\n", $1,$2,$3); }'; }
rebuild() {
echo -e "$(date) $GREEN Updating docs for branch: $1.$RESET"
# The latest documentation is generated in the root of /public dir
# Older documentations are generated in their respective `/public/vx.x.x` dirs
dir=''
if [[ $2 != "${VERSIONS_ARRAY[0]}" ]]; then
dir=$2
fi
VERSION_STRING=$(joinVersions)
# In Unix environments, env variables should also be exported to be seen by Hugo
export CURRENT_BRANCH=${1}
export CURRENT_VERSION=${2}
export VERSIONS=${VERSION_STRING}
HUGO_TITLE="Badger Doc ${2}"\
VERSIONS=${VERSION_STRING}\
CURRENT_BRANCH=${1}\
CURRENT_VERSION=${2} ${HUGO} \
--destination="${PUBLIC}"/"$dir"\
--baseURL="$HOST"/"$dir" 1> /dev/null
}
branchUpdated()
{
local branch="$1"
git checkout -q "$1"
UPSTREAM=$(git rev-parse "@{u}")
LOCAL=$(git rev-parse "@")
if [ "$LOCAL" != "$UPSTREAM" ] ; then
git merge -q origin/"$branch"
return 0
else
return 1
fi
}
publicFolder()
{
dir=''
if [[ $1 == "${VERSIONS_ARRAY[0]}" ]]; then
echo "${PUBLIC}"
else
echo "${PUBLIC}/$1"
fi
}
checkAndUpdate()
{
local version="$1"
local branch=""
if [[ $version == "master" ]]; then
branch="master"
else
branch="release/$version"
fi
if branchUpdated "$branch" ; then
git merge -q origin/"$branch"
rebuild "$branch" "$version"
fi
folder=$(publicFolder "$version")
if [ "$firstRun" = 1 ] || [ "$themeUpdated" = 0 ] || [ ! -d "$folder" ] ; then
rebuild "$branch" "$version"
fi
}
firstRun=1
while true; do
# Lets move to the docs directory.
pushd "$(dirname "$0")/.." > /dev/null
currentBranch=$(git rev-parse --abbrev-ref HEAD)
# Lets check if the theme was updated.
pushd themes/hugo-docs > /dev/null
git remote update > /dev/null
themeUpdated=1
if branchUpdated "master" ; then
echo -e "$(date) $GREEN Theme has been updated. Now will update the docs.$RESET"
themeUpdated=0
fi
popd > /dev/null
# Now lets check the theme.
echo -e "$(date) Starting to check branches."
git remote update > /dev/null
for version in "${VERSIONS_ARRAY[@]}"
do
checkAndUpdate "$version"
done
echo -e "$(date) Done checking branches.\n"
git checkout -q "$currentBranch"
popd > /dev/null
firstRun=0
if ! $LOOP; then
exit
fi
sleep 60
done