From e5e490994b06fad4bc7b628802c6a039dea62bc5 Mon Sep 17 00:00:00 2001 From: Bastian Dehn Date: Sun, 17 May 2026 16:54:28 +0200 Subject: [PATCH] add builder --- Makefile | 4 +-- builder/Containerfile.template | 21 ++++++++++++ builder/builder | 51 +++++++++++++++++++++++++++ builder/run | 63 ++++++++++++++++++++++++++++++++++ 4 files changed, 136 insertions(+), 3 deletions(-) create mode 100644 builder/Containerfile.template create mode 100755 builder/builder create mode 100644 builder/run diff --git a/Makefile b/Makefile index 1f58161..b5ee7a8 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,6 @@ VERSION=1.0.0 PACKAGE=simple-backup -PACKAGENAME=$(PACKAGE)-$(VERSION)-1-x86_64 +PACKAGENAME=$(PACKAGE)-$(VERSION)$(EXTRA_VERSION)-1-x86_64 BUILDDIR=build PREFIX=usr/local BINDIR=$(BUILDDIR)/$(PACKAGENAME)/$(PREFIX)/bin @@ -43,5 +43,3 @@ $(BUILDDIR)/$(PACKAGENAME).deb: \ mkdir --parents $(@D) umask 0022 cd build && dpkg-deb --build --root-owner-group $(PACKAGENAME) - sha256sum $(@) > $(@).sha256 - cat $(@).sha256 diff --git a/builder/Containerfile.template b/builder/Containerfile.template new file mode 100644 index 0000000..ed20e3c --- /dev/null +++ b/builder/Containerfile.template @@ -0,0 +1,21 @@ +FROM $distro +ENV DEBIAN_FRONTEND=noninteractive +RUN apt-get update \ + && apt-get install --assume-yes --no-install-recommends \ + build-essential \ + cmake \ + file \ + git \ + cppcheck \ + lcov \ + && apt-get clean \ + && rm --recursive --force /var/lib/apt/lists/* +RUN apt-get update \ + && apt-get install --assume-yes --no-install-recommends \ + rsync \ + ssh \ + cryptsetup \ + && apt-get clean \ + && rm --recursive --force /var/lib/apt/lists/* +COPY run /app/run +ENTRYPOINT /app/run diff --git a/builder/builder b/builder/builder new file mode 100755 index 0000000..fcf59d3 --- /dev/null +++ b/builder/builder @@ -0,0 +1,51 @@ +#!/bin/bash + +create_containerfile() +{ + local distro="$1" + local distro_postfix="$2" + + cat builder/Containerfile.template \ + | sed "s/\$distro/$distro/" \ + > build/Containerfile-$distro_postfix \ + || return $? +} + +build_container_image() +{ + local distro_postfix="$1" + + podman build \ + --tag simple-backup-builder:$distro_postfix \ + --file build/Containerfile-$distro_postfix \ + || return $? +} + +run_builder_container() +{ + local distro_postfix="$1" + + podman run \ + --tty \ + --rm \ + --volume .:/src \ + simple-backup-builder:$distro_postfix \ + || return $? +} + +main() +{ + local distros=${DISTROS:="debian:oldstable-slim debian:stable-slim debian:testing-slim ubuntu:latest ubuntu:rolling"} + mkdir --parents build + cp builder/run build/run + chmod 755 build/run + + for distro in $distros; do + local distro_postfix=${distro/:/-} + create_containerfile "$distro" "$distro_postfix" || return $? + build_container_image "$distro_postfix" || return $? + run_builder_container "$distro_postfix" || return $? + done +} + +main diff --git a/builder/run b/builder/run new file mode 100644 index 0000000..b7dc5f9 --- /dev/null +++ b/builder/run @@ -0,0 +1,63 @@ +#!/bin/bash + +get_source_date() +{ + umask 0022 + cd /src && export SOURCE_DATE_EPOCH=$(git log --max-count=1 --pretty="%ct") + export EXTRA_VERSION="-$ID-$VERSION_CODENAME" +} + +create_package_checksum() +{ + cd /app/build/build + local package=$(find . -maxdepth 1 -name '*.deb') + sha256sum *.deb > $package.sha256 || return $? + cat $package.sha256 || return $? +} + +reproducible_package_checksum_check() +{ + cd /app/reproducible-build/build + local package=$(find . -maxdepth 1 -name '*.deb') + cp /src/build/$package.sha256 . || return $? + cat $package.sha256 || return $? + sha256sum -c $package.sha256 +} + +build_package() +{ + cd /app + rsync -r --exclude=build* /src/ /app/build || return $? + cd build + make --jobs=$(nproc) package || return $? +} + +copy_package() +{ + mkdir --parents /src/build + cp /app/build/build/*.deb /src/build/ || return $? + cp /app/build/build/*.sha256 /src/build/ || return $? +} + +build_reproducible_package() +{ + cd /app + rsync -r --exclude=build* /src/ /app/reproducible-build || return $? + cd reproducible-build + make --jobs=$(nproc) package || return $? +} + +main() +{ + source /etc/os-release + get_source_date || return $? + + build_package || return $? + create_package_checksum || return $? + copy_package || return $? + + build_reproducible_package || return $? + reproducible_package_checksum_check || return $? +} + +main -- 2.47.3