| #!/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 |