mirror of
https://git.do.srb2.org/KartKrew/Kart-Public.git
synced 2024-11-10 07:12:03 +00:00
166 lines
4.2 KiB
Bash
166 lines
4.2 KiB
Bash
#!/bin/bash
|
|
|
|
# Deployer for Travis-CI
|
|
# Debian package templating
|
|
#
|
|
# Call this script BEFORE running debuild!
|
|
# source ./debian_template.sh [clean] [main/asset]
|
|
#
|
|
# Before running this script,
|
|
# you should also set PACKAGE_NAME_EMAIL="John Doe <jdoe@example.com>" to match
|
|
# the identity of the key you will use to sign the package.
|
|
#
|
|
|
|
# Get script's actual path
|
|
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null && pwd )"
|
|
|
|
# Recursive function for directory crawling
|
|
# $1 = Directory root to crawl
|
|
# $2 = Code to eval on file
|
|
# $3 = Code to eval on directory
|
|
# Exposes $dirtails, $dirlevel, and $dirtailname
|
|
dirlevel=0 # initialize
|
|
dirtails=()
|
|
|
|
# Utility function to make dira/dirb/dirc string
|
|
makedirtailname () {
|
|
dirtailname=""
|
|
for tail in $dirtails; do
|
|
if [[ "$dirtailname" == "" ]]; then
|
|
dirtailname="/$tail";
|
|
else
|
|
dirtailname="$dirtailname/$tail";
|
|
fi;
|
|
done;
|
|
}
|
|
|
|
evaldirectory () {
|
|
if [ -d "$1" ]; then
|
|
# Set contextual variables
|
|
# dirtails is an array of directory basenames after the crawl root
|
|
if (( $dirlevel > 0 )); then
|
|
dirtails+=( "$(basename $1)" );
|
|
else
|
|
dirtails=();
|
|
fi;
|
|
dirlevel=$((dirlevel+1));
|
|
|
|
# Generate directory path after the crawl root
|
|
makedirtailname;
|
|
|
|
# Eval our directory with the latest contextual info
|
|
# Don't eval on root
|
|
if (( $dirlevel > 1 )) && [[ "$3" != "" ]]; then
|
|
eval "$3";
|
|
fi;
|
|
|
|
# Iterate entries
|
|
for name in $1/*; do
|
|
if [ -d "$name" ]; then
|
|
# Name is a directory, but don't eval yet
|
|
# Recurse so our vars are updated
|
|
evaldirectory "$name" "$2" "$3";
|
|
|
|
# Decrement our directory level and remove a dirtail
|
|
unset 'dirtails[ ${#dirtails[@]}-1 ]';
|
|
dirlevel=$((dirlevel-1));
|
|
makedirtailname;
|
|
else
|
|
# Name is a file
|
|
if [ -f "$name" ] && [[ "$2" != "" ]]; then
|
|
eval "$2";
|
|
fi;
|
|
fi;
|
|
done;
|
|
|
|
# Reset our variables; we're done iterating
|
|
if (( $dirlevel == 1 )); then
|
|
dirlevel=0;
|
|
fi;
|
|
fi;
|
|
}
|
|
|
|
#
|
|
# Initialize package parameter defaults
|
|
#
|
|
if [[ "$__DEBIAN_PARAMETERS_INITIALIZED" != "1" ]]; then
|
|
. ${DIR}/deployer/travis/deployer_defaults.sh;
|
|
fi;
|
|
|
|
# Clean up after ourselves; we only expect to run this script once
|
|
# during buildboting
|
|
__DEBIAN_PARAMETERS_INITIALIZED=0
|
|
|
|
# for envsubst
|
|
export __PACKAGE_DATETIME="$(date '+%a, %d %b %Y %H:%M:%S %z')"
|
|
export __PACKAGE_DATETIME_DIGIT="$(date -u '+%Y%m%d%H%M%S')"
|
|
|
|
if [[ "$PACKAGE_REVISION" == "" ]]; then
|
|
PACKAGE_REVISION="-$__PACKAGE_DATETIME_DIGIT";
|
|
__PACKAGE_REVISION_BY_DATE=1;
|
|
export PACKAGE_REVISION=${PACKAGE_REVISION}; # for envsubst
|
|
fi;
|
|
|
|
#
|
|
# Clean the old debian/ directories
|
|
#
|
|
if [[ "$1" == "clean" ]]; then
|
|
toclean=$2;
|
|
else
|
|
toclean=$1;
|
|
fi;
|
|
|
|
if [[ "$toclean" == "" ]] || [[ "$toclean" == "main" ]]; then
|
|
echo "Cleaning main package scripts";
|
|
if [[ ! -f ${DIR}/debian ]]; then
|
|
rm -rf ${DIR}/debian;
|
|
fi;
|
|
fi;
|
|
if [[ "$toclean" == "" ]] || [[ "$toclean" == "asset" ]]; then
|
|
echo "Cleaning asset package scripts";
|
|
if [[ ! -f ${DIR}/assets/debian ]]; then
|
|
rm -rf ${DIR}/assets/debian;
|
|
fi;
|
|
fi;
|
|
|
|
#
|
|
# Make new templates
|
|
#
|
|
if [[ "$1" != "clean" ]]; then
|
|
totemplate=$1;
|
|
|
|
# HACK: ${shlibs:Depends} in the templates make the templating fail
|
|
# So just define replacemment variables
|
|
export SHLIBS_DEPENDS=${SHLIBS_DEPENDS};
|
|
export MISC_DEPENDS=${MISC_DEPENDS};
|
|
export DEBFILEVAR='$$file'; # used in assets/debian/rules
|
|
|
|
# Package parameters are exported for envsubst in deployer_defaults.sh
|
|
|
|
if [[ "$totemplate" == "" ]] || [[ "$totemplate" == "main" ]]; then
|
|
echo "Generating main package scripts";
|
|
fromroot=${DIR}/debian-template;
|
|
toroot=${DIR}/debian;
|
|
mkdir ${toroot};
|
|
|
|
evaldirectory ${fromroot} \
|
|
"cat \$name | envsubst > ${toroot}\${dirtailname}/\$( basename \$name )" \
|
|
"mkdir \"${toroot}\${dirtailname}\"";
|
|
fi;
|
|
|
|
if [[ "$totemplate" == "" ]] || [[ "$totemplate" == "asset" ]]; then
|
|
echo "Generating asset package scripts";
|
|
fromroot=${DIR}/assets/debian-template;
|
|
toroot=${DIR}/assets/debian;
|
|
mkdir ${toroot};
|
|
|
|
# Root dir to crawl; file eval; directory eval
|
|
evaldirectory ${fromroot} \
|
|
"cat \$name | envsubst > ${toroot}\${dirtailname}/\$( basename \$name )" \
|
|
"mkdir \"${toroot}\${dirtailname}\"";
|
|
fi;
|
|
fi;
|
|
|
|
if [[ "$__DPL_ACTIVE" != "1" ]] && [[ "$__PACKAGE_REVISION_BY_DATE" == "1" ]]; then
|
|
unset PACKAGE_REVISION; # so we can reset the date on subsequent runs
|
|
fi;
|