180 lines
5.7 KiB
Bash
180 lines
5.7 KiB
Bash
|
#!/bin/bash
|
||
|
# vim: shiftwidth=4 tabstop=4 expandtab
|
||
|
|
||
|
INSTALL_BUILD_DEPS=0
|
||
|
INSTALL_BUILD_DEPS_ONLY=0
|
||
|
PURGE_SOURCE_DIRECTORY=0
|
||
|
|
||
|
function usage() {
|
||
|
[ $# -gt 0 ] && echo -e "$*\n" > /dev/stderr
|
||
|
cat << EOF
|
||
|
Usage: $0 [-h|I|-O|-P|-x]
|
||
|
-h|--help Show this message
|
||
|
-I|--install-build-deps Install build dependencies before building package
|
||
|
-O|--install-build-deps-only Only install build dependencies
|
||
|
-P|--purge-sources-directory Purge debian package sources directory after building package
|
||
|
-x|--trace Enable bash tracing (set -x)
|
||
|
EOF
|
||
|
[ $# -gt 0 ] && exit 1
|
||
|
}
|
||
|
|
||
|
idx=1
|
||
|
while [ $idx -le $# ]; do
|
||
|
OPT=${!idx}
|
||
|
case $OPT in
|
||
|
-h|--help)
|
||
|
usage
|
||
|
;;
|
||
|
-I|--install-build-deps)
|
||
|
INSTALL_BUILD_DEPS=1
|
||
|
;;
|
||
|
-O|--install-build-deps-only)
|
||
|
INSTALL_BUILD_DEPS=1
|
||
|
INSTALL_BUILD_DEPS_ONLY=1
|
||
|
;;
|
||
|
-P|--purge-sources-directory)
|
||
|
PURGE_SOURCE_DIRECTORY=1
|
||
|
;;
|
||
|
-x|--trace)
|
||
|
set -x
|
||
|
;;
|
||
|
*)
|
||
|
usage "Unknown parameter '$OPT'"
|
||
|
esac
|
||
|
(( idx+=1 ))
|
||
|
done
|
||
|
|
||
|
# Enter source directory
|
||
|
cd "$( dirname "$0" )"
|
||
|
|
||
|
# Install build dependencies
|
||
|
if [ $INSTALL_BUILD_DEPS -eq 1 ]; then
|
||
|
apt-get update
|
||
|
apt-get install --no-install-recommends --yes devscripts equivs sed rsync git lsb-release \
|
||
|
wget ca-certificates bash-completion
|
||
|
fi
|
||
|
|
||
|
DEBIAN_RELEASE=$( lsb_release -r -s | sed 's/\..*$//' )
|
||
|
|
||
|
# Install build dependencies based on Debian release
|
||
|
if [ $INSTALL_BUILD_DEPS -eq 1 ]; then
|
||
|
# On Debian Stretch, install GitPython using pip because strect version of python3-git have bugs
|
||
|
if [ "$DEBIAN_RELEASE" -eq 9 ]; then
|
||
|
apt-get install --no-install-recommends --yes python3-pip
|
||
|
python3 -m pip install GitPython
|
||
|
else
|
||
|
apt-get install --no-install-recommends --yes python3-git
|
||
|
fi
|
||
|
fi
|
||
|
|
||
|
# Install GPG key (if provided)
|
||
|
if [ -n "$GPG_KEY" ]; then
|
||
|
[ $INSTALL_BUILD_DEPS -eq 1 ] && apt-get install --no-install-recommends --yes gnupg2
|
||
|
[ $INSTALL_BUILD_DEPS_ONLY -eq 0 ] && echo "$GPG_KEY" | base64 -d | gpg --import
|
||
|
fi
|
||
|
|
||
|
# Stop here on install build deps only mode
|
||
|
[ $INSTALL_BUILD_DEPS_ONLY -eq 1 ] && exit 0
|
||
|
|
||
|
# Retrieve source package name
|
||
|
SOURCE_PACKAGE_NAME=$( grep -E ^Source: debian/control | sed 's/^Source: //' )
|
||
|
|
||
|
# Generate EE debian codename
|
||
|
DEBIAN_CODENAME=$( lsb_release -c -s )
|
||
|
[ "$DEBIAN_RELEASE" -ge 9 ] && DEBIAN_CODENAME="${DEBIAN_CODENAME}-ee"
|
||
|
|
||
|
# Clean previous build
|
||
|
rm -fr dist
|
||
|
|
||
|
# Compute version using git describe
|
||
|
# Note : If no tag exist, git describe will fail: in this case, compute a 0.0 version with same
|
||
|
# format as git describe
|
||
|
VERSION="$( git describe --tags 2> /dev/null )" || \
|
||
|
VERSION="0.0-$( git log --oneline | wc -l )-$( git describe --tags --always )"
|
||
|
|
||
|
# Fix version format to match with Python specs
|
||
|
# See: https://peps.python.org/pep-0440/
|
||
|
# shellcheck disable=SC2001
|
||
|
VERSION=$( sed 's/[^0-9]*\([0-9][^-]*\)-\(.*\)/\1+\2/' <<< "$VERSION" )
|
||
|
|
||
|
# Compute debian package version by adding EE debian version suffix
|
||
|
DEB_VERSION_SUFFIX="~ee${DEBIAN_RELEASE}0+1"
|
||
|
DEB_VERSION="${VERSION}${DEB_VERSION_SUFFIX}"
|
||
|
|
||
|
# Create dist directory
|
||
|
mkdir dist
|
||
|
DIST_DIR=dist/$SOURCE_PACKAGE_NAME-$DEB_VERSION
|
||
|
rsync -av \
|
||
|
--exclude 'dist' \
|
||
|
--exclude '.*' \
|
||
|
--exclude 'build.sh' \
|
||
|
--exclude 'setup.cfg' \
|
||
|
./ "$DIST_DIR/"
|
||
|
|
||
|
# Set version in package files
|
||
|
mapfile -t FILES < <( awk '{print $1}' < "debian/install" )
|
||
|
[[ "${#FILES[@]}" -eq 0 ]] && echo "No file found in debian/install file!" && exit 1
|
||
|
for FILE in "${FILES[@]}"; do
|
||
|
case "$( mimetype -b "$FILE" )" in
|
||
|
application/x-perl)
|
||
|
echo " - in $FILE (perl)"
|
||
|
sed -i "s/^my \$version *=.*$/my \$version = '$VERSION';/" "$DIST_DIR/$( basename "$FILE" )"
|
||
|
;;
|
||
|
application/x-shellscript)
|
||
|
echo " - in $FILE (shellscript)"
|
||
|
sed -i "s/^VERSION *=.*$/VERSION = '$VERSION'/" "$DIST_DIR/$( basename "$FILE" )"
|
||
|
;;
|
||
|
esac
|
||
|
done
|
||
|
|
||
|
# Check gitdch is installed
|
||
|
GITDCH=$(which gitdch)
|
||
|
set -e
|
||
|
if [ -z "$GITDCH" ]; then
|
||
|
TMP_GITDCH=$(mktemp -d)
|
||
|
echo "Temporary install gitdch in $TMP_GITDCH"
|
||
|
wget -O "$TMP_GITDCH"/gitdch https://gitea.zionetrix.net/bn8/gitdch/raw/master/gitdch
|
||
|
chmod +x "$TMP_GITDCH"/gitdch
|
||
|
GITDCH=$TMP_GITDCH/gitdch
|
||
|
else
|
||
|
TMP_GITDCH=""
|
||
|
fi
|
||
|
|
||
|
# Compute gitdch extra args
|
||
|
GITDCH_EXTRA_ARGS=()
|
||
|
[ -n "$DEBFULLNAME" ] && GITDCH_EXTRA_ARGS+=( "--maintainer-name" "$DEBFULLNAME" )
|
||
|
[ -n "$DEBEMAIL" ] && GITDCH_EXTRA_ARGS+=( "--maintainer-email" "$DEBEMAIL" )
|
||
|
|
||
|
if [ -e debian/changelog ]; then
|
||
|
LAST_MANUAL_COMMIT_ID=$( git log --oneline -n1 -- debian/changelog | awk '{print $1}' )
|
||
|
GITDCH_EXTRA_ARGS+=( "--append" "--revision" "${LAST_MANUAL_COMMIT_ID}..HEAD" )
|
||
|
fi
|
||
|
|
||
|
# Generate debian changelog using generate_debian_changelog.py
|
||
|
$GITDCH \
|
||
|
--package-name "$SOURCE_PACKAGE_NAME" \
|
||
|
--version "${DEB_VERSION}" \
|
||
|
--version-suffix "${DEB_VERSION_SUFFIX}" \
|
||
|
--code-name "$DEBIAN_CODENAME" \
|
||
|
--output "$DIST_DIR"/debian/changelog \
|
||
|
--release-notes dist/release-notes.md \
|
||
|
--clean-tags-regex '\-ee[0-9]{2,3}$' \
|
||
|
--exclude "^CI: " \
|
||
|
--exclude "\.gitlab-ci(\.yml)?" \
|
||
|
--exclude "build(\.sh)?" \
|
||
|
--exclude "README(\.md)?" \
|
||
|
--exclude "^Merge branch " \
|
||
|
--verbose "${GITDCH_EXTRA_ARGS[@]}"
|
||
|
|
||
|
# Clean temporary gitdch installation
|
||
|
[ -n "$TMP_GITDCH" ] && rm -fr "$TMP_GITDCH"
|
||
|
|
||
|
# Build debian package
|
||
|
BUILD_ARGS=""
|
||
|
[ -z "$GPG_KEY" ] && BUILD_ARGS="--no-sign" || echo "GPG key provide, enable package signing."
|
||
|
cd "$DIST_DIR"/
|
||
|
if dpkg-buildpackage $BUILD_ARGS; then
|
||
|
# Handle PURGE_SOURCE_DIRECTORY option
|
||
|
[[ $PURGE_SOURCE_DIRECTORY -eq 0 ]] || rm -fr "../../$DIST_DIR"
|
||
|
fi
|