Skip to content

[Phase 3] chezmoi の詳細制御:CI対応・暗号化ファイル処理 #31

@yellow-seed

Description

@yellow-seed

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 の実行

  • initapply を分離
  • --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がマージされている

関連

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions