-
Notifications
You must be signed in to change notification settings - Fork 0
Open
Description
Parent Issue: #28
Depends on: Phase 2 issue
目的
chezmoi の実行をより詳細に制御し、CI環境や暗号化ファイルに対応する。
実装内容
1. chezmoi バイナリの明示的な管理
-
$HOME/.local/binディレクトリの作成 - chezmoi バイナリのダウンロードと配置
local bin_dir="${HOME}/.local/bin" export PATH="${PATH}:${bin_dir}" sh -c "$(curl -fsLS get.chezmoi.io)" -- -b "${bin_dir}"
- PATH への追加
2. chezmoi init オプションの拡張
-
--branchオプションの追加BRANCH_NAME環境変数の使用
-
--use-builtin-gitオプションの追加- Git がインストールされていない環境でも動作
-
--forceオプションの追加- 既存の設定を上書き
3. CI/非TTY環境対応
-
--no-ttyオプションの条件付き使用local no_tty_option="" if is_ci_or_not_tty; then no_tty_option="--no-tty" fi chezmoi init ${no_tty_option} ...
4. 暗号化ファイルの処理
- CI/非TTY環境で暗号化ファイルを除外
if is_ci_or_not_tty; then find "$(chezmoi source-path)" -type f -name "encrypted_*" -exec rm -fv {} + fi
- age コマンドが TTY を必要とする問題への対応
5. chezmoi apply の実行
-
initとapplyを分離 -
--no-ttyオプションの適用
6. run_chezmoi() 関数の完全な実装
Phase 1 で作成した骨組みを以下のように拡張:
function run_chezmoi() {
local bin_dir="${HOME}/.local/bin"
export PATH="${PATH}:${bin_dir}"
# chezmoi のダウンロード
sh -c "$(curl -fsLS get.chezmoi.io)" -- -b "${bin_dir}"
local chezmoi_cmd="${bin_dir}/chezmoi"
local no_tty_option=""
if is_ci_or_not_tty; then
no_tty_option="--no-tty"
fi
# init
"${chezmoi_cmd}" init "${DOTFILES_REPO}" \
--force \
--branch "${BRANCH_NAME}" \
--use-builtin-git true \
${no_tty_option}
# 暗号化ファイルの除外
if is_ci_or_not_tty; then
find "$(${chezmoi_cmd} source-path)" -type f -name "encrypted_*" -exec rm -fv {} +
fi
# PATH の追加
export PATH="${PATH}:${HOME}/.local/bin"
# apply
"${chezmoi_cmd}" apply ${no_tty_option}
}テスト
- ローカル環境(TTY)での動作確認
- CI環境での動作確認
--no-ttyオプションが正しく適用される- 暗号化ファイルが除外される
- 異なるブランチの指定テスト
- 既存の chezmoi 設定がある状態での
--forceテスト
GitHub Actions での自動テスト
-
.github/workflows/test-setup.ymlの作成または更新- macOS runner でのテスト
- Ubuntu runner でのテスト
完了条件
- すべてのチェックボックスが完了
- CI環境で正常に動作
- 暗号化ファイルの処理が適切
- ブランチ指定が機能
- テストが通過
- PRがマージされている
関連
- Parent: setup.sh を1スクリプトで完結する包括的なセットアップスクリプトに改善 #28
- Depends on: Phase 2
- Next: Phase 4
Metadata
Metadata
Assignees
Labels
No labels