118 lines
2.7 KiB
Bash
Raw Normal View History

#!/bin/bash
# lint: shfmt -w -s -bn -ci -sr -fn scripts/packaging/build/build-debs-native.sh
set -e # Exit immediately if a command exits with a non-zero status
set -u # Treat unset variables as an error
set -o pipefail # Return value of a pipeline is the value of the last (rightmost) command to exit with a non-zero status
print_usage()
{
echo "Usage: $0 -b BUILD_NUMBER -o OUTPUT_DIR [-w WORKING_DIR]"
exit 1
}
WORKING_DIR=$(git rev-parse --show-toplevel 2> /dev/null || pwd -P)
while getopts ":b:o:w:" opt; do
case ${opt} in
b) BUILD_NUMBER=$OPTARG ;;
o) OUTPUT_DIR=$OPTARG ;;
w) WORKING_DIR=$OPTARG ;;
\?) print_usage ;;
esac
done
if [ -z "${BUILD_NUMBER:-}" ] || [ -z "${OUTPUT_DIR:-}" ]; then
print_usage
fi
if [ "$(id -u)" != "0" ]; then
echo "Non-root user detected. Execution may fail."
fi
cd "${WORKING_DIR}" || exit 1
install_deps()
{
apt-get update || echo "WARNING: apt-get update failed"
apt-get install -y \
apt-transport-https \
debhelper \
gnupg2 \
build-essential \
ca-certificates \
curl \
devscripts \
dh-autoreconf \
dos2unix \
doxygen \
lsb-release \
pkg-config \
wget || echo "WARNING: package installation failed"
}
export_vars()
{
export CODENAME=$(lsb_release -sc)
if ! VERSION=$(cat ./build/next-release.txt | tr -d '\n'); then
echo "Failed to read version file" >&2
exit 1
fi
export GIT_SHA=$(git rev-parse --short HEAD)
}
setup_git_local()
{
if [ -z "$(git config user.email)" ]; then
git config user.email "$(id -un)@localhost"
fi
if [ -z "$(git config user.name)" ]; then
git config user.name "$(id -un)"
fi
git config --add safe.directory '*'
}
bootstrap_freeswitch()
{
./debian/util.sh prep-create-orig -n -V${VERSION}-${BUILD_NUMBER}-${GIT_SHA} -x
./debian/util.sh prep-create-dsc ${CODENAME}
}
install_freeswitch_deps()
{
apt-get update || echo "WARNING: apt-get update failed"
mk-build-deps --install --remove debian/control \
--tool "apt-get --yes --no-install-recommends" || echo "WARNING: mk-build-deps failed"
apt-get --yes --fix-broken install || echo "WARNING: apt-get fix-broken failed"
}
build_source_package()
{
dch -b -M -v "${VERSION}-${BUILD_NUMBER}-${GIT_SHA}~${CODENAME}" \
--force-distribution -D "${CODENAME}" "Nightly build, ${GIT_SHA}"
./debian/util.sh create-orig -n -V${VERSION}-${BUILD_NUMBER}-${GIT_SHA} -x
}
build_and_move()
{
dpkg-source --diff-ignore=.* --compression=xz --compression-level=9 --build . \
&& debuild -b -us -uc \
&& mkdir -p "${OUTPUT_DIR}" \
&& mv -v ../*.{deb,dsc,changes,tar.*} "${OUTPUT_DIR}"/
}
main()
{
install_deps
export_vars
setup_git_local
bootstrap_freeswitch
install_freeswitch_deps
build_source_package
build_and_move
}
main "$@"