Introduction to Nextcloud's Android development processes and tools being used. Held at the Mobile Development FFM User Group in Frankfurt giving an introduction to the apps features, process to go from an idea to a released features, the steps taken in between and the different release channels and tools being used to bring the app and its features to the users.
2. Nextcloud Android Client
Overview
• Forked in May 2016
• 4 Feature releases since then
• ~200 new users per day
• Maintained by two spare time devs
• OSS – GPLv2 & AGPLv3
• Published on Play store and F-Droid
3. Nextcloud Android Client
Overview
• Instant uplod for photo & video
• Manual uploads
• Multi account capability
• Document provider (read-only)
• File sharing incl. permissions
• Minimal media player
• Multi select with CAB
• Quick actions via FAB
• Respects metered wifi
• Available in 32 languages
6. General Development Model
Collective Code Construction Contract - C4
• Use OSS share-alike licence
• Use Git+Issue Tracker on a hosted platform and document your code style
• Trunk-based development
• Create issue, open PR, get it merged
http://rfc.zeromq.org/spec:42/C4/
master
8. General Development Model
Github Flow
• Create Branch
• Add commits
• Open PR
• Discuss and review code
• Deploy to production
• Merge
https://guides.github.com/introduction/flow/
master
branch
9. General Development Model
Decission: custom Github Flow
• Create Branch
• Add commits
• Open PR
• Discuss and review code
• Merge
• Deploy to designated release channel
https://guides.github.com/introduction/flow/
master
branch
10. From Idea to Release
1. Open issues for discussion
2. Positive decision on issue
3. Implementation + PR creation
4. Code Review & Fixes
5. Release to designated channel
approved
1. to develop
2. developing
3. to review
4. to release
11. Tools used in between
Development
• Github for
– dvcs
– issue tracking
– to enforce peer reviews
• Travis for
– unit testing (active)
– integration testing (deactivated atm)
– Quality metrics / coverage (tbd)
Octocat by GitHub, Inc. | Travis CI mascot by Travis CI, GmbH
12. Tools used in between
Development
• Transifex for
– translations
– Pushed to github repo via Jenkins job
• Jenkins for
– Pushing translations to the code repo
Transifex by https://www.transifex.com | Jenkins mascot by https://jenkins.io
13. Tools used in between
Communication
• Quassel (irc) for
– Short living instant discussion
– Quassel saves the irc history (server)
• Discourse for
– Community forum (feedback/discussion)
– Beta/RC announcements
Quassel logo by http://quassel-irc.org | Discourse logo by Civilized Discourse Construction Kit, Inc.
17. Release channels
From beta to stable - Summary
• Labeled „3. to review“ gets merged to beta
• Beta branch gets released as required
• Beta app installed in parallel to stable/RC
• Release Candidate needs to survive in the wild
for two weeks
– then stable gets released
• Using semantic versioning
Semantic verisoning: http://semver.org/
18. Nextcloud Android App
Development Insight- Summary
• Provide an easy entrance
• As little process as possible
• As much process as necessary
• Document your process
• Utilize release channels for community power
• Collaborate, plan and discuss in the open
easy, open & transparent
19. Some links
For your after work browsing
• Development / Git Processes
– http://rfc.zeromq.org/spec:42/C4/
– http://nvie.com/posts/a-successful-git-branching-model/
– https://guides.github.com/introduction/flow/
• Nextcloud Android App Process & Links
– https://github.com/nextcloud/android/blob/master/CONTRIBUTING.md
– https://www.transifex.com/nextcloud/nextcloud/android/
– https://webchat.freenode.net/?channels=nextcloud-mobile
– https://travis-ci.org/nextcloud/android/builds/
• Used Tools
– https://www.transifex.com
– https://travis-ci.org
– http://semver.org
– https://jenkins.io
– https://lgtm.co
– http://www.discourse.org
– http://quassel-irc.org