]> git.puffer.fish Git - matthieu/frr.git/commitdiff
debian: Update the tools/build-debian-package.sh to be example build script
authorOndřej Surý <ondrej@sury.org>
Sun, 27 Sep 2020 11:17:57 +0000 (13:17 +0200)
committermergify-bot <noreply@mergify.io>
Wed, 7 Jul 2021 20:10:24 +0000 (20:10 +0000)
Signed-off-by: Ondřej Surý <ondrej@sury.org>
(cherry picked from commit 223766ead45908e3950b1a7cc85ea2acae7054a0)

debian/gbp.conf
tools/build-debian-package.sh

index 990c4d226e03628d57f887118de8a51d16e4ab1b..23917b9b8f610cea808769f23796b9cd430d7eac 100644 (file)
@@ -1,4 +1,4 @@
 [DEFAULT]
 pristine-tar = False
 debian-branch = master
-upstream-tree=SLOPPY
+upstream-tree = SLOPPY
index 6791325e75723858f87e40a0a223f7e2b746a5eb..b8ac7e1ffcf7e4381c020734b4e235f0c794ea23 100755 (executable)
 # This file is public domain
 set -e
 
-cd "$(dirname "$(dirname "$0")")"
+BASEDIR="$(realpath -e "$(dirname "$(dirname "$0")")")"
+cd "$BASEDIR"
+
+#
+# Directory where the git-buildpackage does the work
+#
+WORKDIR=$(mktemp -d /tmp/debwork-XXXXXXXX) || exit 1
+trap '( rm -rf "$WORKDIR" )' EXIT
+
+#
+# Checking requirements
+#
 
 if [ "$(id -u)" = 0 ]; then
        echo "Running as root - installing dependencies"
-       apt-get install fakeroot debhelper devscripts git-buildpackage
+       apt-get install fakeroot debhelper devscripts git-buildpackage lsb-release
        mk-build-deps --install debian/control
        exit 0
 fi
 
 git diff-index --quiet HEAD || { echo "ERROR: git working directory is not clean!" ; exit 1; }
 
-HEAD_COMMIT=$(git rev-parse --short HEAD)
-HEAD_BRANCH=$(git rev-parse --abbrev-ref HEAD)
-BUILD_BRANCH="debian/$HEAD_BRANCH-$(date +%s)"
+#
+# We switch to a separate branch to not mangle the actual branch, this is
+# not needed in the CI
+#
+
+CLONEDIR="$WORKDIR/$(basename "$BASEDIR")"
+
+echo "Creating shallow clone from $BASEDIR to $CLONEDIR..."
 
-echo "Switching to a '$BUILD_BRANCH' build branch"
+git clone --depth=2 "file://$BASEDIR" "$CLONEDIR"
+cd "$CLONEDIR"
 
-git checkout -b "$BUILD_BRANCH" "$HEAD_BRANCH"
+####################################
+# Build the Debian package sources #
+####################################
+
+#
+# Now we will construct an "upstream" version out of:
+# 1. version in AC_INIT
+# 2. the unix time from the last commit (HEAD)
+#    (alternatively %Y%m%d%H%M%S could be used here)
+# 4. Debian version (always -1)
+#
 
 UPSTREAM_VERSION=$(sed -ne 's/AC_INIT(\[frr\],\s\[\([^]]*\)\],.*/\1/p' configure.ac | sed -e 's/-\(\(dev\|alpha\|beta\)\d*\)/~\1/')
-LAST_TIMESTAMP=$(git log --format=format:%ad --date=format:%Y%m%d -1 "$HEAD_COMMIT")
-SINCE_COMMIT=$(git log --since="00:00:00" --format=format:%H | tail -1)
-DEBIAN_VERSION="$UPSTREAM_VERSION-$LAST_TIMESTAMP-git.$HEAD_COMMIT-1"
+LAST_TIMESTAMP=$(git log --format=format:%ad --date=format:%s -1 "HEAD")
+DEBIAN_VERSION="$UPSTREAM_VERSION-$LAST_TIMESTAMP-1"
 
-echo "Adding new snapshot debian/changelog entry for $DEBIAN_VERSION"
+#
+# We add a Debian changelog entry, and use artifical "since commit"
+# so there's not a whole git history in the debian/changelog.
+#
+# The --snapshot option appends ~1.<shorthash> to the debian version, so for the
+# release build, this needs to be replaces with --release
+#
+
+echo "Adding new snapshot debian/changelog entry for $DEBIAN_VERSION..."
 
 gbp dch \
