Files
cgrates/debian/build.sh
2024-02-27 16:27:07 +01:00

272 lines
6.8 KiB
Bash
Executable File

#!/bin/bash
################################################################################
# Dependencies
PACKAGES=(
git
distro-info
dpkg-dev
devscripts
pbuilder
cowbuilder
debhelper
dh-golang
)
MISSING=()
for PKG in "${PACKAGES[@]}"; do
INSTALLED="$(dpkg-query -W --showformat='${Status}' "${PKG}" | grep -c " ok installed")"
if [ "${INSTALLED}" != "1" ]; then
MISSING+=("${PKG}")
fi
done
if [ "${#MISSING[@]}" != "0" ]; then
echo "Error: Not all dependencies are installed: ${MISSING[*]}"
exit 1
fi
################################################################################
# Variables
DEFAULT_DISTRIBUTION="bookworm"
if [ -z "${DISTRIBUTION}" ]; then
DISTRIBUTION="${DEFAULT_DISTRIBUTION}"
fi
DEFAULT_RELEASE_VERSION="$(distro-info -r --series "${DISTRIBUTION}" 2> /dev/null)"
if [ -z "${RELEASE_VERSION}" ]; then
RELEASE_VERSION="${DEFAULT_RELEASE_VERSION}"
fi
DEFAULT_CHROOT="/var/cache/pbuilder/base-${DISTRIBUTION}+go.cow"
if [ -z "${CHROOT}" ]; then
CHROOT="${DEFAULT_CHROOT}"
fi
DEFAULT_NOCHROOT="0"
if [ -z "${NOCHROOT}" ]; then
NOCHROOT="${DEFAULT_NOCHROOT}"
fi
DEFAULT_DEBUG="0"
if [ -z "${DEBUG}" ]; then
DEBUG="${DEFAULT_DEBUG}"
fi
################################################################################
# Commandline options
OPTS=$(getopt -o D:R:C:Ndh --long distribution:release-version:,chroot:,nochroot,debug,help -n "$(basename "$0")" -- "$@")
RC=$?
if [ "${RC}" != 0 ]; then
echo "Error: Failed to parse options."
exit 1
fi
eval set -- "${OPTS}"
while true; do
case "$1" in
-D|--distribution)
shift
DISTRIBUTION="$1"
shift
;;
-R|--release-version)
shift
RELEASE_VERSION="$1"
shift
;;
-C|--chroot)
shift
CHROOT="$1"
shift
;;
-N|--nochroot)
shift
DEBUG=1
;;
-d|--debug)
shift
DEBUG=1
;;
-h|--help)
shift
echo "Usage: $(basename "$0") [OPTIONS]"
echo
echo "Options:"
echo "-D, --distribution <NAME> Distribution to use in changelog"
echo " Default: ${DEFAULT_DISTRIBUTION}"
echo "-R, --release-version <NUMBER> Version to use in ~deb<N>u1 suffix"
echo " Default: ${DEFAULT_RELEASE_VERSION}"
echo " Set to 0 to not append the suffix"
echo "-C, --chroot <PATH> Path to cowbuilder chroot"
echo " Default: ${DEFAULT_CHROOT}"
echo "-N, --nochroot Don't use chroot for package build"
echo "-d, --debug Enable debug output"
echo "-h, --help Display this usage information"
echo
echo "Environment variables:"
echo "DISTRIBUTION Distribution to use in changelog"
echo "RELEASE_VERSION Version to use in ~deb<N>u1 suffix"
echo " Set to 0 to not append the suffix"
echo "CHROOT Path to cowbuilder chroot"
echo "NOCHROOT Don't use chroot for package build"
echo "DEBUG Enable debug output"
echo " Set to 1 to enable debug output"
exit 1
;;
--)
shift
break
;;
*)
shift
break
;;
esac
done
################################################################################
# Main
if [ "${DEBUG}" = "1" ]; then
set -x
fi
#
# Create .orig.tar.gz
#
DEBIAN_DIR="$(dirname "$0")"
SOURCE_DIR="$(dirname "${DEBIAN_DIR}")"
cd "${SOURCE_DIR}" || exit 1
PACKAGE="$(dpkg-parsechangelog -S Source)"
VERSION="$(grep -E "(^|\s+)Version\s*=\s*\"(\S+)\"\s*" utils/consts.go | awk -F'"' '{print $2}' | sed 's/^v//g')"
PATTERN="^[0-9]+.[0-9]+(.[0-9]+)?(~[a-z0-9]+)?$"
if [[ ${VERSION} =~ ${PATTERN} ]]; then
true
else
echo "Error: Failed to extract version"
exit 1
fi
GIT_COMMIT="HEAD"
GIT_TAG_LOG="$(git tag -l --points-at "${GIT_COMMIT}")"
COMMIT_DATE="$(git log -n1 --format=format:%cd --date="format:%Y%m%d%H%M%S" "${GIT_COMMIT}")"
COMMIT_HASH="$(git log -n1 --format=format:%h "${GIT_COMMIT}")"
if [ -n "${GIT_TAG_LOG}" ]; then
PACKAGE_VERSION="${VERSION}"
else
PACKAGE_VERSION="${VERSION}+${COMMIT_DATE}+${COMMIT_HASH}"
fi
ORIG_TARBALL="../${PACKAGE}_${PACKAGE_VERSION}.orig.tar.gz"
if [ ! -e "${ORIG_TARBALL}" ]; then
echo "Creating ${ORIG_TARBALL} from ${GIT_COMMIT}"
git archive -o "${ORIG_TARBALL}" --format tar.gz --prefix "${PACKAGE}-${VERSION}/" "${GIT_COMMIT}"
fi
#
# Create .orig.tar-dependencies.gz
#
DEPENDENCIES_TARBALL="../${PACKAGE}_${PACKAGE_VERSION}.orig-dependencies.tar.gz"
if [ ! -e "${DEPENDENCIES_TARBALL}" ]; then
./debian/create-components.sh "${ORIG_TARBALL}"
fi
#
# Unpack .orig.tar-dependencies.gz
#
if [ ! -e "${DEPENDENCIES_TARBALL}" ]; then
echo "Error: No dependencies tarball"
exit 1
fi
DEPENDENCIES_PATH="dependencies"
if [ ! -e "${DEPENDENCIES_PATH}" ]; then
echo "Unpacking dependencies"
tar xaf "${DEPENDENCIES_TARBALL}"
fi
#
# Update changelog
#
CHANGELOG_VERSION="$(dpkg-parsechangelog -S Version)"
PACKAGE_REVISION="${PACKAGE_VERSION}-1"
if [[ ${RELEASE_VERSION} =~ ^[0-9]+$ ]] && [ "${RELEASE_VERSION}" != "0" ]; then
PACKAGE_REVISION="${PACKAGE_REVISION}~deb${RELEASE_VERSION}u1"
fi
if [ "${CHANGELOG_VERSION}" != "${PACKAGE_REVISION}" ]; then
echo "Updating changelog"
dch -v "${PACKAGE_REVISION}" \
-m "Package build for git commit ${COMMIT_HASH} (${COMMIT_DATE})." \
-D "${DISTRIBUTION}" --force-distribution
fi
#
# Build package
#
if [ -n "${GIT_TAG_LOG}" ]; then
GIT_COMMIT_DATE=""
GIT_COMMIT_HASH=""
else
GIT_COMMIT_DATE="$(git log -n1 --format=format:%cI "${GIT_COMMIT}")"
GIT_COMMIT_HASH="$(git log -n1 --format=format:%H "${GIT_COMMIT}")"
fi
export GIT_COMMIT_DATE
export GIT_COMMIT_HASH
echo "Building package"
if [ "${NOCHROOT}" = "0" ]; then
pdebuild --pbuilder cowbuilder -- --basepath "${CHROOT}"
else
MAINTAINER_EMAIL="$(dpkg-parsechangelog -S Maintainer | awk -F'<' '{print $2}' | sed 's/>$//')"
KEY_COUNT="$(gpg --list-secret-keys "${MAINTAINER_EMAIL}" 2> /dev/null | grep -c "^sec")"
if [ "${KEY_COUNT}" = "0" ]; then
NO_SIGN="--no-sign"
else
NO_SIGN=""
fi
dpkg-buildpackage -rfakeroot -tc "${NO_SIGN}"
fi
#
# Undo changes
#
echo "Undoing changes"
rm -rf dependencies/
git checkout debian/changelog