Slide 1

Slide 1 text

Enterprise以外でも MergeQueueしたい! GitHub Actions Meetup Tokyo #3 ちゅうこ / yamachu

Slide 2

Slide 2 text

突然ですが… MergeQueueを 使ってる人 ✋

Slide 3

Slide 3 text

自己紹介 経歴 ● サポーターズ 18 卒入社 ● Microsoft MVP 2018- ● GitHub Actions 歴 5 年 ちゅうこ (山田 裕介) GitHub: yamachu X(Twitter): y_chu5 趣味 ● ポケカ、ゲーム ● GitHubのExploreのだら見

Slide 4

Slide 4 text

Merge Queueとは ● PRのブランチを最新の状態にして ● Branch保護Checksが通ったらmergeする PR: A PR: B Track main & Test & Merge merge-group

Slide 5

Slide 5 text

Merge Queueのメリット・デメリット メリット ● ベースブランチが常にGreenの状態を保ちやすい ● 他のPRがmergeされたから追従してまたCI回して〜がない! ● CI待ってからmergeのような、マージする人間の待ちを削る デメリット ● 使えるのはorg public repoかEnterprise private repo!!!!!!!!!!

Slide 6

Slide 6 text

Merge Queueっぽいものを自作するモチベ ● 個人プロジェクト / org privateでも使いたい ● チームで決めたmergeや承認フローなど カスタマイズして使えると嬉しい ● などなど

Slide 7

Slide 7 text

Merge Queueの機能を集めたCustom Actions yamachu/merge-queue-action ● queueに積まれたPRが最新base branchとmergeableを担保 ● 最新のbase branchでCIが通ること担保 ○ 上記2つは公式と同じような機能 ● Merge Queueに積んだ人物はCODEOWNERであるのを担保 設計イメージは voyagegroup/popuko に影響を受けている

Slide 8

Slide 8 text

Merge Queue再現のキモ - concurrency - 同じconcurrency groupを使うJobやWorkflowの 同時実行を一つに制限する機能 (順序は保証しない) PR: A PR: B Workflow: Merge Q Key: my-merge-queue

Slide 9

Slide 9 text

イメージ (Merge Queueに積むWorkflow) jobs: Queuing: steps: - uses: yamachu/merge-queue-action/precheck@main - run: git push origin HEAD:auto.${{ github.event.issue.number }} - run: > gh workflow run -R ${{ github.event.repository.full_name }} -f issue_number=${{ github.event.issue.number }} -f tmp-ci-branch=auto.${{ github.event.issue.number }} --ref auto.${{ github.event.issue.number }} merge-queue-runner.yml Merge可能 / CODEOWNER かの確認

Slide 10

Slide 10 text

jobs: Queuing: steps: - uses: yamachu/merge-queue-action/precheck@main - run: git push origin HEAD:auto.${{ github.event.issue.number }} - run: > gh workflow run -R ${{ github.event.repository.full_name }} -f issue_number=${{ github.event.issue.number }} -f tmp-ci-branch=auto.${{ github.event.issue.number }} --ref auto.${{ github.event.issue.number }} merge-queue-runner.yml イメージ (Merge Queueに積むWorkflow) Workflowのブランチ紐づけのためのpush

Slide 11

Slide 11 text

jobs: Queuing: steps: - uses: yamachu/merge-queue-action/precheck@main - run: git push origin HEAD:auto.${{ github.event.issue.number }} - run: > gh workflow run -R ${{ github.event.repository.full_name }} -f issue_number=${{ github.event.issue.number }} -f tmp-ci-branch=auto.${{ github.event.issue.number }} --ref auto.${{ github.event.issue.number }} merge-queue-runner.yml イメージ (Merge Queueに積むWorkflow) Merge QueueのWorkflowにauto.*を積む

Slide 12

Slide 12 text

on: workflow_dispatch: inputs: issue_number: concurrency: group: merge-queue cancel-in-progress: false … イメージ (Merge QueueライクなWorkflow) concurrency groupを設定して

Slide 13

Slide 13 text

jobs: PreTesting: steps: - uses: yamachu/merge-queue-action/pretesting@main Test: uses: ./.github/workflows/test.yml needs: [PreTesting] PostTesting: needs: [PreTesting, Test] steps: - uses: yamachu/merge-queue-action/posttesting@main イメージ (Merge QueueライクなWorkflow) 実際のtestをサンドイッチする

Slide 14

Slide 14 text

まとめ ● Merge QueueっぽいのはEnterprise以外でも 実現できる ○ concurrencyをうまく使うのがポイント ● 好きなcheckを入れることで柔軟な オレオレMerge Queueを作れる ● yamachu/merge-queue-action にて公開中

Slide 15

Slide 15 text

refs GitHubにおけるPull RequestのAssign/Mergeを 自動化して開発を加速させる https://techblog.cartaholdings.co.jp/entry/2017/02/14/080000 voyagegroup/popuko https://github.com/voyagegroup/popuko