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
690
iOS 曜日ランキングが出来上がるまで
tokizuoh
0
2.4k
メインスレッドをブロックさせないためのSwift Concurrencyクイズ
tokizuoh
1
5.4k
運動モチベーション継続のためのiOSアプリ開発
tokizuoh
0
980
Xcode 15 で swift run が遅い
tokizuoh
0
3.7k
累積和で配列の処理効率を改善しよう
tokizuoh
0
670
Other Decks in Programming
See All in Programming
JJUG CCC 2025 Fall: Virtual Thread Deep Dive
ternbusty
3
480
乱雑なコードの整理から学ぶ設計の初歩
masuda220
PRO
32
14k
Chart.jsで長い項目を表示するときのハマりどころ
yumechi
0
150
Vueで学ぶデータ構造入門 リンクリストとキューでリアクティビティを捉える / Vue Data Structures: Linked Lists and Queues for Reactivity
konkarin
1
340
歴史から学ぶ「Why PHP?」 PHPを書く理由を改めて理解する / Learning from History: “Why PHP?” Rediscovering the Reasons for Writing PHP
seike460
PRO
0
160
「正規表現をつくる」をつくる / make "make regex"
makenowjust
1
730
CSC509 Lecture 11
javiergs
PRO
0
310
Flutterチームから作る組織の越境文化
findy_eventslides
0
560
GraalVM Native Image トラブルシューティング機能の最新状況(2025年版)
ntt_dsol_java
0
160
ゼロダウンタイムでミドルウェアの バージョンアップを実現した手法と課題
wind111
0
210
Doc Translate - LLMを活用したコードドキュメント自動翻訳VSCode拡張機能
eycjur
0
110
Evolving NEWT’s TypeScript Backend for the AI-Driven Era
xpromx
0
160
Featured
See All Featured
The Power of CSS Pseudo Elements
geoffreycrofte
80
6.1k
How to Think Like a Performance Engineer
csswizardry
28
2.3k
The Cult of Friendly URLs
andyhume
79
6.7k
Docker and Python
trallard
46
3.7k
The Cost Of JavaScript in 2023
addyosmani
55
9.3k
Bootstrapping a Software Product
garrettdimon
PRO
307
110k
What’s in a name? Adding method to the madness
productmarketing
PRO
24
3.8k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.2k
Large-scale JavaScript Application Architecture
addyosmani
514
110k
What's in a price? How to price your products and services
michaelherold
246
12k
VelocityConf: Rendering Performance Case Studies
addyosmani
333
24k
Navigating Team Friction
lara
190
16k
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
完