diff options
Diffstat (limited to 'jjb/daily-jjb-doc-multiversion-update/setupdocs.sh')
-rwxr-xr-x | jjb/daily-jjb-doc-multiversion-update/setupdocs.sh | 143 |
1 files changed, 143 insertions, 0 deletions
diff --git a/jjb/daily-jjb-doc-multiversion-update/setupdocs.sh b/jjb/daily-jjb-doc-multiversion-update/setupdocs.sh new file mode 100755 index 00000000..dc276b69 --- /dev/null +++ b/jjb/daily-jjb-doc-multiversion-update/setupdocs.sh @@ -0,0 +1,143 @@ +#!/bin/bash + +DEBUG=1 +PROGNAME=$(basename $BASH_SOURCE) +DESTINATION="." +GITREF="" +DOCTOOLSDIR="doctools" +docswebtemplates="https://github.com/automotive-grade-linux/docs-webtemplate.git" +doctools="https://github.com/automotive-grade-linux/docs-tools.git" + +#default branch +ref_docswebtemplate="" +ref_doctools="master" + +pushd() { + command pushd "$@" &> /dev/null +} +popd() { + command popd "$@" &> /dev/null +} +debug() { + [[ $DEBUG -eq 0 ]] && echo "[DEBUG]: $@" >&2 +} +error() { + echo "$@" >&2 +} + +gitcheckout() { + command git checkout "$@" &> /dev/null + if [ ! $? -eq 0 ]; then + error "Cannot checkout: $@ does not exit" + exit 4 + fi +} + +gitclone() { + command git clone "$@" &> /dev/null + if [ ! $? -eq 0 ]; then + error "Cannot clone $@ " + exit 5 + fi +} + +function usage() { + cat <<EOF >&2 +Usage: $PROGNAME [OPTIONS]... [DIRECTORY] + --debug debug mode + -d, --directory=[DST] directory destination; DST is the destination + -h, --help print this help + -t, --doctools-ref=[REFERENCE] doctools reference; + REFERENCE can be a branch, a tag, a commit + -w, --webtemplate-ref=[REFERENCE] webtemplates reference; + REFERENCE can be a branch, a tag, a commit +EOF + exit 1 +} + + +SHORTOPTS="w:t:d:h" +LONGOPTS="webtemplate-ref:,doctools-ref:,directory:,debug,help" +ARGS=$(getopt -s bash --options $SHORTOPTS \ + --longoptions $LONGOPTS --name $PROGNAME -- "$@" ) +if [ ! $? -eq 0 ]; then + exit 1 +fi +eval set -- "$ARGS" + +while [ "$#" -gt "1" ]; do + case "$1" in + -w|--webtemplate-ref) + ref_docswebtemplate=$2;shift 2;; + -t|--doctools-ref) + ref_doctools=$2; shift 2;; + -d|--directory) + DESTINATION=$2;shift 2;; + --debug) + DEBUG=0;shift 2;; + -h|--help) + usage;; + *) + usage;; + esac +done + +#make sure nodejs and jekyll are installed +node -v && jekyll -v +if [ ! $? -eq 0 ]; then + error "please, make sure nodejs and jekyll are installed" + exit 3 +fi + +#check writable dir +if [ ! -w $DESTINATION ]; then + error "$DESTINATION is not a writable directory" + exit 2 +fi + + +pushd $DESTINATION + +#get reference +[[ -d .git ]] && [[ "$(realpath $BASH_SOURCE)" == "$(realpath $(basename $BASH_SOURCE))" ]] && GITREF=$(git rev-parse HEAD) +ref_docswebtemplate=${ref_docswebtemplate:-${GITREF:-master}} +debug "ref_docswebtemplate=$ref_docswebtemplate ref_doctools=$ref_doctools" + +[[ -d .git ]] && rev=$(git show-ref -s $ref_docswebtemplate | sort | uniq) && rev=${rev:-$ref_docswebtemplate} + +debug "GITREF=$GITREF and rev=$rev" +#check that reference given matching with local repo +[[ "$GITREF" != "$rev" ]] \ + && { error "Invalid reference between $ref_docswebtemplate and local repo in $DESTINATION"; exit 5; } +#processing cloning or update +if [ -z $GITREF ]; then + echo "Cloning docwebtemplates and doctools in $DESTINATION" + gitclone $docswebtemplates . + gitcheckout $ref_docswebtemplate + gitclone $doctools $DOCTOOLSDIR + pushd $DOCTOOLSDIR + gitcheckout $ref_doctools + npm install + popd + echo "docwebtemplates and doctools cloned in $DESTINATION" +else + echo "you are in docs-webtemplate: process $DOCTOOLSDIR" + echo "so no process will be done in docs-webtemplate" + if [ -d $DOCTOOLSDIR ]; then + echo "$DOCTOOLSDIR already exits: process update with reference=$ref_doctools" + pushd $DOCTOOLSDIR + gitcheckout $branch_doctools + git pull $doctools $branch_doctools &> /dev/null + npm install + popd + else + echo "cloning $DOCTOOLSDIR" + gitclone $doctools $DOCTOOLSDIR + pushd $DOCTOOLSDIR + gitcheckout $ref_doctools + npm install + popd + fi + echo "doctools updated" +fi +popd |