From daa698715981e542826e854bd51d386b2f69d4df Mon Sep 17 00:00:00 2001 From: William Petit Date: Mon, 13 May 2024 09:16:20 +0200 Subject: [PATCH] feat: add gitea-package.sh script --- resources/com/cadoles/gitea/gitea-package.sh | 161 +++++++++++++++++++ 1 file changed, 161 insertions(+) create mode 100644 resources/com/cadoles/gitea/gitea-package.sh diff --git a/resources/com/cadoles/gitea/gitea-package.sh b/resources/com/cadoles/gitea/gitea-package.sh new file mode 100644 index 0000000..f369d1b --- /dev/null +++ b/resources/com/cadoles/gitea/gitea-package.sh @@ -0,0 +1,161 @@ +#!/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 \ No newline at end of file