Thanks for wanting to contribute source code to Nextcloud. That's great!
New contributions are added under AGPL version 3.
We are all about quality while not sacrificing speed so we use a very pragmatic workflow.
master
branchmaster
2.0.0
) or bugfix (e.g. 2.0.1
) release will be backported to the respective bugfix branch (e.g. 2.0.x
or 2.1.x
)Our formatter setup is rather simple:
There are three build variants
git commit -a
git push
To make sure your new pull request does not contain commits which are already contained in previous PRs, create a new branch which is a clone of upstream/master.
git fetch upstream
* git checkout -b my_new_master_branch upstream/master
* If you want to rename that branch later: git checkout -b my_new_master_branch_with_new_name
* Push branch to server: git push -u origin name_of_local_master_branch
* Use GitHub to issue PR
### 4. Backport pull request:
Use backport-bot via "/backport to stable-version", e.g. "/backport to stable-3.7".
This will automatically add "backport-request" label to PR and bot will create a new PR to targeted branch once the base PR is merged.
If automatic backport fails, it will create a comment.
### 5. Pull requests that also need changes on library
For speeding up developing, we do use a master snapshot of nextcloud-library, provided by jitpack.io.
This means that if a breaking change is merged on library, master branch of the app will fail.
To limit this risk please follow this approach:
- on app PR: first use a reference to your library branch in build.gradle: ext -> androidLibraryVersion, e.g. androidLibraryVersion = "changeSearch-SNAPSHOT"
- on library PR: use label "client change required" to indicate that this is breaking change. This will prevent GitHub from merging it.
Once both PRs are reviewed and ready to merge:
- on library PR: remove label and merge it (for a short time now master cannot be built!)
- on app PR: change androidLibraryVersion back to "master-SNAPSHOT"
- wait for CI and then merge
With this approach the "downtime" of not building master is limited to the timestamp between merge lib PR and merging app PR, which is only limited by CI.
## Translations
We manage translations via Transifex. So just request joining the translation team for Android on the site and start translating. All translations will then be automatically pushed to this repository, there is no need for any pull request for translations.
If you need to change a translation, do not change it, but give it new key. This way the translation stays backward compatible as we automatically backport translated strings to last versions.
When submitting PRs with changed translations, please only submit changes to values/strings.xml and not changes to translated files. These will be overwritten by next merge of transifex-but and increase PR review.10000099
* 8.12.2 80120200
* 9.8.4-rc18 90080418
beware, that beta releases for an upcoming version will always use the minor and hotfix version of the release they are targeting. So to make sure the version code of the upcoming stable release will always be higher stable releases set the 2 beta digits to '99' as seen above in the examples.
### Dev
For dev the version name is in format YYYYMMDD. It is mainly as a reference for reporting bugs and is not related to stable/release candidates as it is an independent app.
## Release cycle
* Releases are planned every ~2 months, with 6 weeks of developing and 2 weeks of stabilising
* after feature freeze a public release candidate on play store and f-droid is released
* ~2 weeks testing, bug fixing
* release final version on f-droid and play store
* Bugfix releases (dot releases, e.g. 3.2.1) are released on demand from the branch created with first stable release (stable-3.2.x). If changes to the library are required, we do the same: create a branch from the version used in stable release (e.g. 1.1.0) and then release a dot release (1.1.1).
To get an idea which PRs and issues will be part of the next release simply check our milestone plan
## Release process
### Stable Release
Stable releases are based on the git master.
1. Bump the version name and version code in the AndroidManifest.xml, see chapter 'Version Name and number'.
2. Create a release/tag in git. Tag name following the naming schema: stable-Mayor.Minor.Hotfix
(e.g. stable-1.2.0) naming the version number following the semantic versioning schema
### Release Candidate Release
Release Candidate releases are based on the git master and are done between stable releases.
1. Bump the version name and version code in the AndroidManifest.xml, see below the version name and code concept.
2. Create a release/tag in git. Tag name following the naming schema: rc-Mayor.Minor.Hotfix-betaIncrement
(e.g. rc-1.2.0-12) naming the version number following the semantic versioning schema
### Developement Release
Dev releases are based on the master branch and are done independently from stable releases for people willing to test new features and provide valuable feedback on new features to be incorporated before a feature gets released in the stable app.
The deployment/build is done once a day automatically. If code has changed a new apk will be published here and it will, with a little delay, be available on Fdroid.