96 lines
2.6 KiB
Bash
Executable file
96 lines
2.6 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_cursor() {
|
|
tput cnorm
|
|
exit 1
|
|
}
|
|
|
|
hide_cursor() {
|
|
tput civis
|
|
}
|
|
|
|
trap show_cursor INT TERM
|
|
hide_cursor
|
|
|
|
## check for config file
|
|
if [[ -r "${XDG_CONFIG_HOME:-$HOME/.config}/upload-to-dalci-repo.cfg" ]]; then
|
|
configfile="${XDG_CONFIG_HOME:-$HOME/.config}/upload-to-dalci-repo.cfg"
|
|
configfile_secured="${TMPDIR:-/tmp}/tmp.upload-to-dalci-repo.cfg"
|
|
else
|
|
echo -e "\b$color_error no configuration found"
|
|
cat > "${XDG_CONFIG_HOME:-$HOME/.config}/upload-to-dalci-repo.cfg" << 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 <<EOF
|
|
$(cat "$configfile" | grep -v "^$")
|
|
EOF
|
|
# shellcheck source=/dev/null
|
|
source "$configfile"
|
|
|
|
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
|
|
}
|
|
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
|