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.6k
メインスレッドをブロックさせないためのSwift Concurrencyクイズ
tokizuoh
1
5.7k
運動モチベーション継続のためのiOSアプリ開発
tokizuoh
0
1k
Xcode 15 で swift run が遅い
tokizuoh
0
3.8k
累積和で配列の処理効率を改善しよう
tokizuoh
0
700
Other Decks in Programming
See All in Programming
The free-lunch guide to idea circularity
hollycummins
0
330
Codex CLIのSubagentsによる並列API実装 / Parallel API Implementation with Codex CLI Subagents
takatty
2
270
社内規程RAGの精度を73.3% → 100%に改善した話
oharu121
13
8.3k
メタプログラミングで実現する「コードを仕様にする」仕組み/nikkei-tech-talk43
nikkei_engineer_recruiting
0
210
Rで始めるML・LLM活用入門
wakamatsu_takumu
0
200
エンジニアの「手元の自動化」を加速するn8n 2026.02.27
symy2co
0
180
Linux Kernelの1文字のミスで 権限昇格ができた話
rqda
0
2.1k
ふつうの Rubyist、ちいさなデバイス、大きな一年
bash0c7
0
1.1k
CSC307 Lecture 15
javiergs
PRO
0
260
OTP を自動で入力する裏技
megabitsenmzq
0
120
[SF Ruby Feb'26] The Silicon Heel
palkan
0
120
PHPで TLSのプロトコルを実装してみる
higaki_program
0
410
Featured
See All Featured
Fashionably flexible responsive web design (full day workshop)
malarkey
408
66k
Into the Great Unknown - MozCon
thekraken
40
2.3k
Test your architecture with Archunit
thirion
1
2.2k
The Curious Case for Waylosing
cassininazir
0
280
Navigating the moral maze — ethical principles for Al-driven product design
skipperchong
2
300
SEOcharity - Dark patterns in SEO and UX: How to avoid them and build a more ethical web
sarafernandez
0
150
Site-Speed That Sticks
csswizardry
13
1.1k
Context Engineering - Making Every Token Count
addyosmani
9
770
Why Mistakes Are the Best Teachers: Turning Failure into a Pathway for Growth
auna
0
93
Design of three-dimensional binary manipulators for pick-and-place task avoiding obstacles (IECON2024)
konakalab
0
390
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
1
330
Everyday Curiosity
cassininazir
0
170
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
完