Android Matrix messenger application using the Matrix Rust Sdk and Jetpack Compose
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

70 lines
2.4 KiB

# Continuous integration strategy
<!--- TOC -->
* [Introduction](#introduction)
* [CI tools](#ci-tools)
* [Rules](#rules)
* [What is the CI checking](#what-is-the-ci-checking)
* [What is the CI reporting](#what-is-the-ci-reporting)
* [Current choices](#current-choices)
* [R8 task](#r8-task)
* [Android test (connected test)](#android-test-connected-test)
<!--- END -->
## Introduction
This document gives some information about how we take advantage of the continuous integration (CI).
## CI tools
We use GitHub Actions to configure and perform the CI.
## Rules
We want:
1. The CI to detect as soon as possible any issue in the code
2. The CI to be fast - it's run on all the Pull Requests, and developers do not like to wait too long
3. The CI to be reliable - it should not fail randomly
4. The CI to generate artifacts which can be used by the team and the community
5. The CI to generate useful logs and reports, not too verbose, not too short
6. The developer to be able to run the CI locally - to help with this we have [a script](../tools/check/check_code_quality.sh) the can be run locally and which does more checks that just building and deploying the app.
7. The CI to be used as a common environment for the team: generate the screenshots image for the screenshot test, build the release build (unsigned)
8. The CI to run repeated tasks, like building the nightly builds, integrating data from external tools (translations, etc.)
9. The CI to upgrade our dependencies (Renovate)
10. The CI to do some issue triaging
## What is the CI checking
The CI checks that:
1. The code is compiling, without any warnings, for all the app build types and variants and for the minimal app
2. The tests are passing
3. The code quality is good (detekt, ktlint, lint)
4. The code is running and smoke tests are passing (maestro)
5. The PullRequest itself is good (with danger)
6. Files that must be added with git-lfs are added with git-lfs
## What is the CI reporting
The CI reports:
1. Code coverage reports
2. Sonar reports
## Current choices
### R8 task
The CI does not run R8 because it's too slow, and it breaks rule 2.
The drawback is that the nightly build can fail, as well as the release build.
Since the nightly build is failing, the team can detect the failure quite fast and react to it.
### Android test (connected test)
We limit the number of connected tests (tests under folder `androidTest`), because it often break rule 2 and 3.