@cocorograph/hub-agent 0.5.20 → 0.5.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/scripts/install.sh +48 -9
package/package.json
CHANGED
package/scripts/install.sh
CHANGED
|
@@ -32,18 +32,40 @@ color_err() { printf "\033[1;31m✗ %s\033[0m\n" "$1" >&2; }
|
|
|
32
32
|
|
|
33
33
|
present() { command -v "$1" >/dev/null 2>&1; }
|
|
34
34
|
|
|
35
|
+
# 現在 PATH にある brew が、このユーザーで書き込み可能か判定する。
|
|
36
|
+
# 「brew はあるが Cellar が他ユーザー所有で書き込み不可」というケースを検知して
|
|
37
|
+
# user-local Homebrew にフォールバックするための判定関数。
|
|
38
|
+
_existing_brew_writable() {
|
|
39
|
+
local prefix
|
|
40
|
+
prefix="$(brew --prefix 2>/dev/null || echo '')"
|
|
41
|
+
[[ -z "$prefix" ]] && return 1
|
|
42
|
+
# Cellar / opt が書き込み可能か(または未作成でも prefix 自体が書き込み可能か)
|
|
43
|
+
if [[ -w "$prefix/Cellar" ]] || ( [[ ! -e "$prefix/Cellar" ]] && [[ -w "$prefix" ]] ); then
|
|
44
|
+
return 0
|
|
45
|
+
fi
|
|
46
|
+
return 1
|
|
47
|
+
}
|
|
48
|
+
|
|
35
49
|
ensure_brew() {
|
|
36
50
|
if [[ "$(uname)" != "Darwin" ]]; then return 0; fi
|
|
51
|
+
|
|
52
|
+
# 既に brew がインストールされている場合の判定:
|
|
53
|
+
# - ユーザーが書き込み可能 → そのまま使用(system / user-local どちらでも OK)
|
|
54
|
+
# - 書き込み不可(他ユーザー所有の brew が居る)→ $HOME/homebrew に並列で user-local 化
|
|
37
55
|
if present brew; then
|
|
38
|
-
|
|
39
|
-
|
|
56
|
+
if _existing_brew_writable; then
|
|
57
|
+
color_ok "brew already installed and writable ($(brew --prefix))"
|
|
58
|
+
persist_brew_shellenv
|
|
59
|
+
return 0
|
|
60
|
+
fi
|
|
61
|
+
color_warn "既存 brew ($(brew --prefix 2>/dev/null)) は書き込み不可 → \$HOME/homebrew にユーザーローカル Homebrew を並列インストール"
|
|
62
|
+
_install_user_local_brew
|
|
40
63
|
return 0
|
|
41
64
|
fi
|
|
42
65
|
|
|
43
|
-
#
|
|
66
|
+
# brew コマンドが PATH にない場合の判定:
|
|
44
67
|
# - 環境変数 HUB_AGENT_USER_BREW=1 で明示強制
|
|
45
68
|
# - sudo がパスワードなしで通らない = 管理者ではない可能性が高いと判定
|
|
46
|
-
# user-mode では $HOME/homebrew にユーザーローカルインストール(sudo 不要)。
|
|
47
69
|
local use_user_mode=0
|
|
48
70
|
if [[ "${HUB_AGENT_USER_BREW:-0}" == "1" ]]; then
|
|
49
71
|
use_user_mode=1
|
|
@@ -54,11 +76,7 @@ ensure_brew() {
|
|
|
54
76
|
fi
|
|
55
77
|
|
|
56
78
|
if (( use_user_mode == 1 )); then
|
|
57
|
-
|
|
58
|
-
mkdir -p "$HOME/homebrew"
|
|
59
|
-
curl -L https://github.com/Homebrew/brew/tarball/master | tar xz --strip 1 -C "$HOME/homebrew"
|
|
60
|
-
export PATH="$HOME/homebrew/bin:$PATH"
|
|
61
|
-
persist_user_brew_shellenv
|
|
79
|
+
_install_user_local_brew
|
|
62
80
|
else
|
|
63
81
|
color_step "Homebrew をシステムインストール"
|
|
64
82
|
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
|
|
@@ -71,11 +89,32 @@ ensure_brew() {
|
|
|
71
89
|
present brew || { color_err "brew install failed"; exit 1; }
|
|
72
90
|
}
|
|
73
91
|
|
|
92
|
+
# user-local Homebrew のインストール本体(重複排除のため関数化)。
|
|
93
|
+
# 既に $HOME/homebrew が展開済みなら再展開せず PATH/shellenv だけ整える。
|
|
94
|
+
_install_user_local_brew() {
|
|
95
|
+
if [[ -x "$HOME/homebrew/bin/brew" ]]; then
|
|
96
|
+
color_ok "\$HOME/homebrew は既に展開済み"
|
|
97
|
+
else
|
|
98
|
+
color_step "Homebrew をユーザーローカルインストール (\$HOME/homebrew)"
|
|
99
|
+
mkdir -p "$HOME/homebrew"
|
|
100
|
+
curl -L https://github.com/Homebrew/brew/tarball/master | tar xz --strip 1 -C "$HOME/homebrew"
|
|
101
|
+
fi
|
|
102
|
+
# PATH を user-local 優先で並べる(既存 /usr/local/bin/brew より先)
|
|
103
|
+
export PATH="$HOME/homebrew/bin:$PATH"
|
|
104
|
+
hash -r 2>/dev/null || true # bash のコマンドキャッシュをクリア
|
|
105
|
+
persist_user_brew_shellenv
|
|
106
|
+
}
|
|
107
|
+
|
|
74
108
|
# Apple Silicon Mac で brew のパスを zsh / bash 永続化する。既に追記済みなら no-op。
|
|
75
109
|
# `eval "$(/opt/homebrew/bin/brew shellenv)"` を書くことで、Homebrew が用意する
|
|
76
110
|
# HOMEBREW_PREFIX / PATH / MANPATH / INFOPATH すべてを新規シェルで自動セットする。
|
|
77
111
|
persist_brew_shellenv() {
|
|
78
112
|
local brew_bin=""
|
|
113
|
+
# $HOME/homebrew が PATH 上で優先されているなら、user-local 側で永続化する
|
|
114
|
+
if [[ -x "$HOME/homebrew/bin/brew" ]] && [[ "$(command -v brew)" == "$HOME/homebrew/bin/brew" ]]; then
|
|
115
|
+
persist_user_brew_shellenv
|
|
116
|
+
return 0
|
|
117
|
+
fi
|
|
79
118
|
if [[ -x /opt/homebrew/bin/brew ]]; then
|
|
80
119
|
brew_bin="/opt/homebrew/bin/brew"
|
|
81
120
|
elif [[ -x /usr/local/bin/brew ]]; then
|