170 lines
3.2 KiB
Bash
Executable File
170 lines
3.2 KiB
Bash
Executable File
#!/bin/sh
|
|
#$Id$
|
|
#Copyright (c) 2012-2016 Pierre Pronchery <khorben@defora.org>
|
|
#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 <http://www.gnu.org/licenses/>.
|
|
|
|
|
|
|
|
#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"
|