scripts/src/deforaos-release.sh

183 lines
3.4 KiB
Bash
Executable File

#!/bin/sh
#$Id$
#Copyright (c) 2012 Pierre Pronchery <khorben@defora.org>
#This file is part of DeforaOS Devel scripts
#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/>.
#environment
DEBUG=0
DEVNULL="/dev/null"
PROJECTCONF="project.conf"
VERBOSE=0
#executables
CVS="_debug cvs"
MAKE="_debug make"
RM="_debug rm -f"
TAR="_debug tar"
TR="tr"
#functions
#deforaos_release
deforaos_release()
{
version="$1"
PACKAGE=
VERSION=
while read line; do
case "$line" in
"package="*)
PACKAGE="${line#package=}"
;;
"version="*)
VERSION="${line#version=}"
;;
esac
done < "$PROJECTCONF"
if [ -z "$PACKAGE" -o -z "$VERSION" ]; then
_error "Could not determine the package name or version"
return $?
fi
_info "Releasing $PACKAGE $VERSION"
if [ "$version" != "$VERSION" ]; then
_error "The version does not match"
return $?
fi
_info "Obtaining latest version..."
$CVS up -A
if [ $? -ne 0 ]; then
_error "Could not update the sources"
return $?
fi
_info "Checking for differences..."
#XXX this method may be obsoleted in a future version of CVS
$CVS diff
if [ $? -ne 0 ]; then
_error "The sources were modified"
return $?
fi
_info "Creating the archive..."
$MAKE dist
if [ $? -ne 0 ]; then
_error "Could not create the archive"
return $?
fi
#check the archive
_info "Checking the archive..."
archive="$PACKAGE-$VERSION.tar.gz"
$TAR -xzf "$archive"
if [ $? -ne 0 ]; then
$RM -r -- "$PACKAGE-$VERSION"
_error "Could not extract the archive"
return $?
fi
(cd "$PACKAGE-$VERSION" && $MAKE)
res=$?
$RM -r -- "$PACKAGE-$VERSION"
if [ $res -ne 0 ]; then
$RM -- "$archive"
_error "Could not validate the archive"
return $?
fi
#tagging the release
tag=$(echo $version | $TR . -)
tag="${PACKAGE}_$tag"
_info "Tagging the sources as $tag..."
$CVS tag "$tag"
if [ $res -ne 0 ]; then
_error "Could not tag the sources"
return $?
fi
#all tests passed
_info "$archive is ready for release"
_info "The following steps are:"
_info " * upload to https://www.defora.org/os/project"
_info " * post on https://freecode.com/users/khorben"
_info " * publish a news on https://www.defora.org/os/news/submit"
_info " * tweet (possibly via freecode)"
_info " * package where appropriate (see deforaos-package.sh)"
}
#debug
_debug()
{
if [ $DEBUG -eq 1 ]; then
echo "$@"
elif [ $VERBOSE -eq 0 ]; then
"$@" > "$DEVNULL"
else
"$@"
fi
}
#error
_error()
{
echo "deforaos-release.sh: error: $@" 1>&2
return 2
}
#info
_info()
{
echo "deforaos-release.sh: $@"
}
#usage
_usage()
{
echo "Usage: deforaos-release.sh [-Dv] version" 1>&2
echo " -D Run in debugging mode" 1>&2
echo " -v Verbose mode" 1>&2
return 1
}
#main
while getopts "Dv" name; do
case "$name" in
D)
DEBUG=1
;;
v)
VERBOSE=1
;;
?)
_usage
exit $?
;;
esac
done
shift $((OPTIND - 1))
if [ $# -ne 1 ]; then
_usage
exit $?
fi
version="$1"
deforaos_release "$version"