#!/bin/bash # detect-platform.sh - Detect git platform (Gitea or GitHub) for current repo # Usage: source detect-platform.sh && detect_platform # or: ./detect-platform.sh (prints platform name) detect_platform() { local remote_url remote_url=$(git remote get-url origin 2>/dev/null) if [[ -z "$remote_url" ]]; then echo "error: not a git repository or no origin remote" >&2 return 1 fi # Check for GitHub if [[ "$remote_url" == *"github.com"* ]]; then PLATFORM="github" export PLATFORM echo "github" return 0 fi # Check for common Gitea indicators # Gitea URLs typically don't contain github.com, gitlab.com, bitbucket.org if [[ "$remote_url" != *"gitlab.com"* ]] && \ [[ "$remote_url" != *"bitbucket.org"* ]]; then # Assume Gitea for self-hosted repos PLATFORM="gitea" export PLATFORM echo "gitea" return 0 fi PLATFORM="unknown" export PLATFORM echo "unknown" return 1 } get_repo_info() { local remote_url remote_url=$(git remote get-url origin 2>/dev/null) if [[ -z "$remote_url" ]]; then echo "error: not a git repository or no origin remote" >&2 return 1 fi # Extract owner/repo from URL # Handles: git@host:owner/repo.git, https://host/owner/repo.git, https://host/owner/repo local repo_path if [[ "$remote_url" == git@* ]]; then repo_path="${remote_url#*:}" else repo_path="${remote_url#*://}" repo_path="${repo_path#*/}" fi # Remove .git suffix if present repo_path="${repo_path%.git}" echo "$repo_path" } get_repo_owner() { local repo_info repo_info=$(get_repo_info) echo "${repo_info%%/*}" } get_repo_name() { local repo_info repo_info=$(get_repo_info) echo "${repo_info##*/}" } get_remote_host() { local remote_url remote_url=$(git remote get-url origin 2>/dev/null || true) if [[ -z "$remote_url" ]]; then return 1 fi if [[ "$remote_url" =~ ^https?://([^/]+)/ ]]; then echo "${BASH_REMATCH[1]}" return 0 fi if [[ "$remote_url" =~ ^git@([^:]+): ]]; then echo "${BASH_REMATCH[1]}" return 0 fi return 1 } # Resolve a Gitea API token for the given host. # Priority: Mosaic credential loader → GITEA_TOKEN env → ~/.git-credentials get_gitea_token() { local host="$1" local script_dir script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" local cred_loader="$script_dir/../_lib/credentials.sh" # 1. Mosaic credential loader (host → service mapping, run in subshell to avoid polluting env) if [[ -f "$cred_loader" ]]; then local token token=$( source "$cred_loader" case "$host" in git.mosaicstack.dev) load_credentials gitea-mosaicstack 2>/dev/null ;; git.uscllc.com) load_credentials gitea-usc 2>/dev/null ;; *) for svc in gitea-mosaicstack gitea-usc; do load_credentials "$svc" 2>/dev/null || continue [[ "${GITEA_URL:-}" == *"$host"* ]] && break unset GITEA_TOKEN GITEA_URL done ;; esac echo "${GITEA_TOKEN:-}" ) if [[ -n "$token" ]]; then echo "$token" return 0 fi fi # 2. GITEA_TOKEN env var (may be set by caller) if [[ -n "${GITEA_TOKEN:-}" ]]; then echo "$GITEA_TOKEN" return 0 fi # 3. ~/.git-credentials file local creds="$HOME/.git-credentials" if [[ -f "$creds" ]]; then local token token=$(grep -F "$host" "$creds" 2>/dev/null | sed -n 's#https\?://[^@]*:\([^@/]*\)@.*#\1#p' | head -n 1) if [[ -n "$token" ]]; then echo "$token" return 0 fi fi return 1 } # If script is run directly (not sourced), output the platform if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then detect_platform fi