#!/bin/sh #$Id$ #Copyright (c) 2012-2016 Pierre Pronchery #This program is free software: you can redistribute it and/or modify #it under the terms of the GNU General Public License as published by #the Free Software Foundation, version 3 of the License. # #This program is distributed in the hope that it will be useful, #but WITHOUT ANY WARRANTY; without even the implied warranty of #MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #GNU General Public License for more details. # #You should have received a copy of the GNU General Public License #along with this program. If not, see . #variables DEBUG= DEVNULL="/dev/null" FORCE=0 PACKAGE= PROGNAME="deploy.sh" VERSION= PREFIX="/usr/local" TMPDIR="/tmp" VERBOSE=0 #executables CP="cp -f" GIT="git" MAKE="make" MKDIR="mkdir -p" MKTEMP="mktemp" RM="rm -f" SCP="scp -q" SSH="ssh" TAR="tar" [ -f "./config.sh" ] && . "./config.sh" #functions _deploy() { DAPORTALDIR="$1" REMOTE="$2" TARX="$TAR -xzpf" [ "$VERBOSE" -ne 0 ] && TARX="$TAR -xzvf" $DEBUG $MAKE dist || return 2 tmpfile=$($SSH "$REMOTE" "$MKTEMP -p $TMPDIR daportal-deploy.XXXXXX") [ $? -eq 0 ] || return 2 $DEBUG $SCP -- "$ARCHIVE" "$REMOTE:$tmpfile" if [ $? -ne 0 ]; then #try to delete the remote temporary file $DEBUG $SSH "$REMOTE" "$RM -- '$tmpfile'" return 2 fi $DEBUG $SSH "$REMOTE" "sh -c \"$MKDIR -- '$DAPORTALDIR' && cd '$DAPORTALDIR' && $TARX '$tmpfile' && $RM -- '$tmpfile' && $CP -R -- '$PACKAGE-$VERSION/AUTHORS' \ '$PACKAGE-$VERSION/BUGS' \ '$PACKAGE-$VERSION/COPYING' \ '$PACKAGE-$VERSION/INSTALL' \ '$PACKAGE-$VERSION/Makefile' \ '$PACKAGE-$VERSION/README.md' \ '$PACKAGE-$VERSION/config.sh' \ '$PACKAGE-$VERSION/data/' \ '$PACKAGE-$VERSION/doc/' \ '$PACKAGE-$VERSION/po/' \ '$PACKAGE-$VERSION/project.conf' \ '$PACKAGE-$VERSION/src/' \ '$PACKAGE-$VERSION/tests/' \ '$PACKAGE-$VERSION/tools/' . && $MAKE && $RM -r -- $PACKAGE-$VERSION\"" || return 2 $DEBUG $RM -- "$ARCHIVE" } #tests _tests() { (cd "tests" && $MAKE distclean all) } #debug _debug() { [ "$VERBOSE" -ne 0 ] && echo "$@" "$@" } #error _error() { echo "$PROGNAME: $@" 1>&2 return 2 } #usage _usage() { echo "Usage: $PROGNAME [-f][-P prefix][-v] hostname" 1>&2 echo " -f Skip running the tests before deploying" 1>&2 echo " -v Verbose mode" 1>&2 return 1 } #main if [ -z "$PACKAGE" -o -z "$VERSION" ]; then _error "PACKAGE and VERSION must be set" exit $? fi ARCHIVE="$PACKAGE-$VERSION.tar.gz" while getopts "fP:v" name; do case "$name" in f) FORCE=1 ;; P) PREFIX="$OPTARG" ;; v) DEBUG="_debug" SCP="scp" VERBOSE=1 ;; ?) _usage exit $? ;; esac done shift $((OPTIND - 1)) if [ $# -ne 1 ]; then _usage exit $? fi DAPORTALDIR="$PREFIX/share/daportal" REMOTE="$1" if [ $FORCE -eq 0 ]; then #check for uncommitted changes if [ -d ".git" ]; then $GIT diff --quiet if [ $? -ne 0 ]; then _error "Could not deploy: Uncommitted changes" return $? fi fi #run the tests locally if [ $VERBOSE -ne 0 ]; then _tests else _tests > "$DEVNULL" fi if [ $? -ne 0 ]; then _error "Could not deploy: Some tests failed" exit $? fi fi _deploy "$DAPORTALDIR" "$REMOTE"