115 lines
2.7 KiB
Bash
Executable File
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
|