Files

115 lines
2.7 KiB
Bash
Executable File

#!/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=<set>"
else
echo "GH_TOKEN=<unset>"
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