#!/bin/bash # Copyright 2016 The Bazel Authors. All rights reserved. # # Licensed 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. set -eu if test $(1-) == "help" { cat << """ Usage: $0 [port] Builds docs and starts a web server serving docs on localhost:port Default port is 12345. $0 [] Builds docs as static web pages in . Replaces absolute paths in the resulting HTML with , or, if it is not specified, with . """ exit 0 } if [[ "${1-}" == [0-9]* ]] { readonly PORT=$1 readonly TARGET='' } else { readonly PORT=$(1-12345) readonly TARGET=$(1-) } readonly WORKING_DIR=$[mktemp -d] readonly SERVING_PREFIX=$(2-$TARGET) proc check { which $1 > /dev/null || shell {echo "$1 not installed. Please install $1."; exit 1} } proc build_and_serve { bazel build //site:jekyll-tree.tar rm -rf $WORKING_DIR/* tar -xf bazel-genfiles/site/jekyll-tree.tar -C $WORKING_DIR pkill -9 jekyll || true if test -z $TARGET { echo "Serving bazel.build site at port $PORT" jekyll serve --detach --quiet --port $PORT --source $WORKING_DIR } else { setglobal TMP_TARGET = $[mktemp -d] jekyll build --source $WORKING_DIR --destination $TMP_TARGET setglobal REPLACEMENT = $[echo $SERVING_PREFIX | sed s/'\'//'\''\''\'//g] find $TMP_TARGET -name '*.html' | xargs sed -i s/href='\''"''\'//href='"'$REPLACEMENT'\'//g find $TMP_TARGET -name '*.html' | xargs sed -i s/src='\''"''\'//src='"'$REPLACEMENT'\'//g cp -R $TMP_TARGET/* $TARGET echo "Static pages copied to $TARGET" echo "Should be served from $SERVING_PREFIX" } } proc main { check jekyll setglobal old_version = '"Jekyll 0.11.2'" if expr match $[jekyll --version] $old_version { # The ancient version that apt-get has. echo "ERROR: Running with an old version of Jekyll, update " \ "to 2.5.3 with \`sudo gem install jekyll -v 2.5.3\`" exit 1 } build_and_serve echo "Type q to quit, r to rebuild docs and restart jekyll" while true { read -n 1 -s user_input if test $user_input == "q" { echo "Quitting" exit 0 } elif test $user_input == "r" { echo "Rebuilding docs and restarting jekyll" build_and_serve echo "Rebuilt docs and restarted jekyll" } } } proc cleanup { rm -rf $WORKING_DIR pkill -9 jekyll } trap cleanup EXIT main