Upgrade to Pro — share decks privately, control downloads, hide ads and more …

From hundred (86) to zero (7). How we publish 6...

Stefan M.
October 04, 2023

From hundred (86) to zero (7). How we publish 67 Android apps in under 7 minutes.

Given at Mobile DevOps Summit 2023

Imagine being able to publish 67 Android white-labeled-apps in under 7 minutes. It may seem like an impossible feat, but our team has turned this into a reality.

Since 2017, we have committed ourselves to a rigorous publishing schedule, releasing our apps every two weeks without fail. This relentless dedication has taught us valuable lessons about the importance of investing in our release pipeline and continuously improving it.

In this talk, we will share the secrets behind our remarkable achievement and delve into the strategies and tools that have enabled us to streamline the publishing process.

3 key takeaways from this session:
1. Continuously investing into your release pipeline is critical for your success
2. Sometimes it is not obvious which changes require more attention
3. ...

Stefan M.

October 04, 2023
Tweet

More Decks by Stefan M.

Other Decks in Technology

Transcript

  1. From hundred (86) to zero (7). How we publish 67

    Android apps in under 7 minutes.
  2. This is me Stefan May Live in Germany Android Developer

    since 2014 Senior Android Developer @ioki since 2020 StefMa.medium.com github.com/StefMa x.com/StefMa91 StefMa.guru
  3. More fun Machine with less specs increase the build time

    to >90 min CI build timeout of 90 minutes!
  4. More fun Machine with less specs increase the build time

    to >90 min CI build timeout of 90 minutes! Solution: Disable Proguard/R8 again
  5. More fun Machine with less specs increase the build time

    to >90 min CI build timeout of 90 minutes! Solution Hotfix: Disable Proguard/R8 again
  6. Find a way out What we can not change: Multiple

    apps R8 in sequence What we can change:
  7. Find a way out What we can not change: Multiple

    apps R8 in sequence Hotfix for single apps What we can change:
  8. Find a way out What we can not change: Multiple

    apps R8 in sequence Hotfix for single apps Google servers HTTP status code 500 What we can change:
  9. Find a way out What we can not change: Multiple

    apps R8 in sequence Hotfix for single apps Google servers HTTP status code 500 What we can change: Single CI workflow to build them all
  10. WLA0 WLA1 WLA2 WLA3 WLA4 WLA5 WLA6 WLA7 WLA8 WLA9

    WLA10 WLA11 WLA12 WLA13 WLA14 Single Workflow
  11. orchestra workflow WLA1 WF WLA2 WF WLA3 WF WLA4 WF

    WLA5 WF WLA6 WF WLA7 WF WLA8 WF A0 F WLA10 WF WLA11 WF WLA12 WF WLA13 WF WLA14 WF WLA15 WF WLA16 WF W W WLA9 WF WLA19 WF WLA20 WF WLA21 WF WLA22 WF WLA23 WF WLA24 WF WLA25 WF WLA26 WF A18 F
  12. Let’s change it – Fixes Hotfixes on single apps ✅

    Google server HTTP status code 500 ✅
  13. Let’s change it – Fixes Hotfixes on single apps ✅

    Google server HTTP status code 500 ✅ Don’t exceed build timeout ✅
  14. Let’s change it – Fixes Hotfixes on single apps ✅

    Google server HTTP status code 500 ✅ Don’t exceed build timeout ✅ Scales horizontally ✅
  15. Half time show Improved CI build time from 86 min

    to stable 7 min Replace single workflow with multiple ones
  16. Half time show Improved CI build time from 86 min

    to stable 7 min Replace single workflow with multiple ones R8 enabled!
  17. But! – Architecture - app build.gradle | include("lib-wla") | include("lib-logger")

    | include("feature-registration") | include("feature-ride-creation") src/main/someKotlinClasses - lib-wla - lib-logger - feature-registration - feature-ride-creation
  18. But! – Architecture - app build.gradle | include("lib-wla") | include("lib-logger")

    | include("feature-registration") | include("feature-ride-creation") src/main/someKotlinClasses - lib-wla - lib-logger - feature-registration - feature-ride-creation - ioki/app build.gradle | include(":ioki-library:lib-core") - lib-core build.gradle | include("lib-logger") | include("feature-registration") | include("feature-ride-creation") src/main/someKotlinClasses - lib-logger - feature-registration - feature-ride-creation
  19. But! – Architecture - app build.gradle | include("lib-wla") | include("lib-logger")

    | include("feature-registration") | include("feature-ride-creation") src/main/someKotlinClasses - lib-wla - lib-logger - feature-registration - feature-ride-creation - ioki/app build.gradle | include(":ioki-library:lib-core") - lib-core build.gradle | include("lib-logger") | include("feature-registration") | include("feature-ride-creation") src/main/someKotlinClasses - lib-logger - feature-registration - feature-ride-creation
  20. But! – Nexus Publish library to Nexus a maven repository

    Library lint & test happens on library release day
  21. But! – Nexus Publish library to Nexus a maven repository

    Library lint & test happens on library release day Apps consume library on app release day
  22. Summary Improved CI build time from 86 min to stable

    7 min Replace single workflow with multiple ones R8 enabled!
  23. Summary Improved CI build time from 86 min to stable

    7 min Replace single workflow with multiple ones R8 enabled! Possible because:
  24. Summary Improved CI build time from 86 min to stable

    7 min Replace single workflow with multiple ones R8 enabled! Possible because: Architecture & Nexus