#!/usr/bin/env bash # Sane bash options set -o errexit set -o nounset set -o pipefail # Colors readonly RED='\033[0;31m' readonly ORANGE='\033[0;33m' readonly GREEN='\033[0;32m' readonly BLUE='\033[0;34m' readonly CYAN='\033[0;36m' readonly NC='\033[0m' # Gitea readonly ENDPOINT="https://git.dalembert.upmc.fr/api/v1" # ----------------- Logging commands ----------------------- # Print error and exit error() { printf "${RED}error${NC}: %s\\n" "$@" 1>&2 exit 1 } # Print warning warning() { printf "${ORANGE}warning${NC}: %s\\n" "$@" 1>&2 } # Print info info() { printf "${GREEN}info${NC}: %b\\n" "$@" 1>&2 } # Enter value enter() { printf "${BLUE}input${NC}: %b" "$@" 1>&2 local input_var='' read input_var printf "${input_var}" } # Check that command exists has_command() { command -v "$1" >/dev/null 2>&1 } # Check curl and jq to process API calls to gitea check_api_prerequisites() { if ! has_command curl; then error "curl not found, please install" fi if ! has_command jq; then error "jq not found, please install" fi } # ----------------- Gitea API commands ----------------------- get_gitea_token(){ if [ -f token ]; then read TOKEN < token else TOKEN="$(enter "gitea token: ")" fi readonly TOKEN info "gitea token: '${TOKEN}'" } gitea() { check_api_prerequisites if [ -z ${TOKEN+x} ]; then get_gitea_token fi local method="$1" local request="$2" curl -X "${request}" -H "Content-Type: application/json" -H "Authorization: token ${TOKEN}" "${ENDPOINT}/${method}" } # ----------------- Git commands ----------------------- # Set value of git config parameter set_git_config() { local param="$1" local value='' while ! [ -n "${value}" ]; do value="$(enter "new value for ${param}: ")" done \git config --global "${param}" "${value}" info "setting new value for ${param}: '$(git config "${param}")'" printf "${value}" } # Get value of git config parameter, set if unset get_git_config() { local param="$1" local value="$(git config "${param}")" if ! [ -n "${value}" ]; then warning "git ${param} is unset" value="$(set_git_config "${param}")" fi printf "${value}" } # Check git configuration and correct if necessary check_git_config() { if ! has_command git; then error "git not found, please install" fi readonly USER="$(get_git_config user.name)" readonly EMAIL="$(get_git_config user.email)" info "found git credentials:\\n - user.name: '${USER}'\\n - user.email: '${EMAIL}'" } # Initialize git repository init_repo() { check_git_config \git init } # Create required files create_tenet_file_tree() { local readme="README.md~" if ! [ -f "${readme}" ]; then local project_name="$(enter "project name: ")" local project_desc="$(enter "project short description: ")" cat << READMEMSG > "${readme}" # ${project_name} ${project_desc} READMEMSG info "wrote '${readme}'" else warning "found '${readme}', not touching" fi } # Create git repository create_repo() { local repo_name="$1" info "recursively creating directory '${repo_name}'" mkdir -p "${repo_name}" ( info "initializing repository '${repo_name}'" cd "${repo_name}" init_repo create_tenet_file_tree ) } # Print usage and exit usage() { true } main() { check_git_config create_tenet_file_tree get_gitea_token gitea /user GET } main "$@"