Slide 1

Slide 1 text

Optimize Flutter Workflow on Bitrise Hiroki Matsue (@macs_6) Mar 26th, 2019 Flutter Meetup Tokyo #8

Slide 2

Slide 2 text

This talk is about CI steps time reduction

Slide 3

Slide 3 text

Target Listeners

Slide 4

Slide 4 text

Who know this

Slide 5

Slide 5 text

Faster CI makes devs happier

Slide 6

Slide 6 text

Reulst on my project Timeout => 9 minutes Just few minutes, but Free plan is not so bad ¯\(π)/¯

Slide 7

Slide 7 text

Flutter CI steps 1. Install Flutter 2. Execute "flutter analyze" 3. Execute "flutter test" 4. Execute "flutter build" (Android and iOS both)

Slide 8

Slide 8 text

(Each results were measured with my personal project)

Slide 9

Slide 9 text

Try "Flutter Install" step optimization

Slide 10

Slide 10 text

TL;DR: Just wait new Hybrid stack https://discuss.bitrise.io/t/making-flutter-builds-faster/3976/8

Slide 11

Slide 11 text

What if we cache Flutter? • flutter installation: 137sec 㱺 2sec (-135sec) • cache-pull: 11sec 㱺 27sec (+16sec) • cache-push: 92sec 㱺 209sec (+117sec) Only remote storage was changed, no time reduction

Slide 12

Slide 12 text

Try "flutter build" step optimization

Slide 13

Slide 13 text

TL;DR: Cache following items • ios/Pods/ • $HOME/Library/Developer/Xcode/DerivedData

Slide 14

Slide 14 text

Pods caching result • flutter build ios: 172sec 㱺 99sec (-73sec) • cache-pull: 9sec => 11sec (+2sec) • cache-push: 58sec 㱺 72sec (+14sec) Very effective !

Slide 15

Slide 15 text

DerivedData caching result • flutter build ios: 140sec 㱺 54sec (-86sec) • cache-pull: 15sec => 15sec (+0sec) • cache-push: 85sec 㱺 141sec (+56sec)

Slide 16

Slide 16 text

Non effective items on my project • build/ • ios/Flutter/ • ios/.symlinks/ • $HOME/.gradle/ • android/.gradle/ cache-push tooks too long time for .gradle on my project.

Slide 17

Slide 17 text

References • "60% faster builds: force Xcode to use caching on Bitrise!" https://medium.com/@bitrise/60-faster-builds-force-xcode- to-use-caching-on-bitrise-af8979ca39a6 • "Cache Gradle dependencies on Bitrise" https:// medium.com/bitrise/cache-gradle-dependencies-on- bitrise-cf19a2580d07

Slide 18

Slide 18 text

Faster "flutter analyze" and "flutter test"? Sorry, I have no idea now ¯\(π)/¯

Slide 19

Slide 19 text

Other ideas • Put dependencies to the repo • Use build scheduling for long workflows • Pay for Bitrise • Concurrent build for ios and apk

Slide 20

Slide 20 text

Summary Caching following items, and using new Flutter Hybrid stacks will be efficient. • ios/Pods/ • $HOME/Library/Developer/Xcode/DerivedData

Slide 21

Slide 21 text

Thanks