#!/usr/bin/env bash gh_env_workspace_root() { if [[ -n "${CXGH_WORKSPACE_ROOT:-}" ]]; then printf '%s\n' "$CXGH_WORKSPACE_ROOT" return 0 fi if git rev-parse --show-toplevel >/dev/null 2>&1; then git rev-parse --show-toplevel return 0 fi pwd } gh_env_prepare() { local workspace_root="${1:-}" if [[ -z "$workspace_root" ]]; then workspace_root="$(gh_env_workspace_root)" fi workspace_root="$(cd "$workspace_root" && pwd)" local token="${GH_TOKEN:-${GITHUB_TOKEN:-}}" if [[ -n "$token" ]]; then export GH_TOKEN="$token" export GITHUB_TOKEN="${GITHUB_TOKEN:-$token}" fi export GH_PROMPT_DISABLED="${GH_PROMPT_DISABLED:-1}" export GH_NO_UPDATE_NOTIFIER="${GH_NO_UPDATE_NOTIFIER:-1}" export XDG_CONFIG_HOME="${XDG_CONFIG_HOME:-$workspace_root/.xdg-config}" export XDG_CACHE_HOME="${XDG_CACHE_HOME:-$workspace_root/.xdg-cache}" export XDG_STATE_HOME="${XDG_STATE_HOME:-$workspace_root/.xdg-state}" export GH_CONFIG_DIR="${GH_CONFIG_DIR:-$workspace_root/.gh}" mkdir -p "$XDG_CONFIG_HOME" "$XDG_CACHE_HOME" "$XDG_STATE_HOME" "$GH_CONFIG_DIR" } gh_env_require_token() { local token="${GH_TOKEN:-${GITHUB_TOKEN:-}}" if [[ -z "$token" ]]; then echo "[错误] 未设置 GH_TOKEN 或 GITHUB_TOKEN" >&2 return 1 fi } gh_env_rest_api_base_url() { local host="${1:-${GH_HOST:-github.com}}" if [[ "$host" == "github.com" ]]; then printf '%s\n' "https://api.github.com" return 0 fi printf 'https://%s/api/v3\n' "$host" } gh_env_graphql_api_url() { local host="${1:-${GH_HOST:-github.com}}" if [[ "$host" == "github.com" ]]; then printf '%s\n' "https://api.github.com/graphql" return 0 fi printf 'https://%s/api/graphql\n' "$host" } gh_env_print_exports() { printf 'GH_PROMPT_DISABLED=%q\n' "$GH_PROMPT_DISABLED" printf 'GH_NO_UPDATE_NOTIFIER=%q\n' "$GH_NO_UPDATE_NOTIFIER" printf 'XDG_CONFIG_HOME=%q\n' "$XDG_CONFIG_HOME" printf 'XDG_CACHE_HOME=%q\n' "$XDG_CACHE_HOME" printf 'XDG_STATE_HOME=%q\n' "$XDG_STATE_HOME" printf 'GH_CONFIG_DIR=%q\n' "$GH_CONFIG_DIR" if [[ -n "${GH_HOST:-}" ]]; then printf 'GH_HOST=%q\n' "$GH_HOST" fi if [[ -n "${GH_TOKEN:-${GITHUB_TOKEN:-}}" ]]; then echo "GH_TOKEN=" else echo "GH_TOKEN=" fi } gh_env_usage() { cat <<'EOF' Usage: bash scripts/github/_gh_env.sh --print-root bash scripts/github/_gh_env.sh --print-env [workspace-root] EOF } if [[ "${BASH_SOURCE[0]}" == "$0" ]]; then set -euo pipefail case "${1:-}" in --print-root) gh_env_workspace_root ;; --print-env) gh_env_prepare "${2:-}" gh_env_print_exports ;; -h|--help|"") gh_env_usage ;; *) echo "[错误] 未知参数: $1" >&2 gh_env_usage >&2 exit 1 ;; esac fi