133 lines
3.6 KiB
Bash
133 lines
3.6 KiB
Bash
#!/bin/bash
|
|
|
|
set -eo pipefail
|
|
|
|
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_OWNER=${GITEA_PACKAGE_OWNER}
|
|
GITEA_PACKAGE_FILES=${GITEA_PACKAGE_FILES}
|
|
GITEA_PACKAGE_CURL_MAX_RETRY=${GITEA_PACKAGE_CURL_MAX_RETRY:-3}
|
|
GITEA_PACKAGE_TYPE=${GITEA_PACKAGE_TYPE:-generic}
|
|
|
|
function check_dependencies {
|
|
assert_command_available 'curl'
|
|
assert_command_available 'jq'
|
|
}
|
|
|
|
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_BASE_URL
|
|
assert_environment GITEA_PACKAGE_FILES
|
|
assert_environment GITEA_PACKAGE_OWNER
|
|
}
|
|
|
|
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 upload_package {
|
|
echo "Uploading package(s)..."
|
|
case "$GITEA_PACKAGE_TYPE" in
|
|
generic)
|
|
upload_generic_package
|
|
;;
|
|
alpine)
|
|
upload_alpine_package
|
|
;;
|
|
*)
|
|
echo "Unknown package type '$GITEA_PACKAGE_TYPE'. Please check $"$GITEA_PACKAGE_TYPE" environment variable value." 1>&2
|
|
exit 1
|
|
esac
|
|
echo "Done"
|
|
}
|
|
|
|
function upload_generic_package {
|
|
assert_environment GITEA_PACKAGE_GENERIC_PACKAGE_NAME
|
|
assert_environment GITEA_PACKAGE_GENERIC_PACKAGE_VERSION
|
|
|
|
for f in $GITEA_PACKAGE_FILES; do
|
|
local filename=$(basename $f)
|
|
echo "Uploading file '$f' as generic package $GITEA_PACKAGE_OWNER/$GITEA_PACKAGE_GENERIC_PACKAGE_NAME/$GITEA_PACKAGE_GENERIC_PACKAGE_VERSION..."
|
|
gitea_api "/api/packages/$GITEA_PACKAGE_OWNER/generic/$GITEA_PACKAGE_GENERIC_PACKAGE_NAME/$GITEA_PACKAGE_GENERIC_PACKAGE_VERSION/$filename" \
|
|
-X PUT \
|
|
--upload-file "$f"
|
|
done
|
|
}
|
|
|
|
function upload_alpine_package {
|
|
assert_environment GITEA_PACKAGE_ALPINE_PACKAGE_BRANCH
|
|
assert_environment GITEA_PACKAGE_ALPINE_PACKAGE_REPOSITORY
|
|
|
|
for f in $GITEA_PACKAGE_FILES; do
|
|
local filename=$(basename $f)
|
|
echo "Uploading file '$f' as alpine package $GITEA_PACKAGE_OWNER/$GITEA_PACKAGE_ALPINE_PACKAGE_BRANCH/$GITEA_PACKAGE_ALPINE_PACKAGE_REPOSITORY..."
|
|
gitea_api "/api/packages/$GITEA_PACKAGE_OWNER/alpine/$GITEA_PACKAGE_ALPINE_PACKAGE_BRANCH/$GITEA_PACKAGE_ALPINE_PACKAGE_REPOSITORY" \
|
|
-X PUT \
|
|
--upload-file "$f"
|
|
done
|
|
}
|
|
|
|
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
|
|
upload_package
|
|
}
|
|
|
|
main |