#!/usr/bin/env bash set -euf -o pipefail curp="$(cd "$(dirname "$0")" && pwd)" # unset all GITEA_* variables unset "${!GITEA_@}" [ -f "$curp/init.sh" ] && source "$curp/init.sh" source "${curp}/include/gitea.sh" # defaults : ${GITEA_ADMIN_USERNAME:=$USER} : ${GITEA_ADMIN_PASSWORD:=} # example ssh://git@gitea.example.com:3022 : ${GITEA_SERVER_PUSH_URL:=} ARGS=() pos_arg_flag=0 while [[ $# -gt 0 ]]; do if [ "${pos_arg_flag}" -eq "1" ]; then ARGS+=("$1") shift 1 continue fi case "$1" in --url | -u) GITEA_SERVER_URL="$2" shift 2 ;; --token | -t) GITEA_ADMIN_TOKEN="$2" shift 2 ;; --admin | -a) GITEA_ADMIN_USERNAME="$2" shift 2 ;; --password | -p) GITEA_ADMIN_PASSWORD="$2" shift 2 ;; --pushurl | -s) GITEA_SERVER_PUSH_URL="$2" shift 2 ;; --) pos_arg_flag=1 shift 1 ;; --*=*) set -- "$(cat - <<<"$1" | cut -d '=' -f1)" "$(cat - <<<"$1" | cut -d '=' -f2-)" "${@:3}" ;; *) ARGS+=("$1") shift 1 ;; esac done [ -z "${GITEA_SERVER_PUSH_URL}" ] && GITEA_SERVER_PUSH_URL="$(echo "${GITEA_SERVER_URL}" | perl -pe "s#(https?://)#\${1}${GITEA_ADMIN_USERNAME}:${GITEA_ADMIN_PASSWORD}@#")" GITEA_SERVER_API_URL="${GITEA_SERVER_URL}/api/v1" # init repos for repo in "${ARGS[@]}"; do repoPath="$(echo "$repo" | cut -d ':' -f1 | tr -d '[:space:]')" repoOrg="$(echo "$repo" | cut -d ':' -f2 | tr -d '[:space:]')" repoName="$(echo "$repo" | cut -d ':' -f3 | tr -d '[:space:]')" [ -z "$repoName" ] && repoName="$(basename "$repoPath" ".git")" if [ -z "$repoOrg" ]; then repoAPIEP="/user/repos" repoOwner="${GITEA_ADMIN_USERNAME}" UTYPE=user else gitea_create_org "$repoOrg" repoAPIEP="/org/$repoOrg/repos" repoOwner="$repoOrg" UTYPE=org fi gitea_create_repo "${repoOwner}" "${repoName}" "${UTYPE}" 1>&2 ( cd "$repoPath" git push "${GITEA_SERVER_PUSH_URL}/${repoOwner}/${repoName}.git" --mirror ) done