-    --debian-branch="$BUILD_BRANCH" \
+    --ignore-branch \
     --new-version "$DEBIAN_VERSION" \
-    --since="$SINCE_COMMIT~" \
+    --dch-opt="--force-bad-version" \
+    --since="HEAD~" \
     --snapshot \
     --commit
 
-echo "Building package"
+echo "Building package..."
+
+#
+# git-buildpackage will use $BUILDER command to just build new source package
+#
+
+BUILDER="dpkg-buildpackage -uc -us --build=source --no-check-builddeps --no-pre-clean -sa"
+UPSTREAM_COMPRESSION=xz
 
 gbp buildpackage \
-    --git-builder=debuild \
-    --git-debian-branch="$BUILD_BRANCH" \
+    --git-export-dir="$WORKDIR" \
+    --git-builder="$BUILDER" \
+    --git-ignore-branch \
     --git-force-create \
+    --git-compression=$UPSTREAM_COMPRESSION \
     --git-no-pristine-tar
 
-echo "Switching back to '$HEAD_BRANCH' branch"
+DEB_SOURCE="$(dpkg-parsechangelog -SSource)"
+DEB_VERSION="$(dpkg-parsechangelog -SVersion)"
+DEB_VERSION_UPSTREAM_REVISION="$(echo "${DEB_VERSION}" | sed -e 's/^[0-9]*://')"
+DEB_VERSION_UPSTREAM="$(echo "${DEB_VERSION_UPSTREAM_REVISION}" | sed -e 's/-[^-]*$//')"
+
+#
+# Now the source package has been built and it is stored in following files:
+#
+
+echo "Running lintian on the source package"
+
+lintian "${WORKDIR}/${DEB_SOURCE}_${DEB_VERSION_UPSTREAM_REVISION}_source.changes"
+
+####################
+# Backporting part #
+####################
 
-git checkout "$HEAD_BRANCH"
+#
+# Now we determine what should be the suffix for the system we are backporting
+# for.
+#
 
-echo "Deleting the '$BUILD_BRANCH' build branch"
+DIST=$(lsb_release --codename --short)
+PATCH=${PATCH:-1}
+
+case "$DIST" in
+    jessie)  EXTRA_VERSION="deb8u${PATCH}" ;;
+    stretch) EXTRA_VERSION="deb9u${PATCH}" ;;
+    buster)  EXTRA_VERSION="deb10u${PATCH}" ;;
+    sid)     EXTRA_VERSION="sid+${PATCH}" ;;
+    xenial)  EXTRA_VERSION="ubuntu16.04+${PATCH}" ;;
+    bionic)  EXTRA_VERSION="ubuntu16.04+${PATCH}" ;;
+    focal)   EXTRA_VERSION="ubuntu20.04+${PATCH}" ;;
+    groovy)  EXTRA_VERSION="ubuntu20.10+${PATCH}" ;;
+    *) echo "Unknown distribution '$DIST'" ; exit 1 ;;
+esac
+
+#
+# Now the actual backport, we:
+#
+# 1. Unpack the sources
+# 2. Append the EXTRA_VERSION
+# 3. Use debuild to build the package (don't sign
+#
+
+(cd "$WORKDIR" && dpkg-source -x "${DEB_SOURCE}_${DEB_VERSION_UPSTREAM_REVISION}.dsc")
+(cd "$WORKDIR/${DEB_SOURCE}-${DEB_VERSION_UPSTREAM}/" && dch -b -m -t -l "~$EXTRA_VERSION" "No change backport build for $DIST")
+(cd "$WORKDIR/${DEB_SOURCE}-${DEB_VERSION_UPSTREAM}/" && debuild -uc -us)
+
+#
+# Copy back the result
+#
 
-git branch -D "$BUILD_BRANCH"
+cp -a "$WORKDIR"/*.build "$WORKDIR"/*.buildinfo "$WORKDIR"/*.changes "$WORKDIR"/*.dsc "$WORKDIR"/*.deb "$WORKDIR"/*.debian.* "$WORKDIR"/*.orig.tar.* "${BASEDIR}/"