Slide 1

Slide 1 text

Caching on Bitrise @shaunkawano

Slide 2

Slide 2 text

git clone bitrise.yml
 (bitrise.io) bitrise.yml
 (in-repository)

Slide 3

Slide 3 text

No content

Slide 4

Slide 4 text

Caching on Bitrise

Slide 5

Slide 5 text

IUUQTEFWDFOUFSCJUSJTFJPDBDIJOHBCPVUDBDIJOH

Slide 6

Slide 6 text

•Stored securely in Amazon S3 •Per specific branches •By default: will be deleted after 7 days without any build Caching on Bitrise

Slide 7

Slide 7 text

IUUQTEFWDFOUFSCJUSJTFJPDBDIJOHBCPVUDBDIJOH

Slide 8

Slide 8 text

IUUQTEFWDFOUFSCJUSJTFJPDBDIJOHBCPVUDBDIJOH Caching
 gradle & maven

Slide 9

Slide 9 text

•cache-pull •Pull cache from remote server if available •cache-push •Check if cache needs to be updated •Upload the caching content if required Caching Steps

Slide 10

Slide 10 text

cache-pull _prepare: title: Prepare fastlane steps: - script: inputs: - content: |- bundle install --path vendor/bundle - cache-pull: {}

Slide 11

Slide 11 text

cache-pull _prepare: title: Prepare fastlane steps: - script: inputs: - content: |- bundle install --path vendor/bundle - cache-pull: {}

Slide 12

Slide 12 text

cache-push _cache: title: Cache gradle and maven dependencies steps: - cache-push: inputs: - cache_paths: |- $HOME/.gradle ./.gradle $HOME/.m2 - ignore_check_on_paths: |- $HOME/.gradle/caches/*.lock ./.gradle/*.lock ./.gradle/*.bin

Slide 13

Slide 13 text

cache-push _cache: title: Cache gradle and maven dependencies steps: - cache-push: inputs: - cache_paths: |- $HOME/.gradle ./.gradle $HOME/.m2 - ignore_check_on_paths: |- $HOME/.gradle/caches/*.lock ./.gradle/*.lock ./.gradle/*.bin

Slide 14

Slide 14 text

Workflow test: title: Run unit test before_run: - _prepare after_run: - _cache steps: - script: inputs: - content: |- bundle exec fastlane test

Slide 15

Slide 15 text

Workflow test: title: Run unit test before_run: - _prepare after_run: - _cache steps: - script: inputs: - content: |- bundle exec fastlane test

Slide 16

Slide 16 text

No content

Slide 17

Slide 17 text

Try pushing library update

Slide 18

Slide 18 text

Again, 
 cached gradle / maven data is used

Slide 19

Slide 19 text

No content

Slide 20

Slide 20 text

Want to re-build if certain files are modified

Slide 21

Slide 21 text

_parepareCacheEnv: title: Set environment variable if we can use cache or not steps: - script: inputs: - content: |- if [[ -n $(git diff-tree --no-commit-id —name-only -r $GIT_CLONE_COMMIT_HASH -- find -name 'versions.gradle' ‘app/build.gradle') ]] then envman add --key USE_CACHE --value "false" echo "_parepareCacheEnv result: USE_CACHE == false" else envman add --key USE_CACHE --value "true" echo "_parepareCacheEnv result: USE_CACHE == true" fi

Slide 22

Slide 22 text

_parepareCacheEnv: title: Set environment variable if we can use cache or not steps: - script: inputs: - content: |- if [[ -n $(git diff-tree --no-commit-id —name-only -r $GIT_CLONE_COMMIT_HASH -- find -name 'versions.gradle' ‘app/build.gradle') ]] then envman add --key USE_CACHE --value "false" echo "_parepareCacheEnv result: USE_CACHE == false" else envman add --key USE_CACHE --value "true" echo "_parepareCacheEnv result: USE_CACHE == true" fi

Slide 23

Slide 23 text

_parepareCacheEnv: title: Set environment variable if we can use cache or not steps: - script: inputs: - content: |- if [[ -n $(git diff-tree --no-commit-id —name-only -r $GIT_CLONE_COMMIT_HASH -- find -name 'versions.gradle' ‘app/build.gradle') ]] then envman add --key USE_CACHE --value "false" echo "_parepareCacheEnv result: USE_CACHE == false" else envman add --key USE_CACHE --value "true" echo "_parepareCacheEnv result: USE_CACHE == true" fi

Slide 24

Slide 24 text

_parepareCacheEnv: title: Set environment variable if we can use cache or not steps: - script: inputs: - content: |- if [[ -n $(git diff-tree --no-commit-id —name-only -r $GIT_CLONE_COMMIT_HASH -- find -name 'versions.gradle' ‘app/build.gradle') ]] then envman add --key USE_CACHE --value "false" echo "_parepareCacheEnv result: USE_CACHE == false" else envman add --key USE_CACHE --value "true" echo "_parepareCacheEnv result: USE_CACHE == true" fi

Slide 25

Slide 25 text

_parepareCacheEnv: title: Set environment variable if we can use cache or not steps: - script: inputs: - content: |- if [[ -n $(git diff-tree --no-commit-id —name-only -r $GIT_CLONE_COMMIT_HASH -- find -name 'versions.gradle' ‘app/build.gradle') ]] then envman add --key USE_CACHE --value "false" echo "_parepareCacheEnv result: USE_CACHE == false" else envman add --key USE_CACHE --value "true" echo "_parepareCacheEnv result: USE_CACHE == true" fi

Slide 26

Slide 26 text

test: title: Run unit test before_run: - _parepareCacheEnv - _prepare after_run: - _cache steps: - script: inputs: - content: |- bundle exec fastlane test

Slide 27

Slide 27 text

test: title: Run unit test before_run: - _parepareCacheEnv - _prepare after_run: - _cache steps: - script: inputs: - content: |- bundle exec fastlane test

Slide 28

Slide 28 text

test: title: Run unit test before_run: - _parepareCacheEnv - _prepare after_run: - _cache steps: - script: inputs: - content: |- bundle exec fastlane test

Slide 29

Slide 29 text

_prepare: title: Prepare fastlane steps: - script: inputs: - content: |- bundle install --path vendor/bundle - cache-pull: run_if: '{{getenv "USE_CACHE" | eq "true"}}'

Slide 30

Slide 30 text

_prepare: title: Prepare fastlane steps: - script: inputs: - content: |- bundle install --path vendor/bundle - cache-pull: run_if: '{{getenv "USE_CACHE" | eq "true"}}'

Slide 31

Slide 31 text

Bitrise re-built without cache successfully!

Slide 32

Slide 32 text

No content

Slide 33

Slide 33 text

Summary

Slide 34

Slide 34 text

•Use cache-pull & cache-push steps for enabling caching on Bitrise •Configuration may be required •Ask Bitrise team for help :) Summary

Slide 35

Slide 35 text

Caching on Bitrise @shaunkawano Thank you!