dalci-build-helper/upload-to-dalci-3rdparty-repo

99 lines
2.5 KiB
Bash
Executable file

#!/bin/bash
# SPDX-License-Identifier: 0BSD
# SPDX-FileCopyrightText: 2025 Christian Schendel <doppelhelix@gmail.com>
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_progress() {
pid=$1
spin='—\|/'
i=0
while kill -0 "$pid" 2>/dev/null; do
i=$(((i + 1) % 4))
spinner="${spin:$i:1}"
printf '\b%s' "$spinner"
sleep .1
done
}
show_cursor() {
tput cnorm
}
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
exit
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 <<EOF
$(cat "$configfile" | grep -v "^$")
EOF
# shellcheck source=/dev/null
source "$configfile"
check_for_pkg() {
mapfile -t pkg < <(find ./ -maxdepth 1 -name "*.pkg.tar.zst")
if [ ${#pkg[@]} -gt 0 ]; 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
exit
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
}
check_for_pkg
upload_package & show_progress $!
echo -e "\b$color_ok Done!"
show_cursor