🍴

fork したリポジトリを最新に保つ GitHub Actions ワークフロー

2025/01/23に公開

課題

  • とある OSS の機能不足に悩み fork して改修した
  • fork 元のリポジトリの今後の更新を取り込むタスクが発生する
    • いつやる?どれぐらいの頻度でチェックする?
    • マニュアルを作ったとしても手作業は大変

解決策

  • GitHub Actios で tgymnich/fork-sync を使って自動化
    • cron で定時にチェック
    • 差分があったら PR を作成する

tgymnich/fork-sync

https://github.com/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