-
Notifications
You must be signed in to change notification settings - Fork 0
Closed
Description
Parent Issue: #28
Depends on: Phase 1 issue
目的
OS検出に基づいて適切なインストールスクリプトを自動実行し、環境のセットアップを完全自動化する。
実装内容
1. macOS 初期化処理
-
initialize_os_macos()関数の実装install/macos/common/brew.shの呼び出しinstall/macos/common/brewfile.shの呼び出し- スクリプトの存在確認とエラーハンドリング
- Apple Silicon/Intel の判別と PATH 設定
if [[ $(arch) == "arm64" ]]; then eval "$(/opt/homebrew/bin/brew shellenv)" elif [[ $(arch) == "i386" ]]; then eval "$(/usr/local/bin/brew shellenv)" fi
2. Linux 初期化処理
-
initialize_os_linux()関数の実装- Ubuntu用のパッケージマネージャースクリプト作成
install/ubuntu/common/配下のスクリプト実装- apt/snap などのセットアップ
3. CI/非TTY環境の検出
-
is_ci()関数の実装CI環境変数のチェック
-
is_tty()/is_not_tty()関数の実装[ -t 0 ]での TTY 判定
-
is_ci_or_not_tty()関数の実装
4. sudo 権限管理
-
keepalive_sudo_linux()関数の実装sudo -v while true; do sudo -n true sleep 60 kill -0 "$$" || exit done 2>/dev/null &
-
keepalive_sudo_macos()関数の実装- Keychain を使用したパスワード管理
SUDO_ASKPASSの設定
-
keepalive_sudo()ラッパー関数- OS別の処理分岐
- CI/非TTY環境ではスキップする処理
5. initialize_os_env() の完成
- Phase 1 で作成した骨組みに実装を追加
- macOS/Linux それぞれの初期化関数を呼び出し
実装後の動作フロー
setup.sh 実行
↓
OS検出(get_os_type)
↓
sudo権限管理の開始(keepalive_sudo)※CI/非TTY以外
↓
initialize_os_env()
├─ macOS の場合
│ ├─ brew.sh 実行(Homebrew インストール)
│ ├─ brew shellenv 評価(PATH設定)
│ └─ brewfile.sh 実行(パッケージインストール)
└─ Linux の場合
└─ install/ubuntu/common/*.sh 実行
↓
run_chezmoi()
↓
完了
テスト
- macOS での動作確認
- Homebrew がインストールされること
- Brewfile のパッケージがインストールされること
- Apple Silicon/Intel 両方での PATH 設定確認
- Linux(Ubuntu)での動作確認
- CI環境での動作確認(sudo スキップ)
- 非TTY環境での動作確認
Ubuntu用スクリプトの作成
install/ubuntu/common/ 配下に以下を作成:
-
apt.sh: apt の更新とベースパッケージのインストール - 必要に応じて他のスクリプト
完了条件
- すべてのチェックボックスが完了
- macOS/Linux 両方でワンコマンドセットアップが完了
- CI環境でエラーなく実行できる
- テストが通過
- PRがマージされている
関連
- Parent: setup.sh を1スクリプトで完結する包括的なセットアップスクリプトに改善 #28
- Depends on: Phase 1
- Next: Phase 3
Metadata
Metadata
Assignees
Labels
No labels