ship-it
PRの作成とマージを自動化します。コミットされていない変更をコミットし、mainをターゲットとするPRを作成し、CI/CDチェックの完了を待機してから、成功時にスクワッシュマージを実行します。「ship it」「ship this」「create and merge pr」「ship pr」「merge to main」のトリガーに対応しています。
description の原文を見る
Automate PR creation and merging. Commits uncommitted changes, creates a PR targeting main, waits for CI/CD checks, and squash merges on success. Triggers on: ship it, ship this, create and merge pr, ship pr, merge to main.
SKILL.md 本文
Ship It
PR のフルライフサイクルを自動化します:変更をコミット、PR を作成、CI/CD を待機、main へのスクワッシュマージを実行します。
ワークフロー
各ステップを順番に実行します。いずれかのステップが失敗した場合は停止し、ユーザーに報告します。
ステップ 1:飛行前チェック
他の処理を実行する前に、これらのチェックを実行します。いずれかが失敗した場合は停止し、ユーザーに理由を伝えます。
- ブランチチェック:
git branch --show-currentを実行します。デタッチ HEAD 状態の場合は停止し、名前付きブランチをチェックアウトするようユーザーに指示します。 - リモートチェック:
git remote -vを実行します。リモートが設定されていない場合は停止し、ユーザーにリモートを追加するよう指示します。 - GitHub CLI チェック:
gh auth statusを実行します。認証されていない場合は停止し、ユーザーにgh auth loginを実行するよう指示します。
後で使用するため、現在のブランチ名を保存します。
ステップ 2:コミットされていない変更を処理
git status --porcelainを実行して、コミットされていない変更(ステージ済み、未ステージ、未追跡)をチェックします。- 作業ツリーがクリーン(出力がない)かつ
main上にない場合は、ステップ 3 をスキップします。作業ツリーがクリーン かつmain上にある場合は停止し、シップするものがないことをユーザーに伝えます。 - 変更がある場合は、変更されたファイルのリストを表示し、ユーザーに以下を尋ねます:
- A) すべての変更を含める — 表示されたものをすべてステージします
- B) 個別にファイルを選択 — 番号付きリストを表示し、ユーザーに含めるファイルを選択させます(例:「1, 3, 5」)
- C) キャンセル — ワークフロー全体を中止します
git add <file1> <file2> ...を使用して、明示的なファイルパスで選択したファイルをステージします。git add -Aやgit add .は絶対に使用しないでください。git diff --cached --statとgit diff --cachedを実行して、変更を理解します。main上にある場合、コミット前にフィーチャーブランチを作成します(下記のステップ 2b を参照)。- diff に基づいて、明確で説明的なコミットメッセージを生成します。
- コミットを作成します。
ステップ 2b:フィーチャーブランチを作成(main 上にある場合)
このステップは、現在のブランチが main の場合、ステップ 2.6 から呼び出されます。ブランチは コミット前に 作成する必要があるため、ローカル main がクリーンな状態を保ち、PR のスクワッシュマージ後の分岐を避けることができます。
- ステージされた変更からわかりやすいブランチ名を生成します(例:
feat/add-user-validation、fix/null-pointer-in-parser)。kebab-case で従来のプリフィックス(feat/、fix/、chore/、refactor/など)を使用します。 git checkout -b <branch-name>を実行して、新しいブランチを作成し、切り替えます。ステージされた変更は新しいブランチに引き継がれます。- ステップ 6 でクリーンアップするため、このブランチ名を保存します。
- ステップ 2.7 に戻り、新しいブランチでコミットします。
ステップ 3:プッシュと PR 作成
git push -u origin HEADを実行して、ブランチをリモートにプッシュします。- PR が既に存在するかチェックします:
gh pr view --json number,url 2>/dev/null。- PR が存在する場合は、その URL を表示し、ステップ 4 にスキップします。
- PR が存在しない場合:
git log main..HEAD --onelineでコミットを確認します。- 簡潔な PR タイトル(70 文字以下)と変更内容をまとめたボディを生成します。
- PR を作成します:
gh pr create --base main --title "<title>" --body "<body>"。
- PR URL をユーザーに表示します。
ステップ 4:CI/CD チェックをポーリング
- CI に時間を与えるため、最初のチェック前に 10 秒待機します。
gh pr checksを実行して、チェックステータスを取得します。- 結果を解析します:
- すべてのチェックが成功 → ステップ 5 に進みます。
- チェックが失敗 → 停止し、失敗をユーザーに報告します。チェック名、ステータス、リンクを含めます。進みません。
- チェックがまだ保留中 → 30 秒待機してから再度ポーリングします。
- チェックが設定されていない(出力なし) → マージを続行するか、停止するかをユーザーに尋ねます。
- 15 分のポーリング後もチェックが保留中の場合は停止し、ユーザーに伝えます。手動で監視できるよう PR URL を提供します。
ステップ 5:スクワッシュマージ
gh pr merge --squash --delete-branchを実行して、スクワッシュマージとリモートブランチの削除を行います。- マージが失敗した場合(マージコンフリクト、ブランチ保護ルールなど)、具体的なエラーをユーザーに報告し、停止します。
ステップ 6:クリーンアップ
git checkout mainを実行します。git pull origin mainを実行して、マージされた変更を取得します。- ローカルフィーチャーブランチを削除します:
git branch -d <branch-name>(ステップ 1 で保存したブランチ名を使用)。 - 以下のサマリーを含めて成功を報告します:
- PR URL
- マージステータス
- クリーンアップされたブランチ
エッジケース
- main 上に変更がある場合:コミット前に自動的にフィーチャーブランチを作成し(ステップ 2b)、ローカル
mainをクリーンな状態に保ちます。 - main 上に変更がない場合:停止し、シップするものがないことを伝えます。
- デタッチ HEAD:直ちに停止し、名前付きブランチをチェックアウトするメッセージを表示します。
- PR が既に存在:既存の PR を使用します。PR 作成をスキップし、CI ポーリングに進みます。
- CI チェックが設定されていない:チェックなしでマージするかをユーザーに尋ねます。
- CI タイムアウト(15 分):手動監視用に PR URL を報告します。マージしません。
- マージコンフリクト:エラーを報告します。自動的に解決を試みません。
- ブランチ保護ルールがマージをブロック:
ghからの具体的なエラーを報告します。 - ユーザーがファイル選択中にキャンセル:ワークフロー全体を正常に中止します。
ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ
詳細情報
- 作者
- CuriouslyCory
- ライセンス
- MIT
- 最終更新
- 2026/3/17
Source: https://github.com/CuriouslyCory/morse-bot / ライセンス: MIT