Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
モノレポにおける path-filtering利用時でも GitHub ステータスのRequi...
Search
tokizo
October 24, 2022
Programming
1
1.5k
モノレポにおける path-filtering利用時でも GitHub ステータスのRequiredを 機能させたい!
tokizo
October 24, 2022
Tweet
Share
More Decks by tokizo
See All by tokizo
徐々に増えているSwiftUI Anchor関連API
tokizuoh
1
1.1k
iOS 曜日ランキングが出来上がるまで
tokizuoh
0
2.5k
メインスレッドをブロックさせないためのSwift Concurrencyクイズ
tokizuoh
1
5.6k
運動モチベーション継続のためのiOSアプリ開発
tokizuoh
0
1k
Xcode 15 で swift run が遅い
tokizuoh
0
3.8k
累積和で配列の処理効率を改善しよう
tokizuoh
0
700
Other Decks in Programming
See All in Programming
手戻りゼロ? Spec Driven Developmentとは@KAG AI week
tmhirai
1
160
Go 1.26でのsliceのメモリアロケーション最適化 / Go 1.26 リリースパーティ #go126party
mazrean
1
350
2026年は Rust 置き換えが流行る! / 20260220-niigata-5min-tech
girigiribauer
0
220
Unity6.3 AudioUpdate
cova8bitdots
0
110
AIに仕事を丸投げしたら、本当に楽になれるのか
dip_tech
PRO
0
180
AI活用のコスパを最大化する方法
ochtum
0
120
AIコーディングの理想と現実 2026 | AI Coding: Expectations vs. Reality 2026
tomohisa
0
1k
The Ralph Wiggum Loop: First Principles of Autonomous Development
sembayui
0
3.7k
浮動小数の比較について
kishikawakatsumi
0
380
Codex の「自走力」を高める
yorifuji
0
250
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
380
朝日新聞のデジタル版を支えるGoバックエンド ー価値ある情報をいち早く確実にお届けするために
junkiishida
1
360
Featured
See All Featured
Designing for Performance
lara
611
70k
Dominate Local Search Results - an insider guide to GBP, reviews, and Local SEO
greggifford
PRO
0
93
The Organizational Zoo: Understanding Human Behavior Agility Through Metaphoric Constructive Conversations (based on the works of Arthur Shelley, Ph.D)
kimpetersen
PRO
0
260
Lessons Learnt from Crawling 1000+ Websites
charlesmeaden
PRO
1
1.1k
Redefining SEO in the New Era of Traffic Generation
szymonslowik
1
230
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
What does AI have to do with Human Rights?
axbom
PRO
1
2k
Leveraging Curiosity to Care for An Aging Population
cassininazir
1
190
Beyond borders and beyond the search box: How to win the global "messy middle" with AI-driven SEO
davidcarrasco
3
65
Facilitating Awesome Meetings
lara
57
6.8k
BBQ
matthewcrist
89
10k
The innovator’s Mindset - Leading Through an Era of Exponential Change - McGill University 2025
jdejongh
PRO
1
120
Transcript
2022.10.24 【オンライン】CircleCIユーザーコミュニティミートアップ tokizo / @tokizuoh モノレポにおける path-filtering利用時でも GitHub ステータスのRequiredを 機能させたい!
自己紹介 ・ tokizo (@tokizuoh) ・ 株式会社はてな マンガアプリチーム所属 ・ iOSアプリエンジニア 2
https://github.com/tokizuoh/circleci-test-2022-10-01 今日のコード
LTの流れ GE path-filtering, GitHub ステータス利用時の問 E 問題解決のアプローチ手Ç ÅE アプローチ手法の課題 3
4 % path-filtering, GitHub ステータスのRequired 利用時の問題
5 まずは用語の説明
用語 ・path-filtering ・GitHub ステータスのRequired 6
用語 ・path-filtering ・GitHub ステータスのRequired 7
path-filtering *1 ・CircleCI公式のOrb ・変更されたファイルに応じてパイプラインパラメータを 制御できる *1 https://circleci.com/developer/ja/orbs/orb/circleci/path-filtering 8
path-filtering *1 ・CircleCI公式のOrb ・変更されたファイルに応じてパイプラインパラメータを 制御できる *1 https://circleci.com/developer/ja/orbs/orb/circleci/path-filtering 9 ⇒ コミットに応じて実行する
ワークフローを動的に変更できる コミット内容に応じて 実行するワークフローを 動的に変更できる
path-filtering 利用時の流れ /ios /android GitHub GitHub android-test-job path-filtering/filter ios-test-job CircleCI
10
path-filtering 利用時の流れ 11 /ios /android GitHub GitHub android-test-job path-filtering/filter ios-test-job
CircleCI 変更あり
path-filtering 利用時の流れ /ios /android GitHub GitHub android-test-job path-filtering/filter ios-test-job CircleCI
変更あり 12
path-filtering コード .circleci/config.yml 13
path-filtering コード .circleci/config.yml ① androidディレクトリ配下に変更があれば build-android をtrueに ② 反映した値は後続の設定ファイルに引き継がれる ①
② 14
path-filtering コード 15 .circleci/continue-config.yml
path-filtering コード 16 .circleci/continue-config.yml
path-filtering メリット ・コミット内容に応じて実行するワークフローを動的に 変更できる ⇒ 不必要なビルドを行わなくて済む 17
用語 ・path-filtering ・GitHub ステータスのRequired 18
GitHub ステータス *2 ・ 少しややこしい ・ GitHub Checks ・ GitHub
ステータス (今日はこっち) ⇒ CircleCIではジョブごとに列挙 *2 https://circleci.com/docs/ja/enable-checks/ 19
GitHub ステータス 20
GitHub ステータスのRequired 21
path-filtering, GitHub ステータスのRequired 利用時の問題 22
問題 ・path-filteringを使うとGitHub ステータスの RequiredにPRのマージ時にグリーンになってほしい ジョブを指定できない ⇒ 安全にPRをマージできない! 23
問題 /ios /android GitHub GitHub android-test-job path-filtering/filter ios-test-job CircleCI Required
Required 24
問題 /ios /android GitHub GitHub android-test-job path-filtering/filter ios-test-job CircleCI Required
Required 変更あり 25
問題 /ios /android GitHub GitHub android-test-job path-filtering/filter ios-test-job CircleCI Required
Required 変更あり 26
問題 /ios /android GitHub GitHub android-test-job path-filtering/filter ios-test-job CircleCI Required
Required 変更あり 27 ios-test-jobは実行されない → Requiredの項目がグリーンに ならない → マージできない
2. 問題解決のアプローチ手法 28
アプローチ ・あるコミットに対して、”PRマージ時にグリーンに なってほしいジョブを含むワークフローがグリーンに なっているか”をチェックするジョブを GitHub ステータスのRequiredに指定する 29
アプローチ /ios /android GitHub GitHub android-test-job path-filtering/filter ios-test-job CircleCI Required
Required 30
アプローチ /ios /android GitHub GitHub android-test-job path-filtering/filter ios-test-job workflow-status-check-job New
! CircleCI Required Required 31
アプローチ /ios /android GitHub GitHub android-test-job path-filtering/filter ios-test-job workflow-status-check-job New
! CircleCI Required Required Required 32
アプローチ /ios /android GitHub GitHub android-test-job path-filtering/filter ios-test-job workflow-status-check-job New
! CircleCI Required Required Required 33 PRマージ時にグリーンになってほしい ジョブ (android-test-job や ios-test- job) を含むワークフローがグリーンに なっていたらグリーンになるジョブ workflow-status-check-job
workflow-status-check-job の実装 34
workflow-status-check-jobの実装 ・ CircleCI API v2 (*3) を利用して実現する ・ 全体の実行時間は13秒程度 *3:
https://circleci.com/docs/api/v2/index.html 35
workflow-status-check-jobの実装 直近に実行したパイプラインのリストを取得 Step 1 パイプラインに紐づくワークフローを取得 Step 2 ワークフローの状態を取得 Step 3
特定のワークフローが成功していたら自分自身をグリーンにする Step 4 CircleCI API v2 CircleCI API v2 CircleCI API v2 36 → Requiredにしたいジョブを含むワークフロー
いつ実行させる? 37
いつ実行させる? /ios /android GitHub GitHub android-test-job path-filtering ios-test-job workflow-status-check-job CircleCI
Required 38
いつ実行させる? /ios /android GitHub GitHub android-test-job path-filtering ios-test-job workflow-status-check-job CircleCI
Required 確認対象のワークフローが 終わった後に実行させたい workflow-status-check-job 39
いつ実行させる? /ios /android GitHub GitHub android-test-job path-filtering ios-test-job workflow-status-check-job CircleCI
Required 確認対象のワークフローが 終わった後に実行させたい ↓ 確認対象のワークフロー内の 最後のジョブでRerunさせる workflow-status-check-job CircleCI API v2 40
なぜRerun? そこで初めて実行すれば? 41 https://circleci.com/docs/api/v2/index.html#tag/Workflow → 単体のワークフローを実行するAPIが 無いため、一度実行させてからRerun
実行結果 42
実行結果(成功する場合) 43
実行結果(成功する場合) 44 マージ時にグリーンになってほしいジョブ (ios-test-job) が グリーンになったのでRequiredの項目をグリーンに!
実行結果(失敗する場合) 45
実行結果(失敗する場合) 46 マージ時にグリーンになってほしいジョブ (ios-test-job) が レッド。Requiredの項目はレッドのまま!
問題を振り返る 47
問題 ・path-filteringを使うとGitHub ステータスの RequiredにPRのマージ時にグリーンになってほしい ジョブを指定できないため、PRを安全にマージできない 48
問題に対してのアプローチ手法の効果 → PRのマージ時にグリーンになってほしいジョブを含む ワークフローの状態を取得するジョブをRequiredに することでPRを安全にマージできるようになった 49
問題に対してのアプローチ手法の効果 → PRのマージ時にグリーンになってほしいジョブを含む ワークフローの状態を取得するジョブをRequiredに することでPRを安全にマージできるようになった 50 解 決
3. アプローチ手法の課題 51
アプローチ手法の課題 ・コードのメンテナンスの属人化 ・CircleCI APIを利用するコードの言語何にするか問題 ・チームの導入を考えるとチーム内共通言語(iOSならSwift) で書いたほうがメンテナンス性が上がる 52 コード:
https://github.com/tokizuoh/circleci-test-2022-10-01
完