From c23681617e1449ff705b78f16d84694478c0efa7 Mon Sep 17 00:00:00 2001 From: Christian Schendel Date: Wed, 10 Sep 2025 04:11:14 +0200 Subject: [PATCH] add some tools --- .gitignore | 4 +- chroot-build | 65 ++++++++++++ upload-to-dalci-3rdparty-repo | 99 +++++++++++++++++++ ...ad-to-forgejo-repo => upload-to-dalci-repo | 4 +- 4 files changed, 169 insertions(+), 3 deletions(-) create mode 100755 chroot-build create mode 100755 upload-to-dalci-3rdparty-repo rename upload-to-forgejo-repo => upload-to-dalci-repo (97%) diff --git a/.gitignore b/.gitignore index f597ddc..30eee8b 100644 --- a/.gitignore +++ b/.gitignore @@ -10,5 +10,7 @@ !LICENSE !qt6-rebuild !REUSE.toml -!upload-to-forgejo-repo +!upload-to-dalci-3rdparty-repo +!upload-to-dalci-repo +!chroot-build diff --git a/chroot-build b/chroot-build new file mode 100755 index 0000000..f69cac8 --- /dev/null +++ b/chroot-build @@ -0,0 +1,65 @@ +#!/bin/bash + +# SPDX-FileCopyrightText: Christian Schendel +# SPDX-License-Identifier: 0BSD + +set -euo pipefail +use_tmpfs=true +CHROOT="/tmp/mkarchroot" + +check_available_ram() { + if [ "$(awk '/^MemAvailable:/ { print $2; }' /proc/meminfo)" -lt 50000 ]; then + use_tmpfs=false + fi +} + +create_chroot_directory() { + if [ $use_tmpfs ]; then + sudo mount --mkdir -t tmpfs -o defaults,size=20G tmpfs $CHROOT + else + sudo mkdir -p "$CHROOT" + fi +} + +create_chroot_environment() { + if [[ ! -d "$CHROOT/root" ]]; then + mkarchroot -M ~/.config/pacman/makepkg.conf "$CHROOT/root" base-devel + fi +} + +build_package(){ + arch-nspawn "$CHROOT/root" pacman -Syu + if makechrootpkg -c -r "$CHROOT" -- -Asf . ; then + makepkg --printsrcinfo >.SRCINFO + else + delete_chroot_environment && echo -e "\n\e[1;31m==> BUILD FAILED: \e[1;37m$CHROOT removed\e[0m " && exit 1 + fi +} + +sign_package(){ + PACKAGE="$(makepkg --packagelist)" + gpg --use-agent --output "$PACKAGE.sig" --detach-sign "$PACKAGE" +} + +delete_chroot_environment() { + if [ "$(stat -f --format=%T "$CHROOT")" == "btrfs" ]; then + { + sudo btrfs subvolume delete "$CHROOT/root/var/lib/portables" + sudo btrfs subvolume delete "$CHROOT/root/var/lib/machines" + sudo btrfs subvolume delete "$CHROOT/root" + sudo rm -Rf $CHROOT + } >>/dev/null 2>&1 + elif [ "$(stat -f --format=%T "$CHROOT")" == "tmpfs" ]; then + sudo umount -f $CHROOT + fi + sudo rm -Rf $CHROOT +} + +check_available_ram +create_chroot_directory +create_chroot_environment +build_package +sign_package +delete_chroot_environment + +# vim: set ts=4 sw=4 et: diff --git a/upload-to-dalci-3rdparty-repo b/upload-to-dalci-3rdparty-repo new file mode 100755 index 0000000..c1b54b8 --- /dev/null +++ b/upload-to-dalci-3rdparty-repo @@ -0,0 +1,99 @@ +#!/bin/bash + +# SPDX-License-Identifier: 0BSD +# SPDX-FileCopyrightText: 2025 Christian Schendel + +set -euo pipefail +color_note="\e[1;36m==>\e[0m" +color_ok="\e[1;32m==>\e[0m" +color_error="\e[1;31m==>\e[0m" +color_warning="\e[1;35m==>\e[0m" + + +show_cursor() { + tput cnorm + exit 1 +} + +hide_cursor() { + tput civis +} + +trap show_cursor INT TERM +hide_cursor + + +configfile="${XDG_CONFIG_HOME:-$HOME/.config}/upload-to-dalci-3rdparty-repo.cfg" + +## check for config file +if [[ -r "$configfile" ]]; then + configfile_secured="${TMPDIR:-/tmp}/tmp.upload-to-dalci-3rdparty-repo.cfg" +else + echo -e "\b$color_error no configuration found" + cat > "$configfile" << EOF +forgejo_repo_url="https://{domain}/api/packages/{owner}/arch/{group}" +forgejo_user="your_username" +forgejo_token="your_token_or_password" + +EOF + echo -e "\b$color_note example configuration created at" + echo -e "\b$color_note ${XDG_CONFIG_HOME:-$HOME/.config}/upload-to-dalci-repo.cfg" + echo -e "\b$color_warning please edit it before running this script again" + show_cursor +fi + +# secure the config file +rm -f "$configfile_secured" +while IFS= read -r line; do + printf '%s\n' \ + "$(sed -E "s/^(\s)?+(#.+$|[a-zA-Z0-9_]+=['\"]?[a-zA-Z0-9_~\.\`-]+['\"]).+$/\2/g" <<< "$line")" \ + >> "$configfile_secured" + configfile=$configfile_secured +done </dev/null; do + i=$(((i + 1) % 4)) + spinner="${spin:$i:1}" + printf '\b%s' "$spinner" + sleep .1 + done +} +check_for_pkg() { + pkg=$(find ./ -type f -name "*.pkg.tar.zst") + if [ ! -z "$pkg" ]; then + : + else + echo -e "\b$color_error no packges found." + echo -e "\b\tPlease run this script from inside the directory" + echo -e "\b\twhich holds the Arch-packages." + echo -e "\b$color_ok Exiting now." + show_cursor + fi +} + +upload_package() { + for file in ./*; do + if [[ "$file" != *.pkg.tar.zst ]]; then + : + else + echo -e "\b$color_note uploading $file" + # shellcheck disable=SC2154 + curl -X PUT "$forgejo_repo_url" \ + --user "${forgejo_user}:${forgejo_token}" \ + --header "Content-Type: application/octet-stream" \ + --data-binary "@$file" + fi + done + echo -e "\n\b$color_ok packges uploaded" +} +check_for_pkg +upload_package & show_progress $! +show_cursor diff --git a/upload-to-forgejo-repo b/upload-to-dalci-repo similarity index 97% rename from upload-to-forgejo-repo rename to upload-to-dalci-repo index e65fa6d..ffdaa94 100755 --- a/upload-to-forgejo-repo +++ b/upload-to-dalci-repo @@ -79,7 +79,7 @@ check_for_pkg() { upload_package() { for file in ./*; do if [[ "$file" != *.pkg.tar.zst ]]; then - exit 1 + : else echo -e "\b$color_note uploading $file" # shellcheck disable=SC2154 @@ -89,7 +89,7 @@ upload_package() { --data-binary "@$file" fi done - echo -e "\b$color_ok packges uploaded" + echo -e "\n\b$color_ok packges uploaded" } check_for_pkg upload_package & show_progress $!