refactor: cc-resolve をコンフリクト解決専用に変更
レビュー指摘対応の機能を削除し、コンフリクト解決のみに集中するように変更。 - Collect PR review comments ステップを削除 - プロンプトからレビュー関連セクションを削除 - コミット済みコンフリクトマーカーの検出を追加 - コミットメッセージを "fix: resolve merge conflicts" に変更
This commit is contained in:
parent
88455b7594
commit
2d0dc127d0
119
.github/workflows/cc-resolve.yml
vendored
119
.github/workflows/cc-resolve.yml
vendored
@ -63,32 +63,18 @@ jobs:
|
|||||||
echo "conflicts=true" >> "$GITHUB_OUTPUT"
|
echo "conflicts=true" >> "$GITHUB_OUTPUT"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
- name: Collect PR review comments
|
# コミット済みのコンフリクトマーカーを検出
|
||||||
id: reviews
|
STALE_MARKERS=$(grep -rl '<<<<<<<' --include='*.ts' --include='*.js' --include='*.json' --include='*.yaml' --include='*.yml' --include='*.md' . 2>/dev/null | grep -v node_modules | grep -v .git || echo "")
|
||||||
run: |
|
if [ -n "$STALE_MARKERS" ]; then
|
||||||
PR_NUMBER=${{ github.event.issue.number }}
|
echo "stale_markers=true" >> "$GITHUB_OUTPUT"
|
||||||
COMMENTS=$(gh pr view "$PR_NUMBER" --json comments -q '.comments[].body' 2>/dev/null || echo "")
|
{
|
||||||
REVIEWS=$(gh api "repos/${{ github.repository }}/pulls/${PR_NUMBER}/reviews" --jq '.[].body' 2>/dev/null || echo "")
|
echo "stale_marker_files<<MARKER_EOF"
|
||||||
REVIEW_COMMENTS=$(gh api "repos/${{ github.repository }}/pulls/${PR_NUMBER}/comments" --jq '.[] | "**\(.path):\(.line // .original_line)** \(.body)"' 2>/dev/null || echo "")
|
echo "$STALE_MARKERS"
|
||||||
|
echo "MARKER_EOF"
|
||||||
{
|
} >> "$GITHUB_OUTPUT"
|
||||||
echo "review_context<<REVIEW_EOF"
|
else
|
||||||
if [ -n "$REVIEWS" ]; then
|
echo "stale_markers=false" >> "$GITHUB_OUTPUT"
|
||||||
echo "## PR Reviews"
|
fi
|
||||||
echo "$REVIEWS"
|
|
||||||
fi
|
|
||||||
if [ -n "$REVIEW_COMMENTS" ]; then
|
|
||||||
echo "## PR Review Comments (inline)"
|
|
||||||
echo "$REVIEW_COMMENTS"
|
|
||||||
fi
|
|
||||||
if [ -n "$COMMENTS" ]; then
|
|
||||||
echo "## PR Comments"
|
|
||||||
echo "$COMMENTS"
|
|
||||||
fi
|
|
||||||
echo "REVIEW_EOF"
|
|
||||||
} >> "$GITHUB_OUTPUT"
|
|
||||||
env:
|
|
||||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
|
|
||||||
- uses: actions/setup-node@v4
|
- uses: actions/setup-node@v4
|
||||||
with:
|
with:
|
||||||
@ -100,22 +86,24 @@ jobs:
|
|||||||
- name: Resolve
|
- name: Resolve
|
||||||
run: |
|
run: |
|
||||||
claude -p --dangerously-skip-permissions "$(cat <<'PROMPT'
|
claude -p --dangerously-skip-permissions "$(cat <<'PROMPT'
|
||||||
このPRのコンフリクトおよびレビュー指摘を解決してください。
|
このPRのコンフリクトを解決してください。
|
||||||
|
|
||||||
## 状況判定
|
## 状況判定
|
||||||
|
|
||||||
まず現在の状態を確認してください。
|
まず現在の状態を確認してください。以下の2つをすべてチェックする。
|
||||||
|
|
||||||
1. `git status` でコンフリクトの有無を確認
|
1. `git status` でマージコンフリクト(Unmerged paths)の有無を確認
|
||||||
2. コンフリクトがあれば「コンフリクト解決」を実行
|
2. ファイル中にコミット済みのコンフリクトマーカー(`<<<<<<<`)が残っていないか `grep -r '<<<<<<<' --include='*.ts' --include='*.js' --include='*.json' .` で確認
|
||||||
3. PRのレビューコメントがあれば「レビュー指摘対応」を実行
|
|
||||||
4. 両方あれば、コンフリクト解決を先に行い、その後レビュー指摘に対応
|
**重要**: git status がクリーンでも、ファイル内にコンフリクトマーカーがテキストとしてコミットされている場合がある。必ず grep で確認すること。
|
||||||
|
|
||||||
|
どちらも該当しなければ「コンフリクトなし」と報告して終了。
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## コンフリクト解決
|
## コンフリクト解決
|
||||||
|
|
||||||
Git merge/rebase/cherry-pick のコンフリクトを、差分分析に基づいて解決する。
|
Git merge/rebase/cherry-pick のコンフリクト、およびファイル内に残存するコンフリクトマーカーを、差分分析に基づいて解決する。
|
||||||
|
|
||||||
**原則: 差分を読み、疑い、判断根拠を書いてから解決する。妄信的に片方を採用しない。**
|
**原則: 差分を読み、疑い、判断根拠を書いてから解決する。妄信的に片方を採用しない。**
|
||||||
|
|
||||||
@ -125,7 +113,6 @@ jobs:
|
|||||||
git status
|
git status
|
||||||
```
|
```
|
||||||
|
|
||||||
- `Unmerged paths` がなければ「コンフリクトなし」と報告してスキップ
|
|
||||||
- merge / rebase / cherry-pick のどれが進行中か特定する
|
- merge / rebase / cherry-pick のどれが進行中か特定する
|
||||||
- `.git/MERGE_HEAD` があれば merge
|
- `.git/MERGE_HEAD` があれば merge
|
||||||
- `.git/rebase-merge/` があれば rebase
|
- `.git/rebase-merge/` があれば rebase
|
||||||
@ -145,6 +132,11 @@ jobs:
|
|||||||
git diff --name-only --diff-filter=U
|
git diff --name-only --diff-filter=U
|
||||||
```
|
```
|
||||||
|
|
||||||
|
加えて、コミット済みマーカーがあるファイルも対象に含める:
|
||||||
|
```bash
|
||||||
|
grep -rl '<<<<<<<' --include='*.ts' --include='*.js' --include='*.json' . | grep -v node_modules
|
||||||
|
```
|
||||||
|
|
||||||
ファイル数と種類(ソースコード / 設定ファイル / ロックファイル等)を報告する。
|
ファイル数と種類(ソースコード / 設定ファイル / ロックファイル等)を報告する。
|
||||||
|
|
||||||
### 4. 各ファイルを分析する
|
### 4. 各ファイルを分析する
|
||||||
@ -187,50 +179,9 @@ jobs:
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## レビュー指摘対応
|
## 波及影響確認
|
||||||
|
|
||||||
PRのレビューコメントを分析し、コンフリクト解決と同じ原則で対応する。
|
**コンフリクトを解決しただけでは終わらない。** 対象外ファイルにも影響が出ていないか検証する。
|
||||||
|
|
||||||
**原則: 指摘を読み、コードを確認し、判断根拠を書いてから修正する。盲従しない。**
|
|
||||||
|
|
||||||
### 1. レビューコメントを収集する
|
|
||||||
|
|
||||||
`gh pr view` や `gh api` でPRのレビューコメントを取得し、全指摘を列挙する。
|
|
||||||
|
|
||||||
### 2. 各指摘を分析する
|
|
||||||
|
|
||||||
**指摘ごとに以下を必ず実行する。省略しない。**
|
|
||||||
|
|
||||||
1. 指摘箇所のコードを実際に読む
|
|
||||||
2. 指摘の意図を理解する
|
|
||||||
3. 現状コードが指摘通りに問題があるか分析する
|
|
||||||
4. **判断を書く**(以下の形式で必ず出力すること):
|
|
||||||
|
|
||||||
```markdown
|
|
||||||
### 指摘: {レビューコメントの要約}
|
|
||||||
- 指摘箇所: {ファイル:行}
|
|
||||||
- 現状コード: {具体的な内容}
|
|
||||||
- 指摘の意図: {何を改善すべきか}
|
|
||||||
- 判断: {修正 / 部分修正 / 反論}({理由})
|
|
||||||
```
|
|
||||||
|
|
||||||
**疑うべきポイント:**
|
|
||||||
- 指摘が的外れではないか? コンテキストを見落としていないか?
|
|
||||||
- 修正すると他の箇所に影響しないか?
|
|
||||||
- 指摘の通りに修正するのがベストか、別のアプローチの方が良くないか?
|
|
||||||
|
|
||||||
### 3. 修正を実施する
|
|
||||||
|
|
||||||
判断に基づいて修正する:
|
|
||||||
- 修正: 指摘が妥当 → コードを修正
|
|
||||||
- 部分修正: 一部妥当 → 妥当な部分のみ修正
|
|
||||||
- 反論: 指摘が不適切 → 理由を明記してスキップ
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 波及影響確認(共通)
|
|
||||||
|
|
||||||
**コンフリクト解決・指摘修正だけでは終わらない。** 対象外ファイルにも影響が出ていないか検証する。
|
|
||||||
|
|
||||||
- ビルド確認(`npm run build`、`./gradlew build` 等、プロジェクトに応じて)
|
- ビルド確認(`npm run build`、`./gradlew build` 等、プロジェクトに応じて)
|
||||||
- テスト確認(`npm test`、`./gradlew test` 等)
|
- テスト確認(`npm test`、`./gradlew test` 等)
|
||||||
@ -247,18 +198,12 @@ jobs:
|
|||||||
全ファイルの解決結果をサマリーテーブルで報告する:
|
全ファイルの解決結果をサマリーテーブルで報告する:
|
||||||
|
|
||||||
```markdown
|
```markdown
|
||||||
## 解決サマリー
|
## コンフリクト解決サマリー
|
||||||
|
|
||||||
### コンフリクト解決
|
|
||||||
| ファイル | コンフリクト数 | 採用 | 理由 |
|
| ファイル | コンフリクト数 | 採用 | 理由 |
|
||||||
|---------|-------------|------|------|
|
|---------|-------------|------|------|
|
||||||
| path/to/file.ts | 2 | theirs | リファクタリング済み |
|
| path/to/file.ts | 2 | theirs | リファクタリング済み |
|
||||||
|
|
||||||
### レビュー指摘対応
|
|
||||||
| 指摘 | 判断 | 理由 |
|
|
||||||
|------|------|------|
|
|
||||||
| {指摘要約} | 修正/反論 | {理由} |
|
|
||||||
|
|
||||||
波及修正: {対象外ファイルの修正内容。なければ「なし」}
|
波及修正: {対象外ファイルの修正内容。なければ「なし」}
|
||||||
ビルド: OK / NG
|
ビルド: OK / NG
|
||||||
テスト: OK / NG ({passed}/{total})
|
テスト: OK / NG ({passed}/{total})
|
||||||
@ -269,8 +214,8 @@ jobs:
|
|||||||
## 絶対原則
|
## 絶対原則
|
||||||
|
|
||||||
- **差分を読まずに解決しない。** ファイルの中身を確認せずに `--ours` / `--theirs` を適用しない
|
- **差分を読まずに解決しない。** ファイルの中身を確認せずに `--ours` / `--theirs` を適用しない
|
||||||
- **盲従しない。** HEAD 側に独自の意図がないか必ず疑う。レビュー指摘も鵜呑みにしない
|
- **盲従しない。** HEAD 側に独自の意図がないか必ず疑う
|
||||||
- **判断根拠を省略しない。** 各コンフリクト・各指摘に「何が・なぜ・どちらを」の3点を書く
|
- **判断根拠を省略しない。** 各コンフリクトに「何が・なぜ・どちらを」の3点を書く
|
||||||
- **波及を確認する。** 対象外ファイルもビルド・テストで検証する
|
- **波及を確認する。** 対象外ファイルもビルド・テストで検証する
|
||||||
|
|
||||||
## 禁止事項
|
## 禁止事項
|
||||||
@ -289,7 +234,7 @@ jobs:
|
|||||||
run: |
|
run: |
|
||||||
git add -A
|
git add -A
|
||||||
if ! git diff --cached --quiet; then
|
if ! git diff --cached --quiet; then
|
||||||
git commit -m "fix: resolve conflicts and review comments"
|
git commit -m "fix: resolve merge conflicts"
|
||||||
fi
|
fi
|
||||||
AHEAD=$(git rev-list --count origin/${{ steps.pr.outputs.branch }}..HEAD 2>/dev/null || echo "0")
|
AHEAD=$(git rev-list --count origin/${{ steps.pr.outputs.branch }}..HEAD 2>/dev/null || echo "0")
|
||||||
if [ "$AHEAD" -gt 0 ]; then
|
if [ "$AHEAD" -gt 0 ]; then
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user