Dean Troyer | 9b97367 | 2013-10-16 15:13:56 -0500 | [diff] [blame] | 1 | #!/usr/bin/env bash |
| 2 | |
| 3 | # **build_docs.sh** - Build the gh-pages docs for DevStack |
| 4 | # |
Dean Troyer | 54b9732 | 2014-06-20 17:53:55 -0500 | [diff] [blame] | 5 | # - Install shocco if not found on PATH and INSTALL_SHOCCO is set |
Dean Troyer | 9b97367 | 2013-10-16 15:13:56 -0500 | [diff] [blame] | 6 | # - Clone MASTER_REPO branch MASTER_BRANCH |
Dean Troyer | 54b9732 | 2014-06-20 17:53:55 -0500 | [diff] [blame] | 7 | # - Re-creates ``docs/html`` directory from existing repo + new generated script docs |
Dean Troyer | 9b97367 | 2013-10-16 15:13:56 -0500 | [diff] [blame] | 8 | |
| 9 | # Usage: |
Dean Troyer | 54b9732 | 2014-06-20 17:53:55 -0500 | [diff] [blame] | 10 | ## build_docs.sh [-o <out-dir>] [-g] [master|<repo> [<branch>]] |
| 11 | ## <repo> The DevStack repository to clone (default is DevStack github repo) |
Dean Troyer | 9b97367 | 2013-10-16 15:13:56 -0500 | [diff] [blame] | 12 | ## If a repo is not supplied use the current directory |
| 13 | ## (assumed to be a DevStack checkout) as the source. |
Dean Troyer | 54b9732 | 2014-06-20 17:53:55 -0500 | [diff] [blame] | 14 | ## <branch> The DevStack branch to check out (default is master; ignored if |
| 15 | ## repo is not specified) |
Dean Troyer | 9b97367 | 2013-10-16 15:13:56 -0500 | [diff] [blame] | 16 | ## . Use the current repo and branch (do not use with -p to |
| 17 | ## prevent stray files in the workspace being added tot he docs) |
Dean Troyer | 54b9732 | 2014-06-20 17:53:55 -0500 | [diff] [blame] | 18 | ## -o <out-dir> Write the static HTML output to <out-dir> |
| 19 | ## (Note that <out-dir> will be deleted and re-created to ensure it is clean) |
| 20 | ## -g Update the old gh-pages repo (set PUSH=1 to actualy push up to RCB) |
Dean Troyer | 9b97367 | 2013-10-16 15:13:56 -0500 | [diff] [blame] | 21 | |
| 22 | # Defaults |
| 23 | # -------- |
| 24 | |
| 25 | # Source repo/branch for DevStack |
Sphoorti Joglekar | ce365ce | 2014-04-01 19:47:40 +0530 | [diff] [blame] | 26 | MASTER_REPO=${MASTER_REPO:-git://git.openstack.org/openstack-dev/devstack} |
Dean Troyer | 9b97367 | 2013-10-16 15:13:56 -0500 | [diff] [blame] | 27 | MASTER_BRANCH=${MASTER_BRANCH:-master} |
| 28 | |
| 29 | # http://devstack.org is a GitHub gh-pages site in the https://github.com/cloudbuilders/devtack.git repo |
| 30 | GH_PAGES_REPO=git@github.com:cloudbuilders/devstack.git |
| 31 | |
Dean Troyer | 54b9732 | 2014-06-20 17:53:55 -0500 | [diff] [blame] | 32 | DOCS_SOURCE=docs/source |
| 33 | HTML_BUILD=docs/html |
| 34 | |
Dean Troyer | c04ddbe | 2013-11-06 02:15:11 -0600 | [diff] [blame] | 35 | # Keep track of the devstack directory |
| 36 | TOP_DIR=$(cd $(dirname "$0")/.. && pwd) |
| 37 | |
Dean Troyer | 9b97367 | 2013-10-16 15:13:56 -0500 | [diff] [blame] | 38 | # Uses this shocco branch: https://github.com/dtroyer/shocco/tree/rst_support |
| 39 | SHOCCO=${SHOCCO:-shocco} |
| 40 | if ! which shocco; then |
Dean Troyer | c04ddbe | 2013-11-06 02:15:11 -0600 | [diff] [blame] | 41 | if [[ ! -x $TOP_DIR/shocco/shocco ]]; then |
Dean Troyer | 9b97367 | 2013-10-16 15:13:56 -0500 | [diff] [blame] | 42 | if [[ -z "$INSTALL_SHOCCO" ]]; then |
| 43 | echo "shocco not found in \$PATH, please set environment variable SHOCCO" |
| 44 | exit 1 |
| 45 | fi |
| 46 | echo "Installing local copy of shocco" |
Dean Troyer | c04ddbe | 2013-11-06 02:15:11 -0600 | [diff] [blame] | 47 | if ! which pygmentize; then |
| 48 | sudo pip install Pygments |
| 49 | fi |
| 50 | if ! which rst2html.py; then |
| 51 | sudo pip install docutils |
| 52 | fi |
Dean Troyer | 9b97367 | 2013-10-16 15:13:56 -0500 | [diff] [blame] | 53 | git clone -b rst_support https://github.com/dtroyer/shocco shocco |
| 54 | cd shocco |
| 55 | ./configure |
Dean Troyer | 54b9732 | 2014-06-20 17:53:55 -0500 | [diff] [blame] | 56 | make || exit |
Dean Troyer | 9b97367 | 2013-10-16 15:13:56 -0500 | [diff] [blame] | 57 | cd .. |
| 58 | fi |
Dean Troyer | c04ddbe | 2013-11-06 02:15:11 -0600 | [diff] [blame] | 59 | SHOCCO=$TOP_DIR/shocco/shocco |
Dean Troyer | 9b97367 | 2013-10-16 15:13:56 -0500 | [diff] [blame] | 60 | fi |
| 61 | |
| 62 | # Process command-line args |
Dean Troyer | 54b9732 | 2014-06-20 17:53:55 -0500 | [diff] [blame] | 63 | while getopts go: c; do |
Dean Troyer | 9b97367 | 2013-10-16 15:13:56 -0500 | [diff] [blame] | 64 | case $c in |
Dean Troyer | 54b9732 | 2014-06-20 17:53:55 -0500 | [diff] [blame] | 65 | g) GH_UPDATE=1 |
Dean Troyer | 9b97367 | 2013-10-16 15:13:56 -0500 | [diff] [blame] | 66 | ;; |
Dean Troyer | 54b9732 | 2014-06-20 17:53:55 -0500 | [diff] [blame] | 67 | o) HTML_BUILD=$OPTARG |
Dean Troyer | 9b97367 | 2013-10-16 15:13:56 -0500 | [diff] [blame] | 68 | ;; |
| 69 | esac |
| 70 | done |
| 71 | shift `expr $OPTIND - 1` |
| 72 | |
Dean Troyer | 54b9732 | 2014-06-20 17:53:55 -0500 | [diff] [blame] | 73 | |
| 74 | if [[ -n "$1" ]]; then |
| 75 | master="master" |
| 76 | if [[ "${master/#$1}" != "master" ]]; then |
| 77 | # Partial match on "master" |
Dean Troyer | 9b97367 | 2013-10-16 15:13:56 -0500 | [diff] [blame] | 78 | REPO=$MASTER_REPO |
| 79 | else |
| 80 | REPO=$1 |
| 81 | fi |
Dean Troyer | 54b9732 | 2014-06-20 17:53:55 -0500 | [diff] [blame] | 82 | REPO_BRANCH=${2:-$MASTER_BRANCH} |
Dean Troyer | 9b97367 | 2013-10-16 15:13:56 -0500 | [diff] [blame] | 83 | fi |
| 84 | |
| 85 | # Check out a specific DevStack branch |
| 86 | if [[ -n $REPO ]]; then |
| 87 | # Make a workspace |
Dean Troyer | 54b9732 | 2014-06-20 17:53:55 -0500 | [diff] [blame] | 88 | TMP_ROOT=$(mktemp -d work-docs-XXXX) |
Dean Troyer | 9b97367 | 2013-10-16 15:13:56 -0500 | [diff] [blame] | 89 | echo "Building docs in $TMP_ROOT" |
| 90 | cd $TMP_ROOT |
| 91 | |
| 92 | # Get the master branch |
| 93 | git clone $REPO devstack |
| 94 | cd devstack |
Dean Troyer | 54b9732 | 2014-06-20 17:53:55 -0500 | [diff] [blame] | 95 | if [[ -n "$REPO_BRANCH" ]]; then |
| 96 | git checkout $REPO_BRANCH |
| 97 | fi |
Dean Troyer | 9b97367 | 2013-10-16 15:13:56 -0500 | [diff] [blame] | 98 | fi |
| 99 | |
Dean Troyer | 54b9732 | 2014-06-20 17:53:55 -0500 | [diff] [blame] | 100 | # Assumption is we are now in the DevStack workspace to be processed |
| 101 | |
Dean Troyer | 9b97367 | 2013-10-16 15:13:56 -0500 | [diff] [blame] | 102 | # Processing |
| 103 | # ---------- |
| 104 | |
Dean Troyer | 54b9732 | 2014-06-20 17:53:55 -0500 | [diff] [blame] | 105 | # Clean up build dir |
| 106 | rm -rf $HTML_BUILD |
| 107 | mkdir -p $HTML_BUILD |
Dean Troyer | 9b97367 | 2013-10-16 15:13:56 -0500 | [diff] [blame] | 108 | |
Dean Troyer | 54b9732 | 2014-06-20 17:53:55 -0500 | [diff] [blame] | 109 | # Get fully qualified dirs |
| 110 | FQ_DOCS_SOURCE=$(cd $DOCS_SOURCE && pwd) |
| 111 | FQ_HTML_BUILD=$(cd $HTML_BUILD && pwd) |
| 112 | |
| 113 | # Get repo static |
| 114 | cp -pr $FQ_DOCS_SOURCE/* $FQ_HTML_BUILD |
Dean Troyer | 9b97367 | 2013-10-16 15:13:56 -0500 | [diff] [blame] | 115 | |
| 116 | # Build list of scripts to process |
| 117 | FILES="" |
| 118 | for f in $(find . -name .git -prune -o \( -type f -name \*.sh -not -path \*shocco/\* -print \)); do |
| 119 | echo $f |
| 120 | FILES+="$f " |
Dean Troyer | 54b9732 | 2014-06-20 17:53:55 -0500 | [diff] [blame] | 121 | mkdir -p $FQ_HTML_BUILD/`dirname $f`; |
| 122 | $SHOCCO $f > $FQ_HTML_BUILD/$f.html |
Dean Troyer | 9b97367 | 2013-10-16 15:13:56 -0500 | [diff] [blame] | 123 | done |
Dean Troyer | 54b9732 | 2014-06-20 17:53:55 -0500 | [diff] [blame] | 124 | for f in $(find functions functions-common lib samples -type f -name \*); do |
Dean Troyer | 9b97367 | 2013-10-16 15:13:56 -0500 | [diff] [blame] | 125 | echo $f |
| 126 | FILES+="$f " |
Dean Troyer | 54b9732 | 2014-06-20 17:53:55 -0500 | [diff] [blame] | 127 | mkdir -p $FQ_HTML_BUILD/`dirname $f`; |
| 128 | $SHOCCO $f > $FQ_HTML_BUILD/$f.html |
Dean Troyer | 9b97367 | 2013-10-16 15:13:56 -0500 | [diff] [blame] | 129 | done |
Dean Troyer | 54b9732 | 2014-06-20 17:53:55 -0500 | [diff] [blame] | 130 | echo "$FILES" >docs/files |
Dean Troyer | 9b97367 | 2013-10-16 15:13:56 -0500 | [diff] [blame] | 131 | |
Dean Troyer | 54b9732 | 2014-06-20 17:53:55 -0500 | [diff] [blame] | 132 | if [[ -n $GH_UPDATE ]]; then |
| 133 | GH_ROOT=$(mktemp -d work-gh-XXXX) |
| 134 | cd $GH_ROOT |
Dean Troyer | 9b97367 | 2013-10-16 15:13:56 -0500 | [diff] [blame] | 135 | |
Dean Troyer | 54b9732 | 2014-06-20 17:53:55 -0500 | [diff] [blame] | 136 | # Pull the latest docs branch from devstack.org repo |
| 137 | git clone -b gh-pages $GH_PAGES_REPO gh-docs |
Dean Troyer | 9b97367 | 2013-10-16 15:13:56 -0500 | [diff] [blame] | 138 | |
Dean Troyer | 54b9732 | 2014-06-20 17:53:55 -0500 | [diff] [blame] | 139 | # Get the generated files |
| 140 | cp -pr $FQ_HTML_BUILD/* gh-docs |
| 141 | |
| 142 | # Collect the new generated pages |
| 143 | (cd gh-docs; find . -name \*.html -print0 | xargs -0 git add) |
| 144 | |
| 145 | # Push our changes back up to the docs branch |
| 146 | if ! git diff-index HEAD --quiet; then |
| 147 | git commit -a -m "Update script docs" |
| 148 | if [[ -n $PUSH ]]; then |
| 149 | git push |
| 150 | fi |
Dean Troyer | 9b97367 | 2013-10-16 15:13:56 -0500 | [diff] [blame] | 151 | fi |
| 152 | fi |
| 153 | |
| 154 | # Clean up or report the temp workspace |
| 155 | if [[ -n REPO && -n $PUSH_REPO ]]; then |
Dean Troyer | 54b9732 | 2014-06-20 17:53:55 -0500 | [diff] [blame] | 156 | echo rm -rf $TMP_ROOT |
Dean Troyer | 9b97367 | 2013-10-16 15:13:56 -0500 | [diff] [blame] | 157 | else |
| 158 | if [[ -z "$TMP_ROOT" ]]; then |
| 159 | TMP_ROOT="$(pwd)" |
| 160 | fi |
Dean Troyer | 54b9732 | 2014-06-20 17:53:55 -0500 | [diff] [blame] | 161 | echo "Built docs in $HTML_BUILD" |
Dean Troyer | 9b97367 | 2013-10-16 15:13:56 -0500 | [diff] [blame] | 162 | fi |