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
BuckOutsideValley.pdf
Search
Bruno Rocha
November 09, 2019
1
97
BuckOutsideValley.pdf
Bruno Rocha
November 09, 2019
Tweet
Share
More Decks by Bruno Rocha
See All by Bruno Rocha
Avoiding Release Anxiety
rockbruno
0
17
Creating Scalable iOS Apps
rockbruno
0
10
iOS Security - Hacking iOS Apps
rockbruno
0
14
Featured
See All Featured
How To Stay Up To Date on Web Technology
chriscoyier
788
250k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
6
430
4 Signs Your Business is Dying
shpigford
180
21k
Raft: Consensus for Rubyists
vanstee
136
6.6k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
232
17k
Automating Front-end Workflow
addyosmani
1366
200k
Why You Should Never Use an ORM
jnunemaker
PRO
54
9.1k
The MySQL Ecosystem @ GitHub 2015
samlambert
250
12k
The Power of CSS Pseudo Elements
geoffreycrofte
73
5.3k
The Cost Of JavaScript in 2023
addyosmani
45
6.8k
Agile that works and the tools we love
rasmusluckow
327
21k
Visualization
eitanlees
145
15k
Transcript
Buck Build outside Silicon Valley Bruno Rocha - Software Engineer
+
None
None
None
Tons of developers Several apps that share components Giant codebases
Developers work in very localized squads (localized changes) Valley Companies Ability to create internal helper tools
None
iFood 1. 40+ Developers 2. Four apps that need to
share components 3. Developers work in very specialized squads 4. Most pull requests are very localized
.pbxproj conflicts
Maintaining modules is hard
Huge build times
No project conflicts Automatic management of modules Easy way to
share components between projects Build only what was changed, both locally and in the CI All apps in one repo Valley Companies
Monorepo Build Systems
Monorepo Build Systems
Bazel Build Monorepo Build Systems
Buck Build Monorepo Build Systems
App App Splash Checkout Profile Login Architecture Client Keychain …
More modules = less builds!
Multirepos vs Monorepos App A Repo 1 App B Library
C Repo 2 Repo 3
Multirepos vs Monorepos App A Repo 1 App B Library
C
App A Project A App B Project B Library C
Library C
App A Project A App B Project B Library C
Library C Builds Library C, then App A
App A Project A App B Project B Library C
Library C Builds Library C, then App A Builds Library C again, then App B
//MyApps:AppA Projects A/B //MyApps:AppB //MyLibs:LibraryC
//MyApps:AppA Projects A/B //MyApps:AppB //MyLibs:LibraryC
Builds Library C, then App A Builds App B only
//MyApps:AppA Projects A/B //MyApps:AppB //MyLibs:LibraryC
Buck Caches (Rulekeys) //MyLibs:LibraryC Hash of dependencies Compiler flags Compiler
version Buck version Source contents 3fb80a353db183675fd561b284bc5085
CI Builds PR 1 PR 2 PR 3
CI Builds PR 1 PR 2 PR 3 30 minutes
30 minutes 30 minutes
CI Builds PR 1 PR 2 PR 3
CI Builds PR 1 PR 2 PR 3 30 minutes
5 minutes 3 minutes Cache Cache
Network Cache
Network Cache Upload Cache Download Remote Cache
Creating iOS Apps with Buck Defining rules and using the
build system
None
None
.buckconfig
Buck Rules (Libraries & Tests)
Buck Rules (Libraries & Tests)
Buck Rules (Libraries & Tests)
Buck Rules (Libraries & Tests)
Building Libraries //Libraries/uUserData:UserData {root}{BUCK file path}{Rule name}
Building Libraries //Libraries/uUserData:UserData {root}{BUCK file path}{Rule name}
Build Trace buck-out/logs/build.trace
Testing Libraries
Testing Libraries
App A Library B Library A Library D Library C
Saving time while testing iFood with Xcode: All PRs tested all modules
App A Library B Library A Library D Library C
iFood with Buck: PRs only test the affected graph Saving time while testing
Buck Rules (iOS Apps)
Buck Rules (iOS Apps)
Building iOS Apps buck install {rule} -r
Building iOS Apps buck install {rule} -r
Visual Studio Code + SourceKit-LSP + CodeLLDB
Xcode Project Generation
Xcode Project Generation
None
iFood’s Build/Test CI Evolution Xcode: ~32 minutes Buck + Cache:
~21 minutes Buck + Cache + Only Test Graph: ~9 minutes
iFood’s .pbxproj Conflicts Evolution Xcode: All the time Buck: None
at all
iFood’s Modularization Evolution Xcode: Create a podspec Create an example
project Create the files Add it to the podfile Make our CI run the example’s tests Hope changes won’t break the spec Buck: Just create a folder!
airbnb/BuckSample
Buck Slack
Buck Slack
#VemProiFood + swiftrocks.com @rockthebruno Obrigado!