vinaigrette/ynh-build

98 lines
2.6 KiB
Bash
Executable file
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/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
source /home/vinaigrette/scripts/common.sh
# ##### #
# 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 =~ ^yunohost|yunohost-admin|moulinette|SSOwat$ ]] || critical "Invalid project $PROJECT"
[[ $BRANCH =~ ^testing|stable|unstable$ ]] || critical "Invalid branch $BRANCH"
[[ $DISTRIB =~ ^stretch$ ]]; || critical "Invalid distribution $DISTRIB"
[[ ! -z "$VERSION" ]] || critical "Invalid version $VERSION"
[[ "$(tty)" != "not a tty" ]] || critical "You aint in a tty (are you in a 'lxc exec' ?) The script can't run because pbuilder won't be happy :|"
}
function checkout_tag()
{
# Update project's repository
boxed "> Updating $GIT_REPOS/$PROJECT repository ... "
cd $GIT_REPOS/$PROJECT
git fetch --quiet
git fetch --tags --quiet
git checkout $DISTRIB-$BRANCH --quiet
git reset --hard origin/$DISTRIB-$BRANCH --quiet
# Validate constrains for the version number given (is in changelog + has corresponding tag)
LASTVERSIONCHANGELOG=$(dpkg-parsechangelog -S Version 2>/dev/null)
[[ "$VERSION" == "$LASTVERSIONCHANGELOG" ]] || critical "Version $VERSION is not the last version in changelog"
git rev-parse "$TAG" >/dev/null 2>&1 || critical "Invalid version $VERSION (there's no tag $TAG in the git repo !)"
# Get commit for the tag and for HEAD
TAGCOMMIT=$(git rev-parse "$TAG")
HEADCOMMIT=$(git rev-parse "HEAD")
[[ "$TAGCOMMIT" == "$HEADCOMMIT" ]] || critical "Tag $TAG is not the HEAD of the branch :/"
}
function build()
{
# Create temporary folder
TMP_FOLDER=$(mktemp -d)
# Extract git archive a desired tag
info "Exporting in $TMP_FOLDER ... "
git archive $TAG --format=tar | tar -x -C $TMP_FOLDER
# Build Debian package
boxed "Building Debian package ... "
cd $TMP_FOLDER
$BUILD_DEB $DISTRIB $BRANCH .
}
function main()
{
validate_arguments
boxed "Building $PROJECT $BRANCH release - $VERSION version"
checkout_tag
build
}
[[ "$1" =~ ^-h|--help$ ]] && (usage; exit 0) || main