#!/bin/bash

## Copy of the script for the Jenkins job "Jena_Site"
## https://builds.apache.org/job/Jena_Site

## -------------------

# Specify source and site branches
SOURCE="master"
SITE="asf-site"
SOURCE_DIR=${PWD}

git checkout ${SOURCE}
git pull origin ${SOURCE}

# Install Hugo
TMP_HUGO_DIR="$(mktemp -d)"
mkdir -p "${TMP_HUGO_DIR}/bin"
cd "${TMP_HUGO_DIR}" || exit 1
wget --no-verbose -O hugo.tar.gz https://github.com/gohugoio/hugo/releases/download/v0.66.0/hugo_extended_0.66.0_Linux-64bit.tar.gz
tar xfzv hugo.tar.gz
mv hugo "${TMP_HUGO_DIR}/bin/"
export PATH="${TMP_HUGO_DIR}/bin:$PATH"

# Get commit info
cd "${SOURCE_DIR}" || exit 1
LAST_SHA=( $(git log -n 1 --pretty=format:"%H") )

# Create temporary directory
TMP_DIR="$(mktemp -d)"
OUT_DIR="${TMP_DIR}/content"
mkdir -p "${OUT_DIR}"

# Build the site  to our temporary folder
hugo --destination "${OUT_DIR}"
if [ $? = 0 ]; then
  echo "Hugo build successful"
else
  echo "Hugo build failed"
  exit 1
fi

# Switch to the SITE branch
git checkout "${SITE}"
git pull origin "${SITE}"

# Remove the current contents of the SITE branch and replace them with the contents of the temp folder
rm -rf "${SOURCE_DIR}/content"
git rm -r --cached content/*
mkdir -p "${SOURCE_DIR}/content"
cp -rT "${TMP_DIR}"/* "${SOURCE_DIR}/content"

# Commit the changes to the SITE branch
COMMIT_MESSAGE="Updated site from ${SOURCE} (${LAST_SHA})"
git add -A
git commit -m "${COMMIT_MESSAGE}" | true

# Delete the temporary folders
rm -rf "${TMP_DIR}"
rm -rf "${TMP_HUGO_DIR}"

# Push the SITE to the server
git push -u origin ${SITE}
if [ $? = 0 ]; then
  echo "Push ${SITE} successful"
else
  echo "Push ${SITE} failed"
fi

# Switch back to SOURCE branch
git checkout "${SOURCE}"
