]> gitweb.hhaalo.de Git - mv-none-space.git/commitdiff
add package builder
authorBastian Dehn <hhaalo@arcor.de>
Wed, 13 May 2026 09:19:38 +0000 (11:19 +0200)
committerBastian Dehn <hhaalo@arcor.de>
Wed, 13 May 2026 09:19:38 +0000 (11:19 +0200)
builder/Containerfile.template [new file with mode: 0644]
builder/builder [new file with mode: 0755]
builder/run [new file with mode: 0644]
src/CMakeLists.txt
src/main.c
tests/CMakeLists.txt

diff --git a/builder/Containerfile.template b/builder/Containerfile.template
new file mode 100644 (file)
index 0000000..95414bb
--- /dev/null
@@ -0,0 +1,19 @@
+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 \
+       libcmocka-dev \
+       && 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..83a003c
--- /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 mv-none-space-builder:$distro_postfix \
+               --file build/Containerfile-$distro_postfix \
+               || return $?
+}
+
+run_builder_container()
+{
+       local distro_postfix="$1"
+
+       podman run \
+               --tty \
+               --rm \
+               --volume .:/src \
+               mv-none-space-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..522cea3
--- /dev/null
@@ -0,0 +1,67 @@
+#!/bin/bash
+
+get_source_date()
+{
+       umask 0022
+       cd /src && export SOURCE_DATE_EPOCH=$(git log --max-count=1 --pretty="%ct")
+}
+
+create_package_checksum()
+{
+       local package=$(find . -maxdepth 1 -name '*.deb' )
+       sha256sum *.deb > $package.sha256 || return $?
+       cat $package.sha256 || return $?
+}
+
+reproducible_package_checksum_check()
+{
+       local package=$(find . -maxdepth 1 -name '*.deb')
+       cp /src/build/$package.sha256 . || return $?
+       cat $package.sha256 || return $?
+       sha256sum -c $package.sha256
+}
+
+run_tests()
+{
+       mkdir --parents /app/tests && cd /app/tests
+       cmake -DCMAKE_BUILD_TYPE=Debug /src || return $?
+       make --jobs=$(nproc) || return $?
+}
+
+build_package()
+{
+       mkdir --parents /app/build && cd /app/build
+       cmake -DCMAKE_BUILD_TYPE=Release \
+               -DEXTRA_VERSION="-$ID-$VERSION_CODENAME" /src || return $?
+       make --jobs=$(nproc) package || return $?
+}
+
+copy_package()
+{
+       mkdir --parents /src/build
+       cp /app/build/*.deb /src/build/ || return $?
+       cp /app/build/*.sha256 /src/build/ || return $?
+}
+
+build_reproducible_package()
+{
+       mkdir --parents /app/reproducible-build && cd /app/reproducible-build
+       cmake -DCMAKE_BUILD_TYPE=Release /src \
+               -DEXTRA_VERSION="-$ID-$VERSION_CODENAME" || return $?
+       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
index 6e7a1ab7caaa27c41540c091a8267bf1490f0ff1..2131d98335721e436f090b0ff5e25a73a7a2e171 100644 (file)
@@ -23,7 +23,7 @@ install(TARGETS ${PROJECT_NAME}
 set(CPACK_GENERATOR "DEB")
 set(CPACK_DEBIAN_PACKAGE_NAME "mv-none-space")
 set(CPACK_DEBIAN_FILE_NAME DEB-DEFAULT)
-set(CPACK_DEBIAN_PACKAGE_VERSION ${PROJECT_VERSION})
+set(CPACK_DEBIAN_PACKAGE_VERSION ${PROJECT_VERSION}-${EXTRA_VERSION})
 set(CPACK_DEBIAN_PACKAGE_ARCHITECTURE "amd64")
 set(CPACK_DEBIAN_PACKAGE_SHLIBDEPS ON)
 set(CPACK_DEBIAN_PACKAGE_GENERATE_SHLIBS ON)
index 765296e769b0fa2f9f561dade800242e17477f2f..6ca0496d38e6cac9888fe10ce3de73853f0c2016 100644 (file)
@@ -61,7 +61,7 @@ int _rename_files(const char* dir_path, rename_ptr renamefunc)
        return EXIT_SUCCESS;
 }
 
-int main(int argc, char* argv[])
+int main(int argc, const char* argv[])
 {
        printf("Version %s\n", VERSION);
 
index e262f4da4c3d7cdbd7252eb317e84d7b39a56ef9..f2580f442c814737de68f3219ebdb644648de506 100644 (file)
@@ -3,6 +3,9 @@ cmake_minimum_required(VERSION 3.25.1)
 find_library(CMOCKA cmocka REQUIRED)
 find_program(CPPCHECK cppcheck REQUIRED)
 
+execute_process(COMMAND bash -c "${CPPCHECK} --version | sed -z 's/Cppcheck \\(.*\\)\\n$/\\1/'"
+       OUTPUT_VARIABLE CPPCHECK_VERSION)
+
 add_executable(tests
        tests.c
        command_validate_tests.c
@@ -16,10 +19,19 @@ add_custom_target(run_tests
        ALL ./tests
        DEPENDS tests)
 
-add_custom_command(TARGET run_tests
-       POST_BUILD
-       COMMAND ${CPPCHECK}
-               --check-level=exhaustive
-               --enable=warning,style
-               ${CMAKE_SOURCE_DIR}/src
-               ${CMAKE_SOURCE_DIR}/tests)
\ No newline at end of file
+if(CPPCHECK_VERSION VERSION_GREATER 2.10)
+       add_custom_command(TARGET run_tests
+               POST_BUILD
+               COMMAND ${CPPCHECK}
+                       --check-level=exhaustive
+                       --enable=warning,style
+                       ${CMAKE_SOURCE_DIR}/src
+                       ${CMAKE_SOURCE_DIR}/tests)
+else()
+       add_custom_command(TARGET run_tests
+               POST_BUILD
+               COMMAND ${CPPCHECK}
+                       --enable=warning,style
+                       ${CMAKE_SOURCE_DIR}/src
+                       ${CMAKE_SOURCE_DIR}/tests)
+endif()
\ No newline at end of file