#!/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