GitHub Actions で外部の組織のプライベートリポジトリにPRを出す
はじめに
organization Aのプライベートリポジトリのコードに変更があった時、organization BのプライベートリポジトリにGitHub ActionsでPRを出したい、というケースがありました。
同じ組織の別リポジトリへPRを出す方法は、調べるといくつか記事が出てきますが、別の組織の場合は設定を変える必要があります。
少しハマったので、記録として残しておきます。
やりたいこと
org-a
の repo-a
から org-b
の repo-b
にPRを出す。
方法
以下の記事を参考にしました。
GitHub Apps / GitHub Actionsを使って別のリポジトリにファイルをコピーするPRを作成する
![](https://res.cloudinary.com/zenn/image/upload/s--6vwQ7sYp--/c_fit%2Cg_north_west%2Cl_text:notosansjp-medium.otf_55:GitHub%20Apps%20%2F%20GitHub%20Actions%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E5%88%A5%E3%81%AE%E3%83%AA%E3%83%9D%E3%82%B8%E3%83%88%E3%83%AA%E3%81%AB%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%92%E3%82%B3%E3%83%94%E3%83%BC%E3%81%99%E3%82%8BPR%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B%2Cw_1010%2Cx_90%2Cy_100/g_south_west%2Cl_text:notosansjp-medium.otf_37:Hirotaka%20Miyagi%2Cx_203%2Cy_121/g_south_west%2Ch_90%2Cl_fetch:aHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL3plbm4tdXNlci11cGxvYWQvYXZhdGFyLzU1OTAwOGYzMmYuanBlZw==%2Cr_max%2Cw_90%2Cx_87%2Cy_95/v1627283836/default/og-base-w1200-v2.png)
この記事では同じ組織の別リポジトリへのPRの場合なので、別の組織の場合に変更する部分を説明します。
GitHub Apps
GitHub Apps は org-b
の組織に作成、インストールします。 Repository access
を Only select repositories
にする場合、 repo-b
を指定します。
![](https://ghost.tech.anti-pattern.co.jp/content/images/2024/02/----------2024-02-13-14.27.48.png)
GitHub Actions
上の記事と同様に tibdex/github-app-token
を使う場合、パラメータとして installation_retrieval_mode: "organization"
と installation_retrieval_payload: "org-b"
を追加します。
全体としては以下のようになります。
name: Test
on:
workflow_dispatch:
jobs:
test:
name: test
runs-on: ubuntu-latest
steps:
- name: Checkout Code
uses: actions/checkout@v3
- name: Generate Token
id: generate_token
uses: tibdex/github-app-token@3beb63f4bd073e61482598c45c71c1019b59b73a
with:
app_id: ${{ secrets.CLIENT_APP_ID }}
private_key: ${{ secrets.CLIENT_PRIVATE_KEY }}
installation_retrieval_mode: "organization"
installation_retrieval_payload: "org-b"
- name: Code
run: |
git config --global user.email github-actions[bot]@users.noreply.github.com
git config --global user.name github-actions[bot]
CLONE_DIR=$(mktemp -d)
git clone --depth=1 https://x-access-token:${{ steps.generate_token.outputs.token }}@github.com/repo-b.git ${CLONE_DIR}
cd ${CLONE_DIR}
git checkout -b feature/update
## コードの変更
git add .
if git status | grep -q "Changes to be committed"
then
git commit --message "update"
git push -u origin feature/update
gh pr create \
--title "Update API Client for ${{ needs.setup.outputs.version }}" \
--body "update" \
--repo repo-b \
--base main \
--head feature/update
else
echo "No changes detected"
fi
env:
GH_TOKEN: ${{ steps.generate_token.outputs.token }}
このActionsを org-a
の repo-a
で実行します。
おわりに
別の組織のプライベートリポジトリにGitHub ActionsでPRを出す方法でした。あまりやる機会はないと思いますが、参考にしていただければと思います。