#!/usr/bin/env bash
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to you under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License.  You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
# Infra has set up a webhook at the github repo that fires this task.
# We cannot push to github, though, but only to gitbox.
# So we need two repositories in two directories:
#
# master-branch (just cloning):
# git clone https://github.com/apache/incubator-tuweni-website.git master-branch
# asf-site-branch (pushing):
# git clone https://gitbox.apache.org/repos/asf/incubator-tuweni-website.git asf-site-branch
TEMPDIR="$(mktemp  -d -t tuweni-site-XXXXXXX)"
cd $TEMPDIR
git clone https://github.com/apache/incubator-tuweni-website.git master-branch
git clone https://gitbox.apache.org/repos/asf/incubator-tuweni-website.git asf-site-branch
git clone https://github.com/apache/incubator-tuweni.git code

#
# Testing:
#
echo "CHANGE_ID -${CHANGE_ID}-"
echo "CHANGE_URL -${CHANGE_URL}-"
echo "BRANCH_NAME -${BRANCH_NAME}-"
echo "GIT_COMMIT -${GIT_COMMIT}-"
echo "GIT_PREVIOUS_COMMIT -${GIT_PREVIOUS_COMMIT}-"

if [ "X${GIT_COMMIT}" = "X${GIT_PREVIOUS_COMMIT}" ]; then
	echo "Commit ${GIT_COMMIT} equal to previous commit ${GIT_PREVIOUS_COMMIT}: we are done"
#    exit 0
fi

#
# Install RVM if needed
#
curl -sSL https://get.rvm.io | bash -s stable
source "$HOME/.rvm/scripts/rvm"
rvm install 2.7.0
rvm use 2.7.0

#
# Run the jekyll script to generate HTML for tuweni.apache.org
#
cd master-branch
echo "Building site..."
gem install bundler -v 1.16.2
bundle install && bundle exec jekyll build
if [ $? -ne 0 ]; then
	echo "Build failed!"
    exit 1
fi
cd ..

#
# Copy the generated html to the asf-site branch
#
cd asf-site-branch
git checkout asf-site
git fetch origin asf-site
git pull origin asf-site

cp -R ../master-branch/target/* content
cd ..

#
# Generate javadocs
#
cd code
gradle setup
./gradlew dokka
mkdir -p ../asf-site-branch/content/docs
cp build/docs/style.css ../asf-site-branch/content/style.css
cp -R build/docs/tuweni/* ../asf-site-branch/content/docs
cd ..
cd asf-site-branch

#
# Copy favicon to default location
#
cp content/assets/themes/apache/img/tuweni_face.ico content/favicon.ico


#
# Commit and push to gitbox
#
echo "Adding content..."
git add -v content/
echo "Commit to gitbox..."
git status

#
# Note: the "Automated site publishing" text below is used to reject
# builds triggered when pushing to asf-site (see git configuration above).
# If you change this text then remember to change it above also.
#
git commit -v -m "Automated site publishing by Jenkins build ${BUILD_NUMBER}"
if [ $? -ne 0 ]; then
    echo "Commit failed."
    exit 2
fi
echo "Pushing to gitbox..."
git push -v origin asf-site
if [ $? -ne 0 ]; then
    echo "Push failed."
    exit 3
fi
rm -Rf $TEMPDIR
echo "Done."



