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.3k
モノレポにおける path-filtering利用時でも GitHub ステータスのRequiredを 機能させたい!
tokizo
October 24, 2022
Tweet
Share
More Decks by tokizo
See All by tokizo
iOS 曜日ランキングが出来上がるまで
tokizuoh
0
1.3k
メインスレッドをブロックさせないためのSwift Concurrencyクイズ
tokizuoh
1
3.2k
運動モチベーション継続のためのiOSアプリ開発
tokizuoh
0
750
Xcode 15 で swift run が遅い
tokizuoh
0
3.4k
累積和で配列の処理効率を改善しよう
tokizuoh
0
510
Other Decks in Programming
See All in Programming
The Efficiency Paradox and How to Save Yourself and the World
hollycummins
0
190
Beyond Laravel Octane - Hyperf for Laravel Artisans
albertcht
1
140
20241004 モノタロウ式~ドメインモデリングとリアーキテクチャ
monotaro
PRO
2
360
WEBアプリケーションにおけるAWS Lambdaを用いた大規模な非同期処理の実践
delhi09
PRO
7
4.4k
CSC509 Lecture 02
javiergs
PRO
0
170
コードレビューと私の過去と未来
jxmtst
0
290
Pydantic x Database API:turu-pyの開発
yassun7010
1
750
Cohesion in Modeling and Design
mploed
3
220
実践Dash - 手を抜きながら本気で作るデータApplicationの基本と応用 / Dash for Python and Baseball
shinyorke
2
640
デバッグの話 / Debugging for Beginners
kaityo256
PRO
8
650
NEWTにおけるiOS18対応の進め方
ryu1sazae
0
250
Cancel Next.js Page Navigation: Full Throttle
ypresto
1
220
Featured
See All Featured
The Cost Of JavaScript in 2023
addyosmani
43
5.9k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
327
21k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
4
240
Navigating Team Friction
lara
183
14k
Raft: Consensus for Rubyists
vanstee
136
6.6k
Become a Pro
speakerdeck
PRO
24
4.9k
Git: the NoSQL Database
bkeepers
PRO
425
64k
Building Adaptive Systems
keathley
38
2.2k
Web development in the modern age
philhawksworth
205
10k
For a Future-Friendly Web
brad_frost
174
9.3k
Clear Off the Table
cherdarchuk
91
320k
Bash Introduction
62gerente
608
210k
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
完