mirror of
https://github.com/YunoHost/vinaigrette.git
synced 2024-09-03 20:06:11 +02:00
158 lines
3.2 KiB
Bash
Executable file
158 lines
3.2 KiB
Bash
Executable file
#!/bin/bash
|
||
|
||
readonly THISSCRIPT=$0
|
||
readonly PROJECT=$1
|
||
readonly BRANCH=$2
|
||
readonly DISTRIB=$3
|
||
readonly VERSION=$4
|
||
readonly TAG=$(echo "debian/$VERSION" | tr '~' '-')
|
||
|
||
source /home/vinaigrette/config/config
|
||
|
||
# ##### #
|
||
# Usage #
|
||
# ##### #
|
||
|
||
function usage()
|
||
{
|
||
cat << EOF
|
||
|
||
Usage:
|
||
$THISSCRIPT <project> <branch> <version>
|
||
|
||
Arguments:
|
||
<project> moulinette, yunohost, yunohost-admin or SSOwat
|
||
<branch> testing or stable
|
||
<distrib> stretch (can only build for stretch, no jessie)
|
||
<version> x.y.z (ex: 2.6.1)
|
||
|
||
EOF
|
||
}
|
||
|
||
# ################# #
|
||
# Check user inputs #
|
||
# ################# #
|
||
|
||
function validate_arguments()
|
||
{
|
||
|
||
## Project
|
||
if [[ ! $PROJECT =~ ^yunohost|yunohost-admin|moulinette|SSOwat$ ]]; then
|
||
echo "Invalid project $PROJECT"
|
||
usage
|
||
exit 1
|
||
fi
|
||
|
||
## Branch
|
||
if [[ ! $BRANCH =~ ^testing|stable|unstable$ ]]; then
|
||
echo "Invalid branch $BRANCH"
|
||
usage
|
||
exit 2
|
||
fi
|
||
|
||
# Distribution
|
||
if [[ ! $DISTRIB =~ ^stretch$ ]]; then
|
||
echo "Invalid distribution $DISTRIB"
|
||
usage
|
||
exit 3
|
||
fi
|
||
|
||
# Version
|
||
if [ -z "$VERSION" ]; then
|
||
echo "Invalid version $VERSION"
|
||
usage
|
||
exit 4
|
||
fi
|
||
}
|
||
|
||
function checkout_tag()
|
||
{
|
||
# Update project's repository
|
||
echo ""
|
||
echo "> Updating $GIT_REPOS/$PROJECT repository ... "
|
||
echo ""
|
||
|
||
cd $GIT_REPOS/$PROJECT
|
||
git fetch --quiet
|
||
git fetch --tags --quiet
|
||
git checkout $DISTRIB-$BRANCH --quiet
|
||
git reset --hard origin/$DISTRIB-$BRANCH --quiet
|
||
|
||
LASTVERSIONCHANGELOG=$(dpkg-parsechangelog -S Version 2>/dev/null)
|
||
|
||
if [[ "$VERSION" != "$LASTVERSIONCHANGELOG" ]]
|
||
then
|
||
echo "Version $VERSION is not the last version in changelog"
|
||
exit
|
||
fi
|
||
|
||
# Check if tag really exists
|
||
if ! git rev-parse "$TAG" >/dev/null 2>&1;
|
||
then
|
||
echo "Invalid version $VERSION (there's no tag $TAG in the git repo !)"
|
||
exit
|
||
fi
|
||
# Get commit for the tag and for HEAD
|
||
TAGCOMMIT=$(git rev-parse "$TAG")
|
||
HEADCOMMIT=$(git rev-parse "HEAD")
|
||
|
||
if [[ "$TAGCOMMIT" != "$HEADCOMMIT" ]]
|
||
then
|
||
echo "Tag $TAG is not the HEAD of the branch :/"
|
||
exit
|
||
fi
|
||
|
||
|
||
}
|
||
|
||
function build()
|
||
{
|
||
# Create temporary folder
|
||
TMP_FOLDER=$(mktemp -d)
|
||
|
||
# Extract git archive a desired tag
|
||
echo ""
|
||
echo "> Exporting in $TMP_FOLDER ... "
|
||
echo ""
|
||
git archive $TAG --format=tar | tar -x -C $TMP_FOLDER
|
||
|
||
# Build Debian package
|
||
echo "###############################"
|
||
echo "# Building Debian package ... #"
|
||
echo "###############################"
|
||
cd $TMP_FOLDER
|
||
$BUILD_DEB $DISTRIB $BRANCH .
|
||
}
|
||
|
||
|
||
function main()
|
||
{
|
||
|
||
# If used asked for help, show usage
|
||
if [[ $1 == "-h" ]] || [[ $1 == "--help" ]]; then
|
||
usage
|
||
exit 0
|
||
fi
|
||
|
||
validate_arguments
|
||
|
||
if [[ "$(tty)" == "not a tty" ]]
|
||
then
|
||
echo "You aint in a tty (are you in a 'lxc exec' ?)"
|
||
echo "The script can't run because pbuilder won't be happy :|"
|
||
exit
|
||
fi
|
||
|
||
# Sum up configuration
|
||
echo "########################################################"
|
||
echo "# Building $PROJECT $BRANCH release - $VERSION version "
|
||
echo "########################################################"
|
||
|
||
checkout_tag
|
||
build
|
||
|
||
}
|
||
|
||
|
||
main
|
||
|