]> gitweb.hhaalo.de Git - simple-backup.git/commitdiff
add builder
authorBastian Dehn <hhaalo@arcor.de>
Sun, 17 May 2026 14:54:28 +0000 (16:54 +0200)
committerBastian Dehn <hhaalo@arcor.de>
Sun, 17 May 2026 14:54:28 +0000 (16:54 +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 1f5816100a1c7ec0ede709a148563cec36c5e67d..b5ee7a83e8d79b3921d6901f8c5dda625f28ee0b 100644 (file)
--- 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 (file)
index 0000000..ed20e3c
--- /dev/null
@@ -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 (executable)
index 0000000..fcf59d3
--- /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 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 (file)
index 0000000..b7dc5f9
--- /dev/null
@@ -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