Deploying documentation to proper folder

What we're missing ATM is different documentation versions for different application versions. What this change does is that it's: - finding out what is the current branch (e.g. 1.0.x) - finding out out what is the name of the main adoc file (e.g. spring-cloud-sleuth) - pulling the changes from gh-pages after checkout - finding out what is the list of comma separated whitelisted branches (via the `docs.whitelisted.branches` prop) - in gh-pages creating a folder with name of the branch (e.g. /1.0.x) copying all the docs/target/generated-docs/ to that folder - if the branch from which we're calling the script is NOT master then we're changing the ${main.adoc}.html to index.html so that it's easier to access the docs (e.g. http://cloud.spring.io/spring-cloud-sleuth/1.0.x/)
parent 674e45f4
...@@ -14,6 +14,7 @@ ...@@ -14,6 +14,7 @@
<properties> <properties>
<docs.main>spring-cloud-netflix</docs.main> <docs.main>spring-cloud-netflix</docs.main>
<main.basedir>${basedir}/..</main.basedir> <main.basedir>${basedir}/..</main.basedir>
<docs.whitelisted.branches>1.0.x,1.1.x</docs.whitelisted.branches>
</properties> </properties>
<build> <build>
<plugins> <plugins>
......
...@@ -12,12 +12,46 @@ if ! [ -d docs/target/generated-docs ]; then ...@@ -12,12 +12,46 @@ if ! [ -d docs/target/generated-docs ]; then
exit 0 exit 0
fi fi
# Find name of current branch # The script should be executed from the root folder
ROOT_FOLDER=`pwd`
echo "Current folder is ${ROOT_FOLDER}"
if [[ ! -e "${ROOT_FOLDER}/.git" ]]; then
echo "You're not in the root folder of the project!"
exit 1
fi
# Retrieve properties
################################################################### ###################################################################
branch=$TRAVIS_BRANCH
[ "$branch" == "" ] && branch=`git rev-parse --abbrev-ref HEAD` # Prop that will let commit the changes
target=. COMMIT_CHANGES="no"
if [ "$branch" != "master" ]; then target=./$branch; mkdir -p $target; fi
# Get the name of the `docs.main` property
MAIN_ADOC_VALUE=$(mvn -q \
-Dexec.executable="echo" \
-Dexec.args='${docs.main}' \
--non-recursive \
org.codehaus.mojo:exec-maven-plugin:1.3.1:exec)
echo "Extracted 'main.adoc' from Maven build [${MAIN_ADOC_VALUE}]"
# Get whitelisted branches - assumes that a `docs` module is available under `docs` profile
WHITELIST_PROPERTY="docs.whitelisted.branches"
WHITELISTED_BRANCHES_VALUE=$(mvn -q \
-Dexec.executable="echo" \
-Dexec.args="\${${WHITELIST_PROPERTY}}" \
org.codehaus.mojo:exec-maven-plugin:1.3.1:exec \
-P docs \
-pl docs)
echo "Extracted '${WHITELIST_PROPERTY}' from Maven build [${WHITELISTED_BRANCHES_VALUE}]"
# Code getting the name of the current branch. For master we want to publish as we did until now
# http://stackoverflow.com/questions/1593051/how-to-programmatically-determine-the-current-checked-out-git-branch
CURRENT_BRANCH=$(git symbolic-ref -q HEAD)
CURRENT_BRANCH=${CURRENT_BRANCH##refs/heads/}
CURRENT_BRANCH=${CURRENT_BRANCH:-HEAD}
echo "Current branch is [${CURRENT_BRANCH}]"
# Stash any outstanding changes # Stash any outstanding changes
################################################################### ###################################################################
...@@ -25,30 +59,65 @@ git diff-index --quiet HEAD ...@@ -25,30 +59,65 @@ git diff-index --quiet HEAD
dirty=$? dirty=$?
if [ "$dirty" != "0" ]; then git stash; fi if [ "$dirty" != "0" ]; then git stash; fi
# Switch to gh-pages branch to sync it with current branch # Switch to gh-pages branch to sync it with master
################################################################### ###################################################################
git checkout gh-pages git checkout gh-pages
git pull origin gh-pages
for f in docs/target/generated-docs/*; do # Add git branches
###################################################################
mkdir -p ${ROOT_FOLDER}/${CURRENT_BRANCH}
if [[ "${CURRENT_BRANCH}" == "master" ]] ; then
echo -e "Current branch is master - will copy the current docs only to the root folder"
for f in docs/target/generated-docs/*; do
file=${f#docs/target/generated-docs/*} file=${f#docs/target/generated-docs/*}
if ! git ls-files -i -o --exclude-standard --directory | grep -q ^$file$; then if ! git ls-files -i -o --exclude-standard --directory | grep -q ^$file$; then
# Not ignored... # Not ignored...
cp -rf $f $target cp -rf $f ${ROOT_FOLDER}/
git add -A $target/$file git add -A ${ROOT_FOLDER}/$file
fi fi
done done
COMMIT_CHANGES="yes"
else
echo -e "Current branch is [${CURRENT_BRANCH}]"
# http://stackoverflow.com/questions/29300806/a-bash-script-to-check-if-a-string-is-present-in-a-comma-separated-list-of-strin
if [[ ",${WHITELISTED_BRANCHES_VALUE}," = *",${CURRENT_BRANCH},"* ]] ; then
echo -e "Branch [${CURRENT_BRANCH}] is whitelisted! Will copy the current docs to the [${CURRENT_BRANCH}] folder"
for f in docs/target/generated-docs/*; do
file=${f#docs/target/generated-docs/*}
if ! git ls-files -i -o --exclude-standard --directory | grep -q ^$file$; then
# Not ignored...
# We want users to access 1.0.0.RELEASE/ instead of 1.0.0.RELEASE/spring-cloud.sleuth.html
if [[ "${file}" == "${MAIN_ADOC_VALUE}.html" ]] ; then
# We don't want to copy the spring-cloud-sleuth.html
# we want it to be converted to index.html
cp -rf $f ${ROOT_FOLDER}/${CURRENT_BRANCH}/index.html
git add -A ${ROOT_FOLDER}/${CURRENT_BRANCH}/index.html
else
cp -rf $f ${ROOT_FOLDER}/${CURRENT_BRANCH}
git add -A ${ROOT_FOLDER}/${CURRENT_BRANCH}/$file
fi
fi
done
COMMIT_CHANGES="yes"
else
echo -e "Branch [${CURRENT_BRANCH}] is not on the white list! Check out the Maven [${WHITELIST_PROPERTY}] property in
[docs] module available under [docs] profile. Won't commit any changes to gh-pages for this branch."
fi
fi
git add -A README.adoc || echo "No change to README.adoc" if [[ "${COMMIT_CHANGES}" == "yes" ]] ; then
git commit -a -m "Sync docs from $branch to gh-pages" || echo "Nothing committed" git commit -a -m "Sync docs from ${CURRENT_BRANCH} to gh-pages"
# Uncomment the following push if you want to auto push to # Uncomment the following push if you want to auto push to
# the gh-pages branch whenever you commit to branch locally. # the gh-pages branch whenever you commit to master locally.
# This is a little extreme. Use with care! # This is a little extreme. Use with care!
################################################################### ###################################################################
git push origin gh-pages || echo "Cannot push gh-pages" git push origin gh-pages
fi
# Finally, switch back to the current branch and exit block # Finally, switch back to the master branch and exit block
git checkout $branch git checkout ${CURRENT_BRANCH}
if [ "$dirty" != "0" ]; then git stash pop; fi if [ "$dirty" != "0" ]; then git stash pop; fi
exit 0 exit 0
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment