]> gitweb.hhaalo.de Git - scantopdf.git/commitdiff
add builder
authorBastian Dehn <hhaalo@arcor.de>
Wed, 13 May 2026 19:03:52 +0000 (21:03 +0200)
committerBastian Dehn <hhaalo@arcor.de>
Wed, 13 May 2026 19:03:52 +0000 (21:03 +0200)
Makefile
builder/Containerfile.template [new file with mode: 0644]
builder/builder [new file with mode: 0755]
builder/run [new file with mode: 0644]

index f0057baebe70c0d4e33ac74439fb17a95a9c01a7..da8cfd4aeef653aefd16e015bd599d2e3a86869c 100644 (file)
--- 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 (file)
index 0000000..bb2507d
--- /dev/null
@@ -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 (executable)
index 0000000..6008e43
--- /dev/null
@@ -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 (file)
index 0000000..2a32695
--- /dev/null
@@ -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