2017-08-09 17:34:46 -04:00
#!/bin/bash
2017-08-10 21:08:03 -04:00
#
#/**
# * 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.
# */
2017-08-09 17:34:46 -04:00
# This script is meant to run as part of a Jenkins job such as
# https://builds.apache.org/job/hbase_generate_website/
#
# It needs to be built on a Jenkins server with the label git-websites
#
# It expects to have the hbase repo cloned to the directory hbase
#
# If there is a build error, the Jenkins job is configured to send an email
LOCAL_REPO = ${ WORKSPACE } /.m2/repo
# Nuke the local maven repo each time, to start with a known environment
rm -Rf " ${ LOCAL_REPO } "
mkdir -p " ${ LOCAL_REPO } "
# Clean any leftover files in case we are reusing the workspace
rm -Rf -- *.patch *.patch.zip hbase/target target *.txt hbase-site
# Set up the environment
export JAVA_HOME = $JDK_1_8_LATEST__HOME
export PATH = $JAVA_HOME /bin:$MAVEN_3_3_3_HOME /bin:$PATH
export MAVEN_OPTS = " -XX:MaxPermSize=256m -Dmaven.repo.local= ${ LOCAL_REPO } "
# Verify the Maven version
mvn -version
# Save and print the SHA we are building
CURRENT_HBASE_COMMIT = " $( git log --pretty= format:%H -n1) "
echo " Current HBase commit: $CURRENT_HBASE_COMMIT "
# Clone the hbase-site repo manually so it doesn't trigger spurious
# commits in Jenkins.
git clone --depth 1 --branch asf-site https://git-wip-us.apache.org/repos/asf/hbase-site.git
# Figure out the last commit we built the site from, and bail if the build
# still represents the SHA of HBase master
cd " ${ WORKSPACE } /hbase-site " || exit -1
git log --pretty= %s | grep ${ CURRENT_HBASE_COMMIT }
PUSHED = $?
echo " PUSHED is $PUSHED "
if [ $PUSHED -eq 0 ] ; then
echo " $CURRENT_HBASE_COMMIT is already mentioned in the hbase-site commit log. Not building. "
exit 0
else
echo " $CURRENT_HBASE_COMMIT is not yet mentioned in the hbase-site commit log. Assuming we don't have it yet. $PUSHED "
fi
# Go to the hbase directory so we can build the site
cd " ${ WORKSPACE } /hbase " || exit -1
# This will only be set for builds that are triggered by SCM change, not manual builds
if [ " $CHANGE_ID " ] ; then
echo -n " ( $CHANGE_ID - $CHANGE_TITLE ) "
fi
# Build and install HBase, then build the site
echo "Building HBase"
mvn \
-DskipTests \
-Dmaven.javadoc.skip= true \
--batch-mode \
-Dcheckstyle.skip= true \
-Dfindbugs.skip= true \
--log-file= " ${ WORKSPACE } /hbase-build-log- ${ CURRENT_HBASE_COMMIT } .txt " \
clean install \
&& mvn clean site \
--batch-mode \
-DskipTests \
--log-file= " ${ WORKSPACE } /hbase-install-log- ${ CURRENT_HBASE_COMMIT } .txt "
status = $?
if [ $status -ne 0 ] ; then
echo "Failure: mvn clean site"
exit $status
fi
# Stage the site
echo "Staging HBase site"
mvn \
--batch-mode \
--log-file= " ${ WORKSPACE } /hbase-stage-log- ${ CURRENT_HBASE_COMMIT } .txt " \
site:stage
status = $?
if [ $status -ne 0 ] || [ ! -d target/staging ] ; then
echo "Failure: mvn site:stage"
exit $status
fi
# Get ready to update the hbase-site repo with the new artifacts
cd " ${ WORKSPACE } /hbase-site " || exit -1
#Remove previously-generated files
FILES_TO_REMOVE = ( "hbase-*"
"apidocs"
"devapidocs"
"testapidocs"
"testdevapidocs"
"xref"
"xref-test"
"*book*"
"*.html"
"*.pdf*"
"css"
"js"
"images" )
for FILE in " ${ FILES_TO_REMOVE [@] } " ; do
echo " Removing ${ WORKSPACE } /hbase-site/ $FILE "
rm -Rf " ${ FILE } "
done
# Copy in the newly-built artifacts
cp -au " ${ WORKSPACE } " /hbase/target/staging/* .
# If the index.html is missing, bail because this is serious
if [ ! -f index.html ] ; then
echo "The index.html is missing. Aborting."
exit 1
else
# Add all the changes
echo "Adding all the files we know about"
git add .
# Create the commit message and commit the changes
WEBSITE_COMMIT_MSG = " Published site at $CURRENT_HBASE_COMMIT . "
echo " WEBSITE_COMMIT_MSG: $WEBSITE_COMMIT_MSG "
git commit -m " ${ WEBSITE_COMMIT_MSG } " -a
# Dump a little report
echo "This commit changed these files (excluding Modified files):"
git diff --name-status --diff-filter= ADCRTXUB origin/asf-site
# Create a patch, which Jenkins can save as an artifact and can be examined for debugging
git format-patch --stdout origin/asf-site > " ${ WORKSPACE } / ${ CURRENT_HBASE_COMMIT } .patch "
echo " Change set saved to patch ${ WORKSPACE } / ${ CURRENT_HBASE_COMMIT } .patch "
# Push the real commit
git push origin asf-site || ( echo "Failed to push to asf-site. Website not updated." && exit -1)
# Create an empty commit to work around INFRA-10751
git commit --allow-empty -m "INFRA-10751 Empty commit"
# Push the empty commit
git push origin asf-site || ( echo "Failed to push the empty commit to asf-site. Website may not update. Manually push an empty commit to fix this. (See INFRA-10751)" && exit -1)
echo "Pushed the changes to branch asf-site. Refresh http://hbase.apache.org/ to see the changes within a few minutes."
git fetch origin
git reset --hard origin/asf-site
# Zip up the patch so Jenkins can save it
cd " ${ WORKSPACE } " || exit -1
zip website.patch.zip " ${ CURRENT_HBASE_COMMIT } .patch "
fi
#echo "Dumping current environment:"
#env