🍴
fork したリポジトリを最新に保つ GitHub Actions ワークフロー
課題
- とある OSS の機能不足に悩み fork して改修した
- fork 元のリポジトリの今後の更新を取り込むタスクが発生する
- いつやる?どれぐらいの頻度でチェックする?
- マニュアルを作ったとしても手作業は大変
解決策
- GitHub Actios で tgymnich/fork-sync を使って自動化
- cron で定時にチェック
- 差分があったら PR を作成する
tgymnich/fork-sync
機能
- fork 元リポジトリの変更を取り込む Pull Request (以下 PR) を作成する
- 作成したリポジトリを自動マージ (オプショナル)
- 勝手にマージはしてほしくなかったので今回は使っていない
ワークフローの YAML
# フォーク元リポジトリの変更をフォーク先リポジトリに同期する PR を作成する GitHub Actions ワークフロー
name: Sync Fork
on:
schedule:
- cron: "0 3 * * 1" # 毎週月曜日 3:00am
workflow_dispatch: # 手作業での実行も可
jobs:
sync:
runs-on: ubuntu-latest
steps:
- uses: tgymnich/fork-sync@v2
with:
head: main # form 元リポジトリのブランチ
base: main # fork 先リポジトリ (== ワークフローが動作するリポジトリ) の PR マージ対象ブランチ
auto_approve: false # 自動 Approve しない
auto_merge: false # 自動 merge しない
動作
↓設定された時間に動作して、差分があれば PR を作成する。
↓作成された PR
所感
- fork したリポジトリに対するメンテナンスコストが下がって、リポジトリを fork することへの精神的ハードルが下がった
- fork 元リポジトリの特定ブランチ (主に main) を監視対象に設定するが、ブランチではなく、最新 tag との差分を検知できるようになってほしい
- VS Code の GitHub Actions プラグイン でワークフローの YAML を書くと、補完が効いて嬉しい
Discussion