mcpField
S
shunk031-herdr-chezmoi-apply

shunk031-herdr-chezmoi-apply

github.com/shunk031クラウド・DevOps030 回インストール3 日前に更新
リポジトリ

shunk031-herdr-chezmoi-apply について

Herdr と chezmoi を使い、ローカルまたは保存済みマシンに dotfiles を適用する手順スキルです。Git の確認、順次更新と適用、エラー対応、対象ごとの結果報告を定めています。

主な機能

  1. 01Local とプロファイル対象の選択
  2. 02更新前の Git 状態確認
  3. 03公開ソースと非公開ソースの個別適用
  4. 04一般的な適用エラーへの対応
  5. 05対象ごとの結果報告

活用シーン

  1. 01複数の Herdr プロファイルで dotfiles を更新
  2. 02公開・非公開設定の適用
  3. 03chezmoi apply の失敗を診断

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/shunk031/skills --skill shunk031-herdr-chezmoi-apply

インストール後、Claude Code で/shunk031-herdr-chezmoi-applyを入力して読み込まれたか確認します。

詳細

メモ

この SKILL.md を読んだ後、🏠 I read shunk031-herdr-chezmoi-apply. と言ってください。

Herdr を通じてドットファイルを適用する

環境の確認と CLI の構文には、herdr スキルを使用してください。herdr machine list --json から Local とすべてのプロファイルを選択するか、ユーザーが指定したターゲットのみを選択してください。SSH コマンドを直接実行する場合は各プロファイルの SSH target を使用し、Local ではローカルシェルを使用してください。ペインのアクティビティを基準にターゲットを選択しないでください。無効または到達不能なプロファイルはスキップし、同じ宛先への重複適用を避けてください。

ツール呼び出しごとにコマンドを 1 つ実行してください。次のコマンドを選ぶ前に、出力と終了ステータスを確認してください。ツールの結果を転送する際は、出力と併せて終了ステータスも保持してください。たとえば、exec_command の exit_code と output の両方を保持します。コマンドがまだ実行中の場合は、完了を待って最終結果を確認してください。終了ステータスがない場合、その結果は未検証であり、成功ではありません。ターゲットは順番に処理し、ワークフローをシェルチェーン、ループ、スクリプトにまとめないでください。このスキルを編集しても、その実行が許可されるわけではありません。

まず Git

chezmoi の各呼び出しで source-path を確認して既存のソースリポジトリを両方特定し、別のコマンドで git -C <source-path> rev-parse --show-toplevel を実行してください。.chezmoiroot によってソースの状態がリポジトリのルートより下に置かれている場合があります。セットアップが見つからない場合は、初期化せずにスキップしてください。

  1. 各ソースが通常の main チェックアウトであり、アップストリームが設定され、未完了の Git 操作がないことを確認してください。git status --short --branch を確認し、ステージ済みと未ステージの差分を調べてください。破棄する前に、各パス、影響を受ける設定または動作、追加・削除・変更された内容を記録してください。変更の説明に十分な文脈を残しつつ、秘密の値は伏せてください。変更されたすべての行を伏せてはいけません。パス、行数、ハンクヘッダーだけでは変更の概要になりません。
  2. ユーザーは、そのチェックアウト内の追跡対象の未コミット変更をすべて破棄することを許可しています。確認済みのパスを git restore --source=HEAD --staged --worktree -- <path> で復元し、別のコマンドでステータスを確認してください。未追跡ファイル、無視対象ファイル、ローカルコミット、その他のワークツリーは保持してください。git clean や stash は使用しないでください。変更を保持するようユーザーから具体的な指示がある場合は、その指示を優先してください。
  3. public をプルして結果を確認してから、private をプルしてください。ユーザーの Git 設定によって rebase や autostash が有効にならないように、各リポジトリで以下のコマンドを個別に使用してください。
ssh <target> 'git -C <repository> pull --ff-only --no-rebase --no-autostash'

両方のプルが成功する必要があります。適用に進む前に、プル後の各 Git ステータスを確認してください。予期しない編集が現れた場合、保持される未追跡ファイルが適用対象のソース状態に含まれる場合、または更新にローカルコミット履歴の変更が必要な場合は、そのターゲットでの作業を中止してください。

個別に適用する

chezmoi status または機密情報を伏せた差分を使って、各適用計画を確認してください。説明のつかない宛先側の編集や確認プロンプトがある場合は中止し、上書きを強制しないでください。

ターゲットで既存の gh 認証が利用可能であることを、トークンを出力せずに確認してください。public の適用を実行してください。

ssh <target> 'GITHUB_TOKEN="$(gh auth token)" chezmoi apply'

結果を確認してください。成功した場合にのみ、private の適用を実行してください。chezmoi-private は非対話型 SSH では利用できないエイリアスの場合があります。その場合は、設定済みのソース/設定を特定し、明示的に同等のコマンドを使用してください。一般的なパスの場合は次のとおりです。

ssh <target> 'GITHUB_TOKEN="$(gh auth token)" chezmoi --source "$HOME/.local/share/chezmoi-private" --config "$HOME/.config/chezmoi-private/chezmoi.yaml" apply'

Local の場合は、引用符の内側のコマンドを直接実行してください。トークンの検索はターゲット上で行われ、その呼び出しに限定されます。マシン間でトークンをコピーしたり、自動的にアカウントを切り替えたり、認証情報の値を出力したりしないでください。

停止した apply の診断

再試行する前に、失敗したコマンドを特定してください。gitHubLatestReleaseAssetURL が GitHub API の 403 レート制限で失敗した場合は、公開 apply で上記のトークンを適用したコマンドを使用したか確認してください。匿名ユーザーのレート制限を理由に、外部テンプレートを変更してはいけません。

mise install が固定バージョンのツールを接続リセットでダウンロードできない場合は、報告された URL に直接アクセスし、対象で利用可能なプロキシ経由でもテストしてください。プロキシ経由でのみ成功する場合は、失敗した mise install に対して HTTP_PROXY と HTTPS_PROXY の適用範囲を限定し、ツールのインストール後に apply を再試行してください。固定バージョンのツールとそのインストーラーは変更しないでください。

スキルの調整中に apply の出力が止まった場合は、中断する前に子プロセスを調べてください。skills update がプライベートな [email protected]: URL のクローンで停止しており、SSH に到達できない場合は、すでに認証済みの gh アカウントでそのリポジトリへの HTTPS アクセスを確認してください。再試行時は、そのアカウントの GH_TOKEN と Git URL の書き換えを GIT_CONFIG_COUNT=1、GIT_CONFIG_KEY_0=url.https://github.com/.insteadOf、[email protected]: とともに apply の呼び出しに適用してください。グローバルな Git 設定を変更したり、ユーザーの指示なしに別のアカウントを選択したりしないでください。HTTPS アクセスが利用できない場合は中止してください。

報告

失敗した場合は、その対象の残りの手順を中止し、他の対象の処理を続けてください。再試行する前にエラーと現在の状態を調べ、原因を修正した後に限り、1 回だけ再試行してください。中断された apply をむやみに繰り返さないでください。

各対象について、公開/プライベートの更新と apply の結果を、失敗や未実行の手順も含めて報告してください。その後、削除前に記録した要約から、次の形式の箇条書きを示してください。<target> / <public or private>: Discarded <change summary> in <path>。保持したパスと残りの作業についても記載してください。シークレットの値やプライベートな差分の生データは決して含めないでください。

コメント