まとめ
- Personal access tokenを使うと環境変数で与えやすくて便利ですよ
- gitの名前とメールアドレスの設定は、しないとエラーで怒られます
↑でわかる人はたぶん続き読まなくて大丈夫です。
ソースコード
forkしてきたリポジトリに本体の更新をマージする処理をしています。
webサーバーになってるのはあとでGoogle Cloud Runで動かすためです。そちらについては別記事のGoogle Cloud Runでバッチ処理をやらせようにて。
docker run
とかでmain.shを実行すれば直接実行も可能です。
内容は以下の感じ。
main.sh
rm -rf work
git clone https://$TOKEN:x-oauth-basic@github.com/$USER/$REPOSITORY.git work
cd work
git config user.email $EMAIL
git config user.name $USER
git remote add upstream https://$TOKEN:x-oauth-basic@github.com/$UPSTREAM_USER/$REPOSITORY.git
git fetch upstream
git merge -m "Merge upstream" upstream/master
git push origin master
cd -
やってることはほとんどgitの基本操作なので説明は割愛します。ポイントはURLです。
gitの名前とメールアドレスの設定は、しないとエラーで怒られます。
コンテナ上でgit cloneするのだるいよねって話
Githubからgit cloneしてくる場合、sshかhttpsを使う必要があって、
- sshだと公開鍵とかのファイルが必要
- httpsだと認証で名前とパスワード訊かれるのが自動化するときに面倒だし、パスワード渡したくない
というのがあります。
これを解決するために、
-
Personal Access Tokensを作る
- repo権限が必要
- URLでtokenを渡す形式を使う
という手法を採用しました。URLは先述の内容の通りのフォーマットです。
余談:結果を受け取る
Githubのリポジトリには通知を受け取るメールアドレスを設定する機能(リポジトリのSetting→Notifications)があるので、Slackの転送用のメールアドレスを設定する機能を使って、Slackで通知を受け取るようにして、なんらかのマージが行われたときにはわかるようにしています。