From 3d2017aea967c086e3f15a60a3c0dfa7a4b082a4 Mon Sep 17 00:00:00 2001 From: "Glenn Y. Rolland" Date: Fri, 11 Apr 2025 14:24:04 +0200 Subject: [PATCH] feat(build): add Docker-based Debian package build system Introduce a Docker-based build system for Debian packages to streamline the build process and ensure consistency across environments. This change mitigates potential build failures due to environment discrepancies and simplifies the setup for new developers. - Extend .gitignore to exclude debhelper and build artifacts - Add build.sh script to automate Docker-based package building - Update debian/control to include libyaml-dev as a build dependency - Create debian/files to track generated Debian packages - Add Dockerfile to define the build environment with necessary dependencies Signed-off-by: Glenn Y. Rolland --- .gitignore | 4 ++++ build.sh | 19 +++++++++++++++++++ debian/control | 2 +- debian/files | 2 ++ docker/Dockerfile | 22 ++++++++++++++++++++++ 5 files changed, 48 insertions(+), 1 deletion(-) create mode 100644 build.sh create mode 100644 debian/files create mode 100644 docker/Dockerfile diff --git a/.gitignore b/.gitignore index ccd3fc2..94614b7 100644 --- a/.gitignore +++ b/.gitignore @@ -7,3 +7,7 @@ .vagrant bin lib +debian/.debhelper/ +debian/debhelper-build-stamp +debian/mfm +debian/mfm.substvars diff --git a/build.sh b/build.sh new file mode 100644 index 0000000..66dd04f --- /dev/null +++ b/build.sh @@ -0,0 +1,19 @@ +#!/bin/sh + +# References: +# - https://www.debian.org/doc/manuals/maint-guide/build.en.html for base principles +# - https://www.patreon.com/posts/building-debian-23177439 for debuild output dir +# +set -ue + +mkdir -p _build || true + +docker build -t debbuilder --file docker/Dockerfile . +docker run -it -v "$(pwd):/app" -v "$(pwd)/_build:/_build" debbuilder \ + sh -c "ARTIFACTS_DIR=/app/_build debuild --preserve-envvar=ARTIFACTS_DIR -us -uc --buildinfo-option=-u/app/_build --changes-option=-u/app/_build" \ + || docker run -it -v "$(pwd):/app" debbuilder + +# dpkg-buildpackage -us -uc +# debuild +# git-buildpackage +echo SUCCESS diff --git a/debian/control b/debian/control index d2f499a..9e38787 100644 --- a/debian/control +++ b/debian/control @@ -2,7 +2,7 @@ Source: mfm Section: utils Priority: optional Maintainer: Glenn Y. Rolland -Build-Depends: debhelper-compat (= 13), crystal, shards, make +Build-Depends: debhelper-compat (= 13), crystal, shards, make, libyaml-dev Standards-Version: 4.6.0 Homepage: https://code.apps.glenux.net/glenux/mfm Vcs-Git: https://code.apps.glenux.net/glenux/mfm.git diff --git a/debian/files b/debian/files new file mode 100644 index 0000000..7cef515 --- /dev/null +++ b/debian/files @@ -0,0 +1,2 @@ +mfm-dbgsym_0.2.0_amd64.deb debug optional automatic=yes +mfm_0.2.0_amd64.deb utils optional diff --git a/docker/Dockerfile b/docker/Dockerfile new file mode 100644 index 0000000..b3bbda2 --- /dev/null +++ b/docker/Dockerfile @@ -0,0 +1,22 @@ +FROM debian:trixie + +RUN set -ex \ + && sed -i \ + -e 's/Types: deb/Types: deb deb-src/g' \ + /etc/apt/sources.list.d/debian.sources \ + && apt-get update \ + && apt-get install -y --no-install-recommends \ + build-essential \ + cdbs \ + devscripts \ + equivs \ + fakeroot \ + crystal \ + shards \ + git-buildpackage \ + libyaml-dev \ + libxml2-dev \ + && apt-get clean \ + && rm -rf /tmp/* /var/tmp/* + +WORKDIR /app