
Disclaimer
Disclaimer

Disclaimer


Disclaimer



You have been warned!
THE IDEAS ARE PROVIDED "AS ARE", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE IDEAS OR THE USE OR OTHER DEALINGS IN THE IDEAS.
Let me
run a command
Disclaimer #2
Disclaimer #2




Before
- 1-2 builds a day
- 5-15 minutes per build
After
- 5-20 builds a day
- 0* seconds per build



Quad Programming
Ingredients
- agile development process
- quality assurance (tests et al.)
- VCS, obviously
- continuous integration server
- app testing platform

Communication
is the key


Acceptance criteria
Definition of Done
Definition of Ready
Kanban?
- Visualization
- Work in progress
- Lead/cycle time

Zero bugs tolerance







Automate communication?

Automate communication?


Automated testing
- Espresso
- Spock
- JUnit 4


Do you even lint, bro?
android { lintOptions { abortOnError false } }
Do you even lint, bro?
android { lintOptions { abortOnError false } }
Do you even lint, bro?
android { lintOptions { disable 'InvalidPackage' } }
Do you even lint, bro?
android { lintOptions { disable 'InvalidPackage' } }





StrictMode


Version Control System


Git Flow
- master
- develop
- release && hotfix
- feature || flag

Release
git stash git checkout ... # update version in build.gradle or elsewhere git commit ... git checkout ... git merge ... git tag ... git checkout ... git merge ... git branch ... git push git push ...
Continuous Integration


Travis
- hosted
- paid
- YAML
- bash, gradle
Continuous Integration

Travis setup
language: android android: components: - build-tools-XX.Y.Z - extra-android-m2repository
Security & Trust
env: global: - secure: l9oaircRM9VBHMbt... - secure: dg14m8/CNWGdvpqP... openssl aes-256-cbc -d -k "$file_password" -in ci/app.keystore.enc -out ci/app.keystore
App testing platform



15 - 30 minutes
Testfairy
- modifies APK
- powerful stats
- screen recording (paid)
Crashlytics
- testers need to install Crashlytics app
- organizations
App testing platform

curl https://app.testfairy.com/api/upload -F api_key="$testfairy_key" -F file=path/to/app-staging-debug.apk -F testers_groups='staging' -F comment="$COMMENT"
App testing platform
./gradlew crashlyticsUploadDistributionDebug ./gradlew cUDD ext.betaDistributionGroupAliases = 'testers' ext.betaDistributionReleaseNotesFilePath = 'crashlytics_release_notes.txt'
App testing platform
Delivery!


~2 hours

Delivery!


~2 hours


Delivery!
sudo pip install google-api-python-client python basic_upload_apks.py com.company.android path/to/app-production-release.apk
Android
iOS?
Need working example?
Let us
look at the results
Disclaimer #3
TU && Q || A
Continuous Delivery with Ease / Toast Wrocław March 2017
By Maciej Górski
Continuous Delivery with Ease / Toast Wrocław March 2017
- 1,788