| #!/usr/bin/env bash |
| # |
| # this generates the site in _site |
| # override --url /myMountPoint (as an argument to this script) if you don't like the default set in /_config.yml |
| |
| export JAVADOC_SUBPATH=misc/javadoc |
| export JAVADOC_BUILD_TARGET_SUBPATH=javadoc |
| |
| if [ ! -x _build/build.sh ] ; then |
| echo ERROR: script must be run in root of docs dir |
| exit 1 |
| fi |
| |
| function help() { |
| echo "" |
| echo "This will build the documentation in _site/." |
| echo "" |
| echo "Usage: _build/build.sh MODE [ARGS]" |
| echo "" |
| echo "where MODE can be any of:" |
| echo "* test-both : to build the website to root and guide to /v/latest/ (for testing)" |
| echo "* website-root : to build the website only, in the root" |
| echo "* guide-latest : to build the guide only, in /v/latest/" |
| # BROOKLYN_VERSION_BELOW |
| echo "* guide-version : to build the guide only, in the versioned namespace /v/0.11.0/" |
| echo "* test-guide-root : to build the guide only, in the root (for testing)" |
| echo "* test-both-sub : to build the website to /sub/ and guide to /sub/v/latest/ (for testing)" |
| echo "* original : to build the files in their original location (website it /website and guide in /guide/, for testing)" |
| echo "" |
| echo "and supported ARGS are:" |
| echo "* --skip-javadoc : to skip javadoc build" |
| echo "* --quick-javadoc : to do a quick javadoc build (for testing)" |
| echo "* --serve : serve files from _site after building (for testing)" |
| echo "* --install : install files from _site to the appropriate place in "'$'"BROOKLYN_SITE_DIR (or ../../brooklyn-site-public)" |
| echo "* --skip-htmlproof : skip the HTML Proof run on _site" |
| echo "* --quick-htmlproof : do a fast HTML Proof run on _site (not checking external links)" |
| echo "* --skip-pdf : skip generation of all PDF Documentation" |
| echo "* --skip-pdf-manual : skip generation of the PDF Manual" |
| echo "* --skip-pdf-started : skip generation of the Getting Started PDF" |
| echo "" |
| } |
| |
| function parse_mode() { |
| case $1 in |
| help) |
| help |
| exit 0 ;; |
| website-root) |
| JEKYLL_CONFIG=_config.yml,_build/config-production.yml,_build/config-exclude-guide.yml,_build/config-website-root.yml |
| STYLE_SUBDIR=style |
| DIRS_TO_MOVE[0]=website |
| DIRS_TO_MOVE_TARGET[0]="" |
| SKIP_JAVADOC=true |
| INSTALL_RSYNC_OPTIONS="--exclude v" |
| INSTALL_RSYNC_SUBDIR="" |
| SUMMARY="website files in the root" |
| HTMLPROOF_OPTS=--ignore-v-refs |
| ;; |
| guide-latest) |
| JEKYLL_CONFIG=_config.yml,_build/config-production.yml,_build/config-exclude-all-but-guide.yml,_build/config-guide-latest.yml,_build/config-style-latest.yml |
| DIRS_TO_MOVE[0]=guide |
| DIRS_TO_MOVE_TARGET[0]=v/latest |
| DIRS_TO_MOVE[1]=style |
| STYLE_SUBDIR=${DIRS_TO_MOVE_TARGET[0]}/style |
| DIRS_TO_MOVE_TARGET[1]=$STYLE_SUBDIR |
| INSTALL_RSYNC_OPTIONS="" |
| INSTALL_RSYNC_SUBDIR=${DIRS_TO_MOVE_TARGET[0]}/ |
| JAVADOC_TARGET=${DIRS_TO_MOVE_TARGET[0]}/$JAVADOC_SUBPATH/ |
| SUMMARY="user guide files in /${DIRS_TO_MOVE_TARGET[0]}" |
| HTMLPROOF_OPTS=--v-only |
| ;; |
| guide-version) |
| JEKYLL_CONFIG=_config.yml,_build/config-production.yml,_build/config-exclude-all-but-guide.yml,_build/config-guide-version.yml |
| # Mac bash defaults to v3 not v4, so can't use assoc arrays :( |
| DIRS_TO_MOVE[0]=guide |
| # BROOKLYN_VERSION_BELOW |
| DIRS_TO_MOVE_TARGET[0]=v/0.11.0 |
| DIRS_TO_MOVE[1]=style |
| STYLE_SUBDIR=${DIRS_TO_MOVE_TARGET[0]}/style |
| DIRS_TO_MOVE_TARGET[1]=$STYLE_SUBDIR |
| INSTALL_RSYNC_OPTIONS="" |
| INSTALL_RSYNC_SUBDIR=${DIRS_TO_MOVE_TARGET[0]}/ |
| JAVADOC_TARGET=${DIRS_TO_MOVE_TARGET[0]}/$JAVADOC_SUBPATH/ |
| SUMMARY="user guide files in /${DIRS_TO_MOVE_TARGET[0]}" |
| HTMLPROOF_OPTS=--v-only |
| ;; |
| test-guide-root) |
| JEKYLL_CONFIG=_config.yml,_build/config-production.yml,_build/config-exclude-all-but-guide.yml,_build/config-guide-root.yml |
| DIRS_TO_MOVE[0]=guide |
| DIRS_TO_MOVE_TARGET[0]="" |
| STYLE_SUBDIR=style |
| JAVADOC_TARGET=$JAVADOC_SUBPATH/ |
| SUMMARY="user guide files in the root" |
| ;; |
| test-both) |
| JEKYLL_CONFIG=_config.yml,_build/config-production.yml,_build/config-exclude-root-index.yml,_build/config-website-root.yml,_build/config-guide-latest.yml |
| DIRS_TO_MOVE[0]=guide |
| DIRS_TO_MOVE_TARGET[0]=v/latest |
| DIRS_TO_MOVE[1]=website |
| DIRS_TO_MOVE_TARGET[1]="" |
| STYLE_SUBDIR=style |
| JAVADOC_TARGET=${DIRS_TO_MOVE_TARGET[0]}/$JAVADOC_SUBPATH/ |
| SUMMARY="all files, website in root and guide in /${DIRS_TO_MOVE_TARGET[0]}" |
| HTMLPROOF_OPTS=--ignore-v-refs |
| ;; |
| test-both-sub) |
| JEKYLL_CONFIG=_config.yml,_build/config-production.yml,_build/config-exclude-root-index.yml,_build/config-subpath-brooklyn.yml |
| DIRS_TO_MOVE[0]=guide |
| DIRS_TO_MOVE_TARGET[0]=brooklyn/v/latest |
| DIRS_TO_MOVE[1]=website |
| DIRS_TO_MOVE_TARGET[1]=brooklyn |
| DIRS_TO_MOVE[2]=style |
| STYLE_SUBDIR=${DIRS_TO_MOVE_TARGET[1]}/style |
| DIRS_TO_MOVE_TARGET[2]=$STYLE_SUBDIR |
| JAVADOC_TARGET=${DIRS_TO_MOVE_TARGET[0]}/$JAVADOC_SUBPATH/ |
| SUMMARY="all files in /brooklyn" |
| HTMLPROOF_OPTS=--ignore-v-refs |
| ;; |
| original) |
| JEKYLL_CONFIG=_config.yml,_build/config-production.yml |
| STYLE_SUBDIR=style |
| SUMMARY="all files in their original place" |
| HTMLPROOF_OPTS=--ignore-v-refs |
| ;; |
| "") |
| echo "ERROR: mode is required; try 'help'" |
| exit 1 ;; |
| *) |
| echo "ERROR: invalid mode '$1'; try 'help'" |
| exit 1 ;; |
| esac |
| SUMMARY="$SUMMARY of `pwd`/_site" |
| } |
| |
| function parse_arguments() { |
| while (( "$#" )); do |
| case $1 in |
| "--skip-javadoc") |
| SKIP_JAVADOC=true |
| shift |
| ;; |
| "--quick-javadoc") |
| QUICK_JAVADOC=true |
| shift |
| ;; |
| "--serve") |
| SERVE_AFTERWARDS=true |
| shift |
| ;; |
| "--install") |
| INSTALL_AFTERWARDS=true |
| shift |
| ;; |
| "--skip-htmlproof") |
| SKIP_HTMLPROOF=true |
| shift |
| ;; |
| "--quick-htmlproof") |
| QUICK_HTMLPROOF=true |
| shift |
| ;; |
| "--skip-pdf") |
| SKIP_PDF=true |
| shift |
| ;; |
| "--skip-pdf-manual") |
| SKIP_PDF_MANUAL=true |
| shift |
| ;; |
| "--skip-pdf-started") |
| SKIP_PDF_STARTED=true |
| shift |
| ;; |
| *) |
| echo "ERROR: invalid argument '"$1"'" |
| exit 1 |
| ;; |
| esac |
| done |
| } |
| |
| # Runs htmlproof against _site |
| function build_pdf() { |
| if [ "$SKIP_PDF" == "true" ]; then |
| return |
| fi |
| echo "Running PDF Generation on _site/UserManual.html" |
| rm -rf _pdf |
| mkdir -p _pdf |
| PDF_MANUAL_LOG="_pdf/pdf_gen_manual.log" |
| PDF_STARTED_LOG="_pdf/pdf_gen_started.log" |
| |
| if [ "$SKIP_PDF_MANUAL" != "true" ]; then |
| _build/build-pdf.sh "_site/zoneMergeManual.html" "_pdf/UserManual.pdf" 2>&1 | tee $PDF_MANUAL_LOG |
| _build/build-pdf.sh "_site/zoneMergeManual.html" "_pdf/UserManual_printable.pdf" "./style/css/printable.css" 2>&1 | tee $PDF_MANUAL_LOG |
| fi |
| if [ "$SKIP_PDF_STARTED" != "true" ]; then |
| _build/build-pdf.sh "_site/zoneMergeStarted.html" "_pdf/GettingStarted.pdf" 2>&1 | tee $PDF_STARTED_LOG |
| _build/build-pdf.sh "_site/zoneMergeStarted.html" "_pdf/GettingStarted_printable.pdf" "./style/css/printable.css" 2>&1 | tee $PDF_STARTED_LOG |
| fi |
| } |
| |
| # Runs htmlproof against _site |
| function test_site() { |
| if [ "$SKIP_HTMLPROOF" == "true" ]; then |
| return |
| fi |
| echo "Running htmlproof on _site" |
| mkdir -p _build/target |
| HTMLPROOF_LOG="_build/target/htmlproof.log" |
| if [ "$QUICK_HTMLPROOF" == "true" ]; then |
| HTMLPROOF_OPTS="$HTMLPROOF_OPTS --disable_external" |
| fi |
| _build/htmlproof-brooklyn.sh $HTMLPROOF_OPTS 2>&1 | tee $HTMLPROOF_LOG |
| } |
| |
| function make_jekyll() { |
| BROOKLYN_BIN=../brooklyn-dist/dist/target/brooklyn-dist/brooklyn/bin/brooklyn |
| if [ -f $BROOKLYN_BIN ]; then |
| ITEMS_JS=style/js/catalog/items.js |
| echo "Generating catalog items in $ITEMS_JS" |
| echo -n "var items = " > "$ITEMS_JS" |
| JAVA_OPTS='-Dlogback.configurationFile=_build/list-objects-logback.xml' $BROOKLYN_BIN \ |
| list-objects >> "$ITEMS_JS" |
| echo ";" >> "$ITEMS_JS" |
| echo "Generating catalog items completed" |
| else |
| echo "Could not find brooklyn to generate items.js" |
| if [ "$INSTALL_AFTERWARDS" == "true" ]; then |
| echo "ERROR: aborting if can't make items.js for install build" |
| exit 1 |
| fi |
| fi |
| |
| echo JEKYLL running with: jekyll build $JEKYLL_CONFIG |
| jekyll build --config $JEKYLL_CONFIG || return 1 |
| echo JEKYLL completed |
| |
| for DI in "${!DIRS_TO_MOVE[@]}"; do |
| D=${DIRS_TO_MOVE[$DI]} |
| DT=${DIRS_TO_MOVE_TARGET[$DI]} |
| echo moving _site/$D/ to _site/$DT |
| mkdir -p _site/$DT |
| # the generated files are already in _site/ due to url rewrites along the way, but images etc are not |
| cp -r _site/$D/* _site/$DT |
| rm -rf _site/$D |
| done |
| # normally we exclude things but we can also set TARGET as long_grass and it will get destroyed |
| rm -rf _site/long_grass |
| } |
| |
| function make_javadoc() { |
| if [ "$SKIP_JAVADOC" == "true" ]; then |
| return |
| fi |
| pushd _build > /dev/null |
| rm -rf target/$JAVADOC_BUILD_TARGET_SUBPATH |
| if [ "$QUICK_JAVADOC" == "true" ]; then |
| ./quick-make-few-javadoc.sh || { echo ERROR: failed javadoc build ; exit 1 ; } |
| else |
| ./make-javadoc.sh || { echo ERROR: failed javadoc build ; exit 1 ; } |
| fi |
| popd > /dev/null |
| if [ ! -z "$JAVADOC_TARGET" ]; then |
| if [ ! -d "_site/$JAVADOC_TARGET" ]; then |
| echo "ERROR: javadoc target directory _site/$JAVADOC_TARGET gone; is there a jekyll already watching?" |
| return 1 |
| fi |
| mv _build/target/$JAVADOC_BUILD_TARGET_SUBPATH/* _site/$JAVADOC_TARGET |
| cat _site/${STYLE_SUBDIR}/css/javadoc.css >> _site/$JAVADOC_TARGET/stylesheet.css || return 1 |
| cp _site/${STYLE_SUBDIR}/img/feather.png _site/$JAVADOC_TARGET/ || return 1 |
| fi |
| } |
| |
| function make_install() { |
| if [ "$INSTALL_AFTERWARDS" != "true" ]; then |
| return |
| fi |
| if [ -d _site/website ]; then |
| echo "ERROR: _site/website dir exists, not installing as files may be corrupted; is there a jekyll already watching?" |
| return 1 |
| fi |
| if [ -d _site/guide ]; then |
| echo "ERROR: _site/guide dir exists, not installing as files may be corrupted; is there a jekyll already watching?" |
| return 1 |
| fi |
| if [ ! -z ${QUICK_JAVADOC+SET} ]; then echo "ERROR: --install not permitted when doing quick javadoc" ; return 1 ; fi |
| |
| SITE_DIR=${BROOKLYN_SITE_DIR-../../brooklyn-site-public} |
| ls $SITE_DIR/style/img/apache-brooklyn-logo-244px-wide.png > /dev/null || { echo "ERROR: cannot find brooklyn-site-public; set BROOKLYN_SITE_DIR" ; return 1 ; } |
| if [ -z ${INSTALL_RSYNC_OPTIONS+SET} ]; then echo "ERROR: --install not supported for this build" ; return 1 ; fi |
| if [ -z ${INSTALL_RSYNC_SUBDIR+SET} ]; then echo "ERROR: --install not supported for this build" ; return 1 ; fi |
| |
| RSYNC_COMMAND_BASE="rsync -rvi --delete --exclude .svn" |
| |
| if [ ! -z ${JAVADOC_TARGET+SET} ]; then |
| if [ ! -z ${SKIP_JAVADOC+SET} ]; then |
| echo 'grep "Generated by javadoc" '$SITE_DIR/$INSTALL_RSYNC_SUBDIR/$JAVADOC_SUBPATH/index.html |
| export JAVADOC_LAST_DATE=`grep "Generated by javadoc" $SITE_DIR/$INSTALL_RSYNC_SUBDIR/$JAVADOC_SUBPATH/index.html` |
| if [ -z "$JAVADOC_LAST_DATE" ]; then |
| echo "ERROR: installing with skipped javadoc, but no previous javadoc exists" |
| return 1 |
| fi |
| echo "Installing with skipped javadoc, reusing old: $JAVADOC_LAST_DATE" |
| RSYNC_COMMAND_BASE="$RSYNC_COMMAND_BASE --exclude $JAVADOC_SUBPATH" |
| fi |
| fi |
| |
| RSYNC_COMMAND="$RSYNC_COMMAND_BASE $INSTALL_RSYNC_OPTIONS ./_site/$INSTALL_RSYNC_SUBDIR $SITE_DIR/$INSTALL_RSYNC_SUBDIR" |
| echo INSTALLING to local site svn repo with: $RSYNC_COMMAND |
| $RSYNC_COMMAND | tee _build/target/rsync.log || return 1 |
| |
| echo RSYNC changed files: |
| grep -v f\\.\\.T\\.\\.\\.\\.\\.\\.\\. _build/target/rsync.log || echo "(none)" |
| echo |
| |
| if [ ! -z "$HTMLPROOF_LOG" ]; then |
| echo HTMLPROOF log: |
| cat $HTMLPROOF_LOG |
| echo |
| fi |
| |
| SUMMARY="$SUMMARY, installed to $SITE_DIR" |
| } |
| |
| |
| rm -rf _site |
| |
| parse_mode $@ |
| shift |
| parse_arguments $@ |
| |
| # prep |
| if [ ! -f style/js/zeroclipboard/ZeroClipboard.swf ] ; then |
| echo downloading ZeroClipboard.swf |
| curl -L -o style/js/zeroclipboard/ZeroClipboard.swf http://cdnjs.cloudflare.com/ajax/libs/zeroclipboard/1.3.5/ZeroClipboard.swf |
| fi |
| |
| make_jekyll || { echo ERROR: failed jekyll docs build in `pwd` ; exit 1 ; } |
| |
| make_javadoc || { echo ERROR: failed javadoc build ; exit 1 ; } |
| |
| build_pdf |
| |
| test_site |
| |
| # TODO build catalog |
| |
| # TODO install |
| |
| if [ "$INSTALL_AFTERWARDS" == "true" ]; then |
| make_install || { echo ERROR: failed to install ; exit 1 ; } |
| fi |
| |
| echo FINISHED: $SUMMARY |
| |
| if [ "$SERVE_AFTERWARDS" == "true" ]; then |
| _build/serve-site.sh |
| fi |