From: Bastian Dehn Date: Wed, 13 May 2026 19:03:52 +0000 (+0200) Subject: add builder X-Git-Tag: v1.1.5^2~3 X-Git-Url: https://gitweb.hhaalo.de/?a=commitdiff_plain;h=4ab69c1e3f6058f377c0966a441b4e78a312b8ce;p=scantopdf.git add builder --- diff --git a/Makefile b/Makefile index f0057ba..da8cfd4 100644 --- a/Makefile +++ b/Makefile @@ -3,7 +3,7 @@ EXTRA = BUILDVERSION = 1 ARCHITECTURE = amd64 VERSION = $(VERSIONNR)$(EXTRA) -PACKAGENAME = scantopdf-$(VERSION)-$(BUILDVERSION)-$(ARCHITECTURE) +PACKAGENAME = scantopdf-$(VERSION)-$(BUILDVERSION)$(EXTRA_VERSION)-$(ARCHITECTURE) BUILDDIR = build PACKAGEDIR = $(BUILDDIR)/$(PACKAGENAME) diff --git a/builder/Containerfile.template b/builder/Containerfile.template new file mode 100644 index 0000000..bb2507d --- /dev/null +++ b/builder/Containerfile.template @@ -0,0 +1,30 @@ +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 \ + bats \ + bats-support \ + bats-assert \ + parallel \ + sane-utils \ + qpdf \ + ocrmypdf \ + libtiff-tools \ + pdftk \ + pdfgrep \ + exiftool \ + && 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..6008e43 --- /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 scantopdf-builder:$distro_postfix \ + --file build/Containerfile-$distro_postfix \ + || return $? +} + +run_builder_container() +{ + local distro_postfix="$1" + + podman run \ + --tty \ + --rm \ + --volume .:/src \ + scantopdf-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..2a32695 --- /dev/null +++ b/builder/run @@ -0,0 +1,72 @@ +#!/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 +} + +run_tests() +{ + cd /app + rsync -r --exclude=build* /src/ /app/tests/ || return $? + cd /app/tests + make --jobs=$(nproc) test || return $? +} + +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 $? + + run_tests || return $? + build_package || return $? + create_package_checksum || return $? + copy_package || return $? + + build_reproducible_package || return $? + reproducible_package_checksum_check || return $? +} + +main \ No newline at end of file