view contrib/packaging/builddeb @ 51402:2e10ddbb9faa

phases: check secret presence the right way during discovery There is an official function for this, lets use it. This will prevent the code to break in the future while we refactor the phase code.
author Pierre-Yves David <pierre-yves.david@octobus.net>
date Tue, 20 Feb 2024 17:17:54 +0100
parents 4caf88845082
children
line wrap: on
line source

#!/bin/sh -e
#
# Build a Mercurial debian package from the current repo
#
# Tested on Jessie (stable as of original script authoring.)

. $(dirname $0)/packagelib.sh

ROOTDIR=$(cd $(dirname $0)/../.. > /dev/null; pwd)

BUILD=1
CLEANUP=1
DISTID=`(lsb_release -is 2> /dev/null | tr '[:upper:]' '[:lower:]') || echo debian`
CODENAME=`lsb_release -cs 2> /dev/null || echo unknown`
DEBFLAGS=-b

cleanup() {
    if [ "$CLEANUP" ]; then
        rm -r "$ROOTDIR/debian";
    fi
}

while [ "$1" ]; do
    case "$1" in
    --distid )
        shift
        DISTID="$1"
        shift
        ;;
    --codename )
        shift
        CODENAME="$1"
        shift
        ;;
    --cleanup )
        shift
        BUILD=
        ;;
    --build )
        shift
        CLEANUP=
        ;;
    --source-only )
        shift
        DEBFLAGS=-S
        ;;
    * )
        echo "Invalid parameter $1!" 1>&2
        exit 1
        ;;
    esac
done

cd "$ROOTDIR"

trap 'cleanup' EXIT

set -u

if [ ! -d .hg ]; then
    printf "You are inside %s, which is not the root of a Mercurial repository\n" $(pwd) 1>&2
    exit 1
fi

gethgversion
debver="$version"
if [ -n "$type" ] ; then
    debver="$debver~$type"
fi
if [ -n "$distance" ] ; then
    debver="$debver+$distance-$CODENAME-$node"
elif [ "$DEBFLAGS" = "-S" ] ; then
    # for building a ppa (--source-only) for a release (distance == 0), we need
    # to version the distroseries so that we can upload to launchpad
    debver="$debver~${CODENAME}1"
fi

control=debian/control
changelog=debian/changelog

if [ "$BUILD" ]; then
    if [ -d debian ] ; then
        printf "Error! debian control directory already exists at %s/debian\n" $(pwd)
        exit 1
    fi

    cp -r "$ROOTDIR"/contrib/packaging/debian debian

    sed -i.tmp "s/__VERSION__/$debver/" $changelog
    sed -i.tmp "s/__DATE__/$(date --rfc-2822)/" $changelog
    sed -i.tmp "s/__CODENAME__/$CODENAME/" $changelog
    rm $changelog.tmp

    # remove the node from the version string
    SRCFILE="mercurial_$(echo $debver | sed "s,-$node,,").orig.tar.gz"
    "$ROOTDIR/hg" archive $SRCFILE
    mv $SRCFILE ..
    debuild -us -uc -i -I $DEBFLAGS
    if [ $? != 0 ]; then
        echo 'debuild failed!'
        exit 1
    fi

fi
if [ "$CLEANUP" ] ; then
    echo
    OUTPUTDIR=${OUTPUTDIR:=packages/$DISTID-$CODENAME}
    mkdir -p "$OUTPUTDIR"
    find ../mercurial*.deb ../mercurial_*.build* ../mercurial_*.changes \
          ../mercurial*.dsc ../mercurial*.gz \
          -type f -newer $control -print0 2>/dev/null | \
      xargs -Inarf -0 mv narf "$OUTPUTDIR"
    echo "Built packages for $debver:"
    find "$OUTPUTDIR" -type f -newer $control -name '*.deb'
fi