system-config/modules/jenkins/files/slave_scripts/run-docs.sh
James E. Blair 50e1f72c6f Use "sort -V" for tags when building docs
The docs script changes its behavior when running on the "latest
release tag" -- it prepares to publish the docs at the primary
location, rather than in a subdirectory.  It used "sort -n", or
a numeric sort, of all tags to determine whether the current tag
was the latest.  This would fail to sort "0.11.0" after "0.9.0".

This changes the script to use a version number sort which
recognizes that difference.

As for comptability with other version number formats: it is
compatible with year.date formats (though the script ignores those
for client libraries).  And versions with letters in them (ie,
pre-release versions) are already filtered out (a pre-release can
never be the latest released tag).

Change-Id: I6bba9bbc97b8c8e635d1b88835129113485baf21
2013-08-26 10:09:35 -07:00

91 lines
3.4 KiB
Bash
Executable File

#!/bin/bash -xe
# If a bundle file is present, call tox with the jenkins version of
# the test environment so it is used. Otherwise, use the normal
# (non-bundle) test environment. Also, run pip freeze on the
# resulting environment at the end so that we have a record of exactly
# what packages we ended up testing.
#
org=$1
project=$2
if [[ -z "$org" || -z "$project" ]]
then
echo "Usage: $0 ORG PROJECT"
echo
echo "ORG: The project organization (eg 'openstack')"
echo "PROJECT: The project name (eg 'nova')"
exit 1
fi
source /usr/local/jenkins/slave_scripts/select-mirror.sh $org $project
venv=venv
mkdir -p doc/build
export HUDSON_PUBLISH_DOCS=1
tox -e$venv -- python setup.py build_sphinx
result=$?
if [ -z "$ZUUL_REFNAME" ] || [ "$ZUUL_REFNAME" == "master" ] ; then
: # Leave the docs where they are.
elif `echo $ZUUL_REFNAME | grep refs/tags/ >/dev/null` ; then
# Put tagged releases in proper location. All tagged builds get copied to
# BUILD_DIR/tagname. If this is the latest tagged release the copy of files
# at BUILD_DIR remains. When Jenkins copies this file the root developer
# docs are always the latest release with older tags available under the
# root in the tagname dir.
TAG=`echo $ZUUL_REFNAME | sed 's/refs.tags.//'`
if [ ! -z $TAG ] ; then
if echo $ZUUL_PROJECT | grep 'python-.*client' ; then
# This is a hack to ignore the year.release tags in python-*client
# projects.
LATEST=`git tag | sed -n -e '/^2012\..*$/d' -e '/^\([0-9]\+\.\?\)\+$/p' | sort -V | tail -1`
else
# Take all tags of the form (number.)+, sort them, then take the
# largest
LATEST=`git tag | sed -n '/^\([0-9]\+\.\?\)\+$/p' | sort -V | tail -1`
fi
if [ "$TAG" = "$LATEST" ] ; then
# Copy the docs into a subdir if this is a tagged build
mkdir doc/build/$TAG
cp -R doc/build/html/* doc/build/$TAG
mv doc/build/$TAG doc/build/html/$TAG
else
# Move the docs into a subdir if this is a tagged build
mkdir doc/build/$TAG
mv doc/build/html/* doc/build/$TAG
mv doc/build/$TAG doc/build/html/$TAG
fi
fi
elif `echo $ZUUL_REFNAME | grep stable/ >/dev/null` ; then
# Put stable release changes in dir named after stable release under the
# build dir. When Jenkins copies these files they will be accessible under
# the developer docs root using the stable release's name.
BRANCH=`echo $ZUUL_REFNAME | sed 's/stable.//'`
if [ ! -z $BRANCH ] ; then
# Move the docs into a subdir if this is a stable branch build
mkdir doc/build/$BRANCH
mv doc/build/html/* doc/build/$BRANCH
mv doc/build/$BRANCH doc/build/html/$BRANCH
fi
else
# Put other branch changes in dir named after branch under the
# build dir. When Jenkins copies these files they will be
# accessible under the developer docs root using the branch name.
# EG: feature/foo or milestone-proposed
BRANCH=$ZUUL_REFNAME
mkdir doc/build/tmp
mv doc/build/html/* doc/build/tmp
mkdir -p doc/build/html/$BRANCH
mv doc/build/tmp/* doc/build/html/$BRANCH
fi
echo "Begin pip freeze output from test virtualenv:"
echo "======================================================================"
.tox/$venv/bin/pip freeze
echo "======================================================================"
exit $result