From: Bastian Dehn Date: Wed, 13 May 2026 09:19:38 +0000 (+0200) Subject: add package builder X-Git-Tag: 1.1.10^2~2 X-Git-Url: https://gitweb.hhaalo.de/?a=commitdiff_plain;h=56cb75853e6d83c65df0ca14bd3bb7c60388e491;p=mv-none-space.git add package builder --- diff --git a/builder/Containerfile.template b/builder/Containerfile.template new file mode 100644 index 0000000..95414bb --- /dev/null +++ b/builder/Containerfile.template @@ -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 index 0000000..83a003c --- /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 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 index 0000000..522cea3 --- /dev/null +++ b/builder/run @@ -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 diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 6e7a1ab..2131d98 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -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) diff --git a/src/main.c b/src/main.c index 765296e..6ca0496 100644 --- a/src/main.c +++ b/src/main.c @@ -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); diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index e262f4d..f2580f4 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -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