blob: 1a76e05420619b95d2d5f5cca6eccc0eee688a44 [file] [log] [blame]
#!/bin/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.
#
# This script generates site documentation and Javadocs.
########################################################################
set -e
BUILD_TYPE=release
SOURCE_ROOT=$(cd $(dirname $0)/../../..; pwd)
VERSION=$(cat $SOURCE_ROOT/version.txt)
BUILD_ROOT="$SOURCE_ROOT/build/$BUILD_TYPE"
SITE_OUTPUT_DIR="$BUILD_ROOT/site"
RELEASE_SUBDIR=releases/$VERSION
RELEASE_OUTPUT_DIR="$SITE_OUTPUT_DIR/releases/$VERSION"
OPT_DOXYGEN=1 # By default, build doxygen docs.
OPT_JAVADOC=1 # By default, build javadocs.
OPT_LINK=1 # By default, update the top level symbolic links.
OPT_FORCE='' # By default, don't overwrite the destination directory.
usage() {
echo "Usage: $0 [--no-doxygen] [--no-javadoc] [--force]"
echo "Specify --no-doxygen to skip generation of the C++ client API docs"
echo "Specify --no-javadoc to skip generation of the Java API docs"
echo "Specify --no-link to skip updating the top level symbolic links"
echo "Specify --force to overwrite the destination directory, if it exists"
exit 1
}
if [ $# -gt 0 ]; then
for arg in $*; do
case $arg in
"--no-doxygen") OPT_DOXYGEN='' ;;
"--no-javadoc") OPT_JAVADOC='' ;;
"--no-link") OPT_LINK='' ;;
"--force") OPT_FORCE=1 ;;
"--help") usage ;;
"-h") usage ;;
*) echo "$0: Unknown command-line option: $arg"; usage ;;
esac
done
fi
if [ -n "$OPT_DOXYGEN" ] && ! which doxygen >/dev/null 2>&1; then
echo "Error: doxygen not found."
usage
fi
set -x
cd "$SOURCE_ROOT"
GIT_REMOTE=$(git config --get remote.origin.url)
if [ -z "$GIT_REMOTE" ]; then
echo "Error: The 'origin' git remote is expected but is not defined"
usage
fi
# Build Kudu thirdparty
$SOURCE_ROOT/build-support/enable_devtoolset.sh $SOURCE_ROOT/thirdparty/build-if-necessary.sh
echo "Successfully built third-party dependencies."
# Build the binaries so we can auto-generate the command-line references
mkdir -p "$BUILD_ROOT"
cd "$BUILD_ROOT"
rm -rf CMakeCache CMakeFiles/
if [ -n "$OPT_DOXYGEN" ]; then
DOXYGEN_FLAGS="-DDOXYGEN_WARN_AS_ERROR=1"
fi
$SOURCE_ROOT/build-support/enable_devtoolset.sh \
$SOURCE_ROOT/thirdparty/installed/common/bin/cmake \
-DNO_TESTS=1 \
-DCMAKE_BUILD_TYPE=$BUILD_TYPE \
$DOXYGEN_FLAGS \
$SOURCE_ROOT
MAKE_TARGETS="kudu kudu-tserver kudu-master"
if [ -n "$OPT_DOXYGEN" ]; then
MAKE_TARGETS="$MAKE_TARGETS doxygen"
fi
make -j$(getconf _NPROCESSORS_ONLN) $MAKE_TARGETS
# Check out the gh-pages repo into $SITE_OUTPUT_DIR
if [ -d "$SITE_OUTPUT_DIR" -a -n "$OPT_FORCE" ]; then
rm -rf "$SITE_OUTPUT_DIR"
fi
git clone -q "$GIT_REMOTE" --reference "$SOURCE_ROOT" -b gh-pages --depth 1 "$SITE_OUTPUT_DIR"
# Make the RELEASE_OUTPUT_DIR in case it doesn't exist.
mkdir -p "$RELEASE_OUTPUT_DIR"
# Build the docs using the styles from the Jekyll site
DOC_SUBDIR="docs"
rm -Rf "$RELEASE_OUTPUT_DIR/$DOC_SUBDIR"
$SOURCE_ROOT/docs/support/scripts/make_docs.sh --build_root $BUILD_ROOT --site "$SITE_OUTPUT_DIR" \
--output_subdir "$RELEASE_SUBDIR/$DOC_SUBDIR"
if [ -f "$RELEASE_OUTPUT_DIR/docs/index.html" ]; then
echo "Successfully built docs."
else
echo "Docs failed to build."
exit 1
fi
if [ -n "$OPT_LINK" ]; then
# Update the top level docs symbolic link.
rm "$SITE_OUTPUT_DIR/$DOC_SUBDIR"
ln -s "$RELEASE_SUBDIR/$DOC_SUBDIR" "$SITE_OUTPUT_DIR/$DOC_SUBDIR"
fi
if [ -n "$OPT_JAVADOC" ]; then
JAVADOC_SUBDIR="apidocs"
cd "$SOURCE_ROOT/java"
./gradlew clean assemble
if ./gradlew clean javadocAggregate | tee /dev/stdout | fgrep -q "Javadoc Warnings"; then
echo "There are Javadoc warnings. Please fix them."
exit 1
fi
if [ -f "$SOURCE_ROOT/java/build/docs/javadoc/index.html" ]; then
echo "Successfully built Javadocs."
else
echo "Javadocs failed to build."
exit 1
fi
rm -Rf "$RELEASE_OUTPUT_DIR/$JAVADOC_SUBDIR"
cp -a "$SOURCE_ROOT/java/build/docs/javadoc/." "$RELEASE_OUTPUT_DIR/$JAVADOC_SUBDIR"
if [ -n "$OPT_LINK" ]; then
# Update the top level javadoc symbolic link.
rm "$SITE_OUTPUT_DIR/$JAVADOC_SUBDIR"
ln -s "$RELEASE_SUBDIR/$JAVADOC_SUBDIR" "$SITE_OUTPUT_DIR/$JAVADOC_SUBDIR"
fi
fi
if [ -n "$OPT_DOXYGEN" ]; then
CPP_CLIENT_API_SUBDIR="cpp-client-api"
rm -Rf "$RELEASE_OUTPUT_DIR/$CPP_CLIENT_API_SUBDIR"
cp -a "$BUILD_ROOT/docs/doxygen/client_api/html" "$RELEASE_OUTPUT_DIR/$CPP_CLIENT_API_SUBDIR"
if [ -n "$OPT_LINK" ]; then
# Update the top level cpp-client-api symbolic link.
rm "$SITE_OUTPUT_DIR/$CPP_CLIENT_API_SUBDIR"
ln -s "$RELEASE_SUBDIR/$CPP_CLIENT_API_SUBDIR" "$SITE_OUTPUT_DIR/$CPP_CLIENT_API_SUBDIR"
fi
fi
# Generate the release index file.
sed "s/@@KUDU_VERSION@@/$VERSION/g" "$SOURCE_ROOT/docs/support/scripts/index_template.md" > \
"$RELEASE_OUTPUT_DIR/index.md"
cd "$SITE_OUTPUT_DIR"
SITE_ARCHIVE="$SITE_OUTPUT_DIR/website_archive.zip"
zip -rq "$SITE_ARCHIVE" "$RELEASE_OUTPUT_DIR"
set +x
echo "Generated web site at $SITE_OUTPUT_DIR"
echo "Release documentation generated at $RELEASE_OUTPUT_DIR"
if [ -n "$OPT_LINK" ]; then
echo "Top level symbolic links were updated"
fi
echo "Docs zip generated at $SITE_ARCHIVE"
echo "To view live site locally, run: (cd $SITE_OUTPUT_DIR && ./site_tool jekyll serve)"