161 lines
4.2 KiB
Bash
161 lines
4.2 KiB
Bash
|
#!/bin/bash
|
||
|
|
||
|
set -eo pipefail
|
||
|
|
||
|
GITEA_PACKAGE_ORG=${GITEA_PACKAGE_ORG}
|
||
|
GITEA_PACKAGE_BASE_URL=${GITEA_BASE_URL:-https://forge.cadoles.com}
|
||
|
GITEA_PACKAGE_USERNAME=${GITEA_PACKAGE_USERNAME}
|
||
|
GITEA_PACKAGE_PASSWORD=${GITEA_PACKAGE_PASSWORD}
|
||
|
GITEA_PACKAGE_FILE=${GITEA_PACKAGE_FILE}
|
||
|
GITEA_PACKAGE_CURL_MAX_RETRY=${GITEA_PACKAGE_CURL_MAX_RETRY:-3}
|
||
|
GITEA_PACKAGE_FORCE_OVERWRITE=${GITEA_PACKAGE_FORCE_UPLOAD:-yes}
|
||
|
|
||
|
GITEA_PACKAGE_DEBIAN_DISTRIBUTION=${GITEA_PACKAGE_DEBIAN_DISTRIBUTION:-latest}
|
||
|
GITEA_PACKAGE_DEBIAN_COMPONENT=${GITEA_PACKAGE_DEBIAN_COMPONENT:-main}
|
||
|
|
||
|
GITEA_PACKAGE_ALPINE_BRANCH=${GITEA_PACKAGE_ALPINE_BRANCH:-latest}
|
||
|
GITEA_PACKAGE_ALPINE_REPOSITORY=${GITEA_PACKAGE_ALPINE_REPOSITORY:-main}
|
||
|
|
||
|
function check_dependencies {
|
||
|
assert_command_available 'curl'
|
||
|
}
|
||
|
|
||
|
function assert_command_available {
|
||
|
local command=$1
|
||
|
local command_path=$(which $command)
|
||
|
|
||
|
if [ -z "$command_path" ]; then
|
||
|
echo "The '$command' command could not be found. Please install it before using this script." 1>&2
|
||
|
exit 1
|
||
|
fi
|
||
|
}
|
||
|
|
||
|
function check_environment {
|
||
|
assert_environment GITEA_PACKAGE_ORG
|
||
|
assert_environment GITEA_PACKAGE_BASE_URL
|
||
|
}
|
||
|
|
||
|
function source_env_file {
|
||
|
if [ ! -f '.env' ]; then
|
||
|
return 0
|
||
|
fi
|
||
|
set -o allexport
|
||
|
source .env
|
||
|
set +o allexport
|
||
|
}
|
||
|
|
||
|
function assert_environment {
|
||
|
local name=$1
|
||
|
local value=${!name}
|
||
|
|
||
|
if [ -z "$value" ]; then
|
||
|
echo "The $"$name" environment variable is empty." 1>&2
|
||
|
exit 1
|
||
|
fi
|
||
|
}
|
||
|
|
||
|
function ask_credentials {
|
||
|
if [ -z "$GITEA_PACKAGE_USERNAME" ]; then
|
||
|
echo -n "Username: "
|
||
|
read GITEA_PACKAGE_USERNAME
|
||
|
|
||
|
fi
|
||
|
if [ -z "$GITEA_PACKAGE_PASSWORD" ]; then
|
||
|
echo -n "Password: "
|
||
|
stty -echo
|
||
|
read GITEA_PACKAGE_PASSWORD
|
||
|
stty echo
|
||
|
echo
|
||
|
fi
|
||
|
}
|
||
|
|
||
|
function ask_package_type {
|
||
|
local available_types="debian alpine redhat"
|
||
|
local match=$( ( echo "$available_types" | grep -qw "$GITEA_PACKAGE_TYPE" ) && echo yes || echo no )
|
||
|
while [ "$match" == "no" ] || [ -z $GITEA_PACKAGE_TYPE ]; do
|
||
|
echo -n "Package type ($available_types): "
|
||
|
read GITEA_PACKAGE_TYPE
|
||
|
match=$( ( echo "$available_types" | grep -qw "$GITEA_PACKAGE_TYPE" ) && echo yes || echo no )
|
||
|
done
|
||
|
}
|
||
|
|
||
|
function ask_package_file {
|
||
|
while [ ! -f "$GITEA_PACKAGE_FILE" ]; do
|
||
|
echo -n "Package file (must be a valid path to a supported package file): "
|
||
|
read GITEA_PACKAGE_FILE
|
||
|
done
|
||
|
|
||
|
if [ -z $GITEA_PACKAGE_TYPE ]; then
|
||
|
local filename=$(basename -- "$GITEA_PACKAGE_FILE")
|
||
|
local extension="${filename##*.}"
|
||
|
|
||
|
case $extension in
|
||
|
deb)
|
||
|
GITEA_PACKAGE_TYPE=debian
|
||
|
;;
|
||
|
apk)
|
||
|
GITEA_PACKAGE_TYPE=alpine
|
||
|
;;
|
||
|
rpm)
|
||
|
GITEA_PACKAGE_TYPE=redhat
|
||
|
;;
|
||
|
esac
|
||
|
fi
|
||
|
}
|
||
|
|
||
|
function upload_debian_package {
|
||
|
gitea_api "/api/packages/$GITEA_PACKAGE_ORG/debian/pool/$GITEA_PACKAGE_DEBIAN_DISTRIBUTION/$GITEA_PACKAGE_DEBIAN_COMPONENT/upload" \
|
||
|
--upload-file "$GITEA_PACKAGE_FILE"
|
||
|
}
|
||
|
|
||
|
function upload_alpine_package {
|
||
|
gitea_api "/api/packages/$GITEA_PACKAGE_ORG/alpine/$GITEA_PACKAGE_ALPINE_BRANCH/$GITEA_PACKAGE_ALPINE_REPOSITORY" \
|
||
|
--upload-file "$GITEA_PACKAGE_FILE"
|
||
|
}
|
||
|
|
||
|
function upload_redhat_package {
|
||
|
gitea_api "/api/packages/$GITEA_PACKAGE_ORG/rpm/upload" \
|
||
|
--upload-file "$GITEA_PACKAGE_FILE"
|
||
|
}
|
||
|
|
||
|
|
||
|
function gitea_api {
|
||
|
local path=$1
|
||
|
local args=${@:2}
|
||
|
|
||
|
curl -L \
|
||
|
--fail \
|
||
|
--ipv4 \
|
||
|
--progress-bar \
|
||
|
--retry "$GITEA_PACKAGE_CURL_MAX_RETRY" \
|
||
|
-u "$GITEA_PACKAGE_USERNAME:$GITEA_PACKAGE_PASSWORD" \
|
||
|
$GITEA_PACKAGE_CURL_ARGS \
|
||
|
${args} \
|
||
|
"$GITEA_PACKAGE_BASE_URL$path"
|
||
|
}
|
||
|
|
||
|
function main {
|
||
|
check_dependencies
|
||
|
source_env_file
|
||
|
check_environment
|
||
|
ask_credentials
|
||
|
ask_package_file
|
||
|
ask_package_type
|
||
|
case $GITEA_PACKAGE_TYPE in
|
||
|
debian)
|
||
|
upload_debian_package
|
||
|
;;
|
||
|
alpine)
|
||
|
upload_alpine_package
|
||
|
;;
|
||
|
redhat)
|
||
|
upload_redhat_package
|
||
|
;;
|
||
|
*)
|
||
|
echo "Package type '$GITEA_PACKAGE_TYPE' is not yet supported" 1>&2
|
||
|
exit 1
|
||
|
;;
|
||
|
esac
|
||
|
}
|
||
|
|
||
|
main
|