|
1 | 1 | import type { TemplateConfig } from "../domain.js" |
2 | 2 |
|
3 | 3 | const renderEntrypointAuthEnvBridge = (config: TemplateConfig): string => |
4 | | - String.raw`# 2) Ensure GitHub auth vars are available for SSH sessions if provided |
5 | | -if [[ -n "$GH_TOKEN" || -n "$GITHUB_TOKEN" ]]; then |
6 | | - EFFECTIVE_GITHUB_TOKEN="$GITHUB_TOKEN" |
7 | | - if [[ -z "$EFFECTIVE_GITHUB_TOKEN" ]]; then |
8 | | - EFFECTIVE_GITHUB_TOKEN="$GH_TOKEN" |
| 4 | + String.raw`# 2) Ensure GitHub auth vars are available for SSH sessions. |
| 5 | +# Prefer a label-selected token (same selection model as clone/create) when present. |
| 6 | +RESOLVED_AUTH_LABEL="" |
| 7 | +AUTH_LABEL_RAW="${"${"}GIT_AUTH_LABEL:-${"${"}GITHUB_AUTH_LABEL:-}}" |
| 8 | +
|
| 9 | +if [[ -z "$AUTH_LABEL_RAW" && "$REPO_URL" == https://github.com/* ]]; then |
| 10 | + AUTH_LABEL_RAW="$(printf "%s" "$REPO_URL" | sed -E 's#^https://github.com/##; s#[.]git$##; s#/*$##' | cut -d/ -f1)" |
| 11 | +fi |
| 12 | +
|
| 13 | +if [[ -n "$AUTH_LABEL_RAW" ]]; then |
| 14 | + RESOLVED_AUTH_LABEL="$(printf "%s" "$AUTH_LABEL_RAW" | tr '[:lower:]' '[:upper:]' | sed -E 's/[^A-Z0-9]+/_/g; s/^_+//; s/_+$//')" |
| 15 | + if [[ "$RESOLVED_AUTH_LABEL" == "DEFAULT" ]]; then |
| 16 | + RESOLVED_AUTH_LABEL="" |
9 | 17 | fi |
| 18 | +fi |
10 | 19 |
|
11 | | - EFFECTIVE_GH_TOKEN="$GH_TOKEN" |
12 | | - if [[ -z "$EFFECTIVE_GH_TOKEN" ]]; then |
13 | | - EFFECTIVE_GH_TOKEN="$EFFECTIVE_GITHUB_TOKEN" |
| 20 | +EFFECTIVE_GITHUB_TOKEN="$GITHUB_TOKEN" |
| 21 | +if [[ -z "$EFFECTIVE_GITHUB_TOKEN" ]]; then |
| 22 | + EFFECTIVE_GITHUB_TOKEN="$GH_TOKEN" |
| 23 | +fi |
| 24 | +if [[ -z "$EFFECTIVE_GITHUB_TOKEN" ]]; then |
| 25 | + EFFECTIVE_GITHUB_TOKEN="$GIT_AUTH_TOKEN" |
| 26 | +fi |
| 27 | +
|
| 28 | +if [[ -n "$RESOLVED_AUTH_LABEL" ]]; then |
| 29 | + LABELED_GIT_TOKEN_KEY="GIT_AUTH_TOKEN__$RESOLVED_AUTH_LABEL" |
| 30 | + LABELED_GITHUB_TOKEN_KEY="GITHUB_TOKEN__$RESOLVED_AUTH_LABEL" |
| 31 | + LABELED_GH_TOKEN_KEY="GH_TOKEN__$RESOLVED_AUTH_LABEL" |
| 32 | +
|
| 33 | + LABELED_GIT_TOKEN="${"${"}!LABELED_GIT_TOKEN_KEY-}" |
| 34 | + LABELED_GITHUB_TOKEN="${"${"}!LABELED_GITHUB_TOKEN_KEY-}" |
| 35 | + LABELED_GH_TOKEN="${"${"}!LABELED_GH_TOKEN_KEY-}" |
| 36 | +
|
| 37 | + if [[ -n "$LABELED_GIT_TOKEN" ]]; then |
| 38 | + EFFECTIVE_GITHUB_TOKEN="$LABELED_GIT_TOKEN" |
| 39 | + elif [[ -n "$LABELED_GITHUB_TOKEN" ]]; then |
| 40 | + EFFECTIVE_GITHUB_TOKEN="$LABELED_GITHUB_TOKEN" |
| 41 | + elif [[ -n "$LABELED_GH_TOKEN" ]]; then |
| 42 | + EFFECTIVE_GITHUB_TOKEN="$LABELED_GH_TOKEN" |
14 | 43 | fi |
| 44 | +fi |
| 45 | +
|
| 46 | +EFFECTIVE_GH_TOKEN="$EFFECTIVE_GITHUB_TOKEN" |
15 | 47 |
|
| 48 | +if [[ -n "$EFFECTIVE_GH_TOKEN" ]]; then |
16 | 49 | printf "export GH_TOKEN=%q\n" "$EFFECTIVE_GH_TOKEN" > /etc/profile.d/gh-token.sh |
17 | 50 | printf "export GITHUB_TOKEN=%q\n" "$EFFECTIVE_GITHUB_TOKEN" >> /etc/profile.d/gh-token.sh |
| 51 | + printf "export GIT_AUTH_TOKEN=%q\n" "$EFFECTIVE_GITHUB_TOKEN" >> /etc/profile.d/gh-token.sh |
18 | 52 | chmod 0644 /etc/profile.d/gh-token.sh |
19 | 53 | docker_git_upsert_ssh_env "GH_TOKEN" "$EFFECTIVE_GH_TOKEN" |
20 | 54 | docker_git_upsert_ssh_env "GITHUB_TOKEN" "$EFFECTIVE_GITHUB_TOKEN" |
| 55 | + docker_git_upsert_ssh_env "GIT_AUTH_TOKEN" "$EFFECTIVE_GITHUB_TOKEN" |
21 | 56 |
|
22 | | - SAFE_GH_TOKEN="$(printf "%q" "$GH_TOKEN")" |
| 57 | + SAFE_GH_TOKEN="$(printf "%q" "$EFFECTIVE_GH_TOKEN")" |
23 | 58 | # Keep git+https auth in sync with gh auth so push/pull works without manual setup. |
24 | 59 | su - ${config.sshUser} -c "GH_TOKEN=$SAFE_GH_TOKEN gh auth setup-git --hostname github.com --force" || true |
25 | 60 |
|
@@ -47,9 +82,9 @@ if [[ "$#" -lt 1 || "$1" != "get" ]]; then |
47 | 82 | exit 0 |
48 | 83 | fi |
49 | 84 |
|
50 | | -token="$GITHUB_TOKEN" |
| 85 | +token="${"${"}GITHUB_TOKEN:-}" |
51 | 86 | if [[ -z "$token" ]]; then |
52 | | - token="$GH_TOKEN" |
| 87 | + token="${"${"}GH_TOKEN:-}" |
53 | 88 | fi |
54 | 89 |
|
55 | 90 | if [[ -z "$token" ]]; then |
|
0 commit comments