support pre-hook in docs-build.sh
[opnfvdocs.git] / docs / pre-hook.sh
diff --git a/docs/pre-hook.sh b/docs/pre-hook.sh
new file mode 100755 (executable)
index 0000000..cdfc4f6
--- /dev/null
@@ -0,0 +1,112 @@
+#!/bin/bash
+# SPDX-license-identifier: Apache-2.0
+##############################################################################
+# Copyright (c) 2016 NEC and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+##############################################################################
+
+GIT_CLONE_BASE=${GIT_CLONE_BASE:-ssh://gerrit.opnfv.org:29418}
+GERRIT_BRANCH=${GERRIT_BRANCH:-master}
+WORKSPACE=${WORKSPACE:-.}
+
+get_repo_names() {
+    # NOTE: Not all repositories are ready for the composite docs,
+    #       so we have the repo name list here to add project docs
+    #       one by one. This will be replaced by the list in project.cfg .
+    # grep -v '^#' releng/jjb/opnfvdocs/project.cfg | sort
+    echo "apex"
+    echo "bottlenecks"
+    echo "compass4nfv"
+    echo "copper"
+    echo "doctor"
+    echo "fastpathmetrics"
+    echo "fuel"
+    echo "functest"
+    echo "ipv6"
+    echo "joid"
+    echo "ovsnfv"
+    echo "pharos"
+    echo "prediction"
+    echo "promise"
+    echo "sdnvpn"
+    echo "vswitchperf"
+    echo "yardstick"
+}
+
+git_clone() {
+    _repo="$1"
+
+    [[ -d "$WORKSPACE/$_repo" ]] && return 0
+    pushd $WORKSPACE
+    git clone -b $GERRIT_BRANCH --depth 1 --quiet $GIT_CLONE_BASE/$_repo
+    popd
+}
+
+repos=$(get_repo_names)
+
+[[ -e docs/projects ]] && rm -rf docs/projects
+mkdir -p docs/projects
+
+echo
+echo "Cloning repos of participating OPNFV Projects and copying docs"
+echo
+for repo in $repos; do
+    echo "    $repo ($GERRIT_BRANCH)"
+    git_clone $repo
+    [[ -e $WORKSPACE/$repo/docs ]] || continue
+    [[ -e docs/projects/$repo ]] && rm -rf docs/projects/$repo
+    cp -r $WORKSPACE/$repo/docs docs/projects/$repo
+done
+
+# NOTE: Removing index.rst in project repos to reduce number of docs.
+find docs/projects -type f -name 'index.rst' -print | xargs -I i rm -f i
+
+# fix relative file paths
+pattern='.. \(include\|figure\):: *[^ \/]'
+base_path="/$(pwd)/docs_build/_src"
+find docs/projects -type f -name '*.rst' -print | while read f
+do
+    sed -i -e "/$pattern/s|:: *|:: $base_path/$(dirname ${f#docs/})/|" $f
+done
+
+# for debug
+grep -e '.. include::' -e '.. figure::' -r docs/projects
+
+# NOTE: automated link generation is not ready...
+echo
+echo "Creating document links"
+echo
+targets="
+configurationguide/configuration.options.render.rst
+configurationguide/scenario.description.rst
+userguide/feature.userguide.render.rst
+testframework/framework.installation.procedure.render.rst
+testframework/framework.userguide.render.rst
+"
+# configurationguide/post-install.rst
+for guide in $targets
+do
+    mainfile="$WORKSPACE/docs/$guide"
+    basefilename=$(basename ${guide/-/})
+    for repo in $repos
+    do
+        targetfile="$WORKSPACE/docs/projects/$repo/${guide/-/}"
+        targetlink="../projects/$repo/${guide/-/}"
+        projectfilename="${basefilename/.rst/-$repo.rst}"
+        projectfile="$(dirname $mainfile)/$projectfilename"
+        [[ -e "$targetfile" ]] || continue
+        echo "Adding $repo to $guide ..."
+        echo "" >> $mainfile
+        echo ".. toctree::" >> $mainfile
+        echo "" >> $mainfile
+        echo "    $projectfilename" >> $mainfile
+        echo ".. include:: $targetlink" > $projectfile
+    done
+    echo
+    echo "Generated $guide:"
+    cat $mainfile
+    echo
+done