Pull Request と課題を連動させる
GitHub Issues では、PR に Closes #123 と書くだけで Issue のリンク・ステータス更新・クローズが自動で行われます。このレシピで Backlog 課題でも同じ操作感を実現できます。PR 本文に PROJECT-123 のような課題キーを書くだけで動作します。
-
PR 作成
課題に PR リンクをコメント+ステータスを「処理中」に
-
PR 本文の編集
新たに追加された課題キーにだけコメント
-
PR マージ
課題を自動クローズ
name: Sync PR Lifecycle to Backlog Issueson: pull_request: types: [opened, edited, closed] branches: [main]
# リポジトリへの書き込みは不要なので全権限を無効化permissions: {}
env: BACKLOG_API_KEY: ${{ secrets.BACKLOG_API_KEY }} BACKLOG_SPACE: ${{ secrets.BACKLOG_SPACE }} # 「処理中」ステータスの ID(bee status list <PROJECT> で確認) STATUS_IN_PROGRESS: "2"
jobs: sync: runs-on: ubuntu-latest timeout-minutes: 5 steps: # PR 本文から課題キーを抽出する # edited イベントでは変更前の本文からもキーを取得して差分を計算する - name: Collect issue keys from PR body id: collect run: | KEYS=$(echo "$PR_BODY" | grep -oE '[A-Z_]+-[0-9]+' | sort -u | tr '\n' ' ') echo "Detected issue keys: ${KEYS:-(none)}" echo "keys=$KEYS" >> "$GITHUB_OUTPUT"
if [ "$EVENT_ACTION" = "edited" ]; then PREV=$(echo "$PREV_BODY" | grep -oE '[A-Z_]+-[0-9]+' | sort -u | tr '\n' ' ') echo "Previous issue keys: ${PREV:-(none)}" echo "prev=$PREV" >> "$GITHUB_OUTPUT" fi env: PR_BODY: ${{ github.event.pull_request.body }} PREV_BODY: ${{ github.event.changes.body.from }} EVENT_ACTION: ${{ github.event.action }}
- name: Build PR link text id: pr-link run: | echo "md=[${REPO}#${PR_NUMBER}](${PR_URL})" >> "$GITHUB_OUTPUT" env: REPO: ${{ github.repository }} PR_NUMBER: ${{ github.event.pull_request.number }} PR_URL: ${{ github.event.pull_request.html_url }}
# PR 作成 → 課題にリンク+ステータスを「処理中」に - name: Update status to "In Progress" and comment PR link if: github.event.action == 'opened' && steps.collect.outputs.keys != '' run: | for KEY in $KEYS; do echo "Updating status: $KEY -> In Progress" npx @nulab/bee issue edit "$KEY" --status "$STATUS_IN_PROGRESS" || echo "::warning::Failed to process $KEY" echo "Commenting on: $KEY" npx @nulab/bee issue comment "$KEY" \ --body "PR ${PR_LINK} が作成されました" || echo "::warning::Failed to process $KEY" done env: KEYS: ${{ steps.collect.outputs.keys }} PR_LINK: ${{ steps.pr-link.outputs.md }}
# PR 本文の編集 → 新しく追加された課題キーにだけコメント - name: Comment PR link on newly added issues if: github.event.action == 'edited' && steps.collect.outputs.keys != '' run: | for KEY in $KEYS; do if echo "$PREV_KEYS" | grep -qw "$KEY"; then echo "Skipping: $KEY (already linked)" continue fi echo "Commenting on: $KEY" npx @nulab/bee issue comment "$KEY" \ --body "PR ${PR_LINK} にリンクされました" || echo "::warning::Failed to process $KEY" done env: KEYS: ${{ steps.collect.outputs.keys }} PREV_KEYS: ${{ steps.collect.outputs.prev }} PR_LINK: ${{ steps.pr-link.outputs.md }}
# PR マージ → 課題をクローズ - name: Close linked issues if: github.event.action == 'closed' && github.event.pull_request.merged == true && steps.collect.outputs.keys != '' run: | for KEY in $KEYS; do echo "Closing: $KEY" npx @nulab/bee issue close "$KEY" \ --comment "PR ${PR_LINK} のマージにより自動クローズ" || echo "::warning::Failed to process $KEY" done env: KEYS: ${{ steps.collect.outputs.keys }} PR_LINK: ${{ steps.pr-link.outputs.md }}カスタマイズ
Section titled “カスタマイズ”- ステータス ID を確認するには
bee status list <PROJECT>でプロジェクトのステータス一覧と ID を確認できます。STATUS_IN_PROGRESSの値をプロジェクトに合わせて変更してください。- ステータス変更が不要
bee issue editの行とSTATUS_IN_PROGRESS環境変数を削除すれば、リンクのコメントだけになります。- 自動クローズが不要
- 「Close linked issues」ステップを削除してください。
- クローズではなく別のステータスにしたい
bee issue closeをbee issue edit --status <ステータスID>に変更してください。ステータス ID はbee status list <PROJECT>で確認できます。editedイベントが不要- トリガーの
typesからeditedを削除し、「Comment PR link on newly added issues」ステップを削除してください。