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,534