Github ActionsでリポジトリAからリポジトリBにプルリクエストを出す
こんにちは。
私は普段はメーカーでUIデザインを担当しています。
この記事はGithub ActionsもGithub Appsも使ったこともない、汚いおじさんデザイナーが備忘録として書いているメモです。
間違っていたり、もっといい方法があったりするかもしれません。
何がしたいのか
社内には複数のアプリ(プロダクト)があり日々開発が進んでいます。
こちらの記事でも書きましたが、社内のアプリにアイコンや、色指定など共通部分が多くあり、現状プロダクト毎に管理しているので、更新性がイマイチです。
そこで、このデザイントークンと呼ばれるような情報をFigmaからGithubに連携してなるべく自動化したいと思い賢い人達の情報を見ながら試行錯誤しています。
Figma内のアイコンをGithubに対してプルリクエストを出すところまではできましが、次に以下の問題にぶち当たりました。
◎問題
プロダクト毎にリポジトリが分かれているのでGithub Actionsのworkflowをそれぞれ設定する必要がありそう
そもそもプロダクトと直接関係ないソースをリポジトリに追加するのがモヤモヤする
◎解決案
そこで、アイコンの書き出し元のブランチを「makePR」ブランチとしてそこから、各プロダクトのブランチに足していプルリクエストを出せないかと素人ながら考えました。
Github Appを登録する
リポジトリを超えてプルリクエストを出すにはGithub Appを作成する必要があるらしいです。
GitHub Developer Settingsにアクセス
GitHubにログインした状態で、右上のプロフィールアイコンをクリックし、ドロップダウンメニューから「Settings」を選択します。
左側のメニューから「Developer settings」を選択します。
GitHub Appの作成
「Developer settings」ページで、「GitHub Apps」をクリックし、次に「New GitHub App」をクリックします。
アプリの設定
色々設定がありますが、今回は以下だけで問題なかったです。
「GitHub App name」:アプリの名前を入力します。
「Homepage URL」:アプリのホームページURLを入力します。
必須項目なので入力が必要がですが、何でもいいです。グローバルでユニークである必要があります。Webhook > Activeのチェックは外します
「Repository permissions」:アプリがアクセスできるリポジトリの権限を設定します。
今回は、「Contents、Pull requests」の権限をRead & Writeにしました(不要な権限もあるかも)
上記、必要な設定を行ったら、「Create GitHub App」をクリックしてアプリを作成します。
必要な情報の取得
アプリ作成後、App IDやClient ID、Client Secret、Private keyなどの必要な情報が表示されます。これらは後でアプリの設定や認証に使用するのでコピーしておきます。
アプリのインストール
作成されたアプリのページで、「Install App」をクリックし、インストールしたいリポジトリまたは組織を選択します。
今回はworkflowを実行するリポジトリと、プルリクエストを受け取るリポジトリの両方を選択します。
最終イメージ
workfolwを実行するブランチの「Settings > Actions secrets and variables」のRepository secretsにAPP_ID、PRIVATE_KEYの情報を登録します。
最終的にはこんな感じの設定になります。
makePRブランチのGithub Actionsのworkflowはこんな感じになりました。
name: makePR
on: workflow_dispatch
jobs:
create_pull_request:
runs-on: ubuntu-latest
steps:
- name: Global Git Configuration
run: |
git config --global user.email "action@github.com"
git config --global user.name "GitHub Action"
- name: Generate github token for GitHub App
id: generate_token
uses: tibdex/github-app-token@v2
with:
app_id: ${{ secrets.APP_ID }}
private_key: ${{ secrets.PRIVATE_KEY }}
- name: Checkout makePR's repo
uses: actions/checkout@v3
with:
repository: "hogehoge/makePR"
fetch-depth: 0
- name: Checkout takePR's repo
uses: actions/checkout@v3
with:
repository: "hogehoge/takePR"
token: ${{ steps.generate_token.outputs.token }}
fetch-depth: 0
path: "takePR"
- name: Commit Update Info to makePR's repo
run: |
echo "UPDATE_INFO=Update generated at $(date)" > update-info.txt
- name: Copy updated variables to takePR's repo
run: |
cp update-info.txt takePR/
- name: Create Pull Request
uses: peter-evans/create-pull-request@v6
with:
token: ${{ steps.generate_token.outputs.token }}
commit-message: "Update from makePR"
committer: GitHub <noreply@github.com>
author: ${{ github.actor }} <${{ github.actor }}@users.noreply.github.com>
branch: feat/abc
branch-suffix: timestamp
delete-branch: true
title: "Update from makePR"
body: Variables has been updated
path: "takePR"
とりあえず、リポジトリを超えてプルリクエストを出すことができました。
デザイントークンの連携にはまだまだ壁がありますが、1個ずつ超えていこうと思います。
この記事が気に入ったらサポートをしてみませんか?