2022-02-25 22:18:56 +08:00
name : Nightly Tests
2022-01-04 07:04:41 +08:00
on :
push :
2022-02-25 22:18:56 +08:00
branches : [ release/* ]
schedule :
# At 20:00 every day UTC
- cron : '0 20 * * *'
workflow_dispatch :
2022-01-04 07:04:41 +08:00
# Enrich gradle.properties for CI/CD
env :
CI_GRADLE_ARG_PROPERTIES : >
2022-02-25 22:18:56 +08:00
-Porg.gradle.jvmargs=-Xmx4g
2022-01-04 07:04:41 +08:00
-Porg.gradle.parallel=false
jobs :
2022-02-28 20:29:52 +08:00
# Run Android Tests
2022-01-04 07:04:41 +08:00
integration-tests :
name : Matrix SDK - Running Integration Tests
2022-02-25 22:18:56 +08:00
runs-on : macos-latest
2022-01-04 07:04:41 +08:00
strategy :
fail-fast : false
matrix :
api-level : [ 28 ]
2022-02-28 20:29:52 +08:00
# No concurrency required, runs every time on a schedule.
2022-01-04 07:04:41 +08:00
steps :
2022-03-08 07:05:24 +08:00
- uses : actions/checkout@v3
2022-01-04 07:04:41 +08:00
- uses : gradle/wrapper-validation-action@v1
- uses : actions/setup-java@v2
with :
distribution : 'adopt'
java-version : 11
- name : Set up Python 3.8
2022-03-01 07:03:07 +08:00
uses : actions/setup-python@v3
2022-01-04 07:04:41 +08:00
with :
python-version : 3.8
2022-03-22 07:03:30 +08:00
- uses : actions/cache@v3
2022-01-04 07:04:41 +08:00
with :
path : |
~/.gradle/caches
~/.gradle/wrapper
key : ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
restore-keys : |
${{ runner.os }}-gradle-
- name : Start synapse server
2022-03-10 19:31:44 +08:00
uses : michaelkaye/setup-matrix-synapse@v0.3.0
2022-03-10 02:26:37 +08:00
with :
uploadLogs : true
httpPort : 8080
disableRateLimiting : true
2022-02-28 20:29:52 +08:00
# package: org.matrix.android.sdk.session
2022-01-04 07:04:41 +08:00
- name : Run integration tests for Matrix SDK [org.matrix.android.sdk.session] API[${{ matrix.api-level }}]
uses : reactivecircus/android-emulator-runner@v2
with :
api-level : ${{ matrix.api-level }}
arch : x86
profile : Nexus 5X
2022-01-07 19:59:43 +08:00
force-avd-creation : false
2022-01-04 07:04:41 +08:00
emulator-options : -no -snapshot-save -no-window -gpu swiftshader_indirect -noaudio -no-boot-anim -camera-back none
emulator-build : 7425822
2022-03-01 01:06:34 +08:00
script : |
adb root
adb logcat -c
touch emulator-session.log
chmod 777 emulator-session.log
adb logcat >> emulator-session.log &
./gradlew $CI_GRADLE_ARG_PROPERTIES -Pandroid.testInstrumentationRunnerArguments.package='org.matrix.android.sdk.session' matrix-sdk-android:connectedDebugAndroidTest
2022-01-04 07:04:41 +08:00
- name : Read Results [org.matrix.android.sdk.session]
2022-02-24 02:00:54 +08:00
if : always()
2022-01-04 07:04:41 +08:00
id : get-comment-body-session
2022-02-24 19:40:04 +08:00
run : python3 ./tools/ci/render_test_output.py session ./matrix-sdk-android/build/outputs/androidTest-results/connected/*.xml
2022-03-01 01:08:52 +08:00
- name : Remove adb logcat
if : always()
run : pkill -9 adb
2022-01-04 07:04:41 +08:00
- name : Run integration tests for Matrix SDK [org.matrix.android.sdk.account] API[${{ matrix.api-level }}]
2022-02-24 02:00:54 +08:00
if : always()
2022-01-04 07:04:41 +08:00
uses : reactivecircus/android-emulator-runner@v2
with :
api-level : ${{ matrix.api-level }}
arch : x86
profile : Nexus 5X
2022-01-07 19:59:43 +08:00
force-avd-creation : false
2022-01-04 07:04:41 +08:00
emulator-options : -no -snapshot-save -no-window -gpu swiftshader_indirect -noaudio -no-boot-anim -camera-back none
emulator-build : 7425822
2022-03-01 01:06:34 +08:00
script : |
adb root
adb logcat -c
touch emulator-account.log
chmod 777 emulator-account.log
adb logcat >> emulator-account.log &
./gradlew $CI_GRADLE_ARG_PROPERTIES -Pandroid.testInstrumentationRunnerArguments.package='org.matrix.android.sdk.account' matrix-sdk-android:connectedDebugAndroidTest
2022-01-04 07:04:41 +08:00
- name : Read Results [org.matrix.android.sdk.account]
2022-02-24 02:00:54 +08:00
if : always()
2022-01-04 07:04:41 +08:00
id : get-comment-body-account
2022-02-24 19:40:04 +08:00
run : python3 ./tools/ci/render_test_output.py account ./matrix-sdk-android/build/outputs/androidTest-results/connected/*.xml
2022-03-01 01:08:52 +08:00
- name : Remove adb logcat
if : always()
run : pkill -9 adb
2022-02-28 20:29:52 +08:00
# package: org.matrix.android.sdk.internal
2022-01-04 07:04:41 +08:00
- name : Run integration tests for Matrix SDK [org.matrix.android.sdk.internal] API[${{ matrix.api-level }}]
2022-02-24 02:00:54 +08:00
if : always()
2022-01-04 07:04:41 +08:00
uses : reactivecircus/android-emulator-runner@v2
with :
api-level : ${{ matrix.api-level }}
arch : x86
profile : Nexus 5X
2022-01-07 19:59:43 +08:00
force-avd-creation : false
2022-01-04 07:04:41 +08:00
emulator-options : -no -snapshot-save -no-window -gpu swiftshader_indirect -noaudio -no-boot-anim -camera-back none
emulator-build : 7425822
2022-03-01 01:06:34 +08:00
script : |
adb root
adb logcat -c
touch emulator-internal.log
chmod 777 emulator-internal.log
adb logcat >> emulator-internal.log &
./gradlew $CI_GRADLE_ARG_PROPERTIES -Pandroid.testInstrumentationRunnerArguments.package='org.matrix.android.sdk.internal' matrix-sdk-android:connectedDebugAndroidTest
2022-01-04 07:04:41 +08:00
- name : Read Results [org.matrix.android.sdk.internal]
2022-02-24 02:00:54 +08:00
if : always()
2022-01-04 07:04:41 +08:00
id : get-comment-body-internal
2022-02-24 19:40:04 +08:00
run : python3 ./tools/ci/render_test_output.py internal ./matrix-sdk-android/build/outputs/androidTest-results/connected/*.xml
2022-03-01 01:08:52 +08:00
- name : Remove adb logcat
if : always()
run : pkill -9 adb
2022-02-28 20:29:52 +08:00
# package: org.matrix.android.sdk.ordering
2022-01-04 07:04:41 +08:00
- name : Run integration tests for Matrix SDK [org.matrix.android.sdk.ordering] API[${{ matrix.api-level }}]
2022-02-24 02:00:54 +08:00
if : always()
2022-01-04 07:04:41 +08:00
uses : reactivecircus/android-emulator-runner@v2
with :
api-level : ${{ matrix.api-level }}
arch : x86
profile : Nexus 5X
2022-01-07 19:59:43 +08:00
force-avd-creation : false
2022-01-04 07:04:41 +08:00
emulator-options : -no -snapshot-save -no-window -gpu swiftshader_indirect -noaudio -no-boot-anim -camera-back none
emulator-build : 7425822
2022-03-01 01:06:34 +08:00
script : |
adb root
adb logcat -c
touch emulator-ordering.log
chmod 777 emulator-ordering.log
adb logcat >> emulator-ordering.log &
./gradlew $CI_GRADLE_ARG_PROPERTIES -Pandroid.testInstrumentationRunnerArguments.package='org.matrix.android.sdk.ordering' matrix-sdk-android:connectedDebugAndroidTest
2022-01-04 07:04:41 +08:00
- name : Read Results [org.matrix.android.sdk.ordering]
2022-02-24 02:00:54 +08:00
if : always()
2022-01-04 07:04:41 +08:00
id : get-comment-body-ordering
2022-02-24 19:40:04 +08:00
run : python3 ./tools/ci/render_test_output.py ordering ./matrix-sdk-android/build/outputs/androidTest-results/connected/*.xml
2022-03-01 01:08:52 +08:00
- name : Remove adb logcat
if : always()
run : pkill -9 adb
2022-02-28 20:29:52 +08:00
# package: class PermalinkParserTest
2022-01-04 07:04:41 +08:00
- name : Run integration tests for Matrix SDK class [org.matrix.android.sdk.PermalinkParserTest] API[${{ matrix.api-level }}]
2022-02-24 02:00:54 +08:00
if : always()
2022-01-04 07:04:41 +08:00
uses : reactivecircus/android-emulator-runner@v2
with :
api-level : ${{ matrix.api-level }}
arch : x86
profile : Nexus 5X
2022-01-07 19:59:43 +08:00
force-avd-creation : false
2022-01-04 07:04:41 +08:00
emulator-options : -no -snapshot-save -no-window -gpu swiftshader_indirect -noaudio -no-boot-anim -camera-back none
emulator-build : 7425822
2022-03-01 01:06:34 +08:00
script : |
adb root
adb logcat -c
touch emulator-permalink.log
chmod 777 emulator-permalink.log
adb logcat >> emulator-permalink.log &
./gradlew $CI_GRADLE_ARG_PROPERTIES -Pandroid.testInstrumentationRunnerArguments.class='org.matrix.android.sdk.PermalinkParserTest' matrix-sdk-android:connectedDebugAndroidTest
2022-02-24 22:47:23 +08:00
- name : Read Results [org.matrix.android.sdk.PermalinkParserTest]
2022-02-24 02:00:54 +08:00
if : always()
2022-01-04 07:04:41 +08:00
id : get-comment-body-permalink
2022-02-24 19:40:04 +08:00
run : python3 ./tools/ci/render_test_output.py permalink ./matrix-sdk-android/build/outputs/androidTest-results/connected/*.xml
2022-03-01 01:08:52 +08:00
- name : Remove adb logcat
if : always()
run : pkill -9 adb
2022-02-28 20:29:52 +08:00
# package: class PermalinkParserTest
2022-01-04 07:04:41 +08:00
- name : Find Comment
2022-02-24 02:00:54 +08:00
if : always() && github.event_name == 'pull_request'
2022-01-04 07:04:41 +08:00
uses : peter-evans/find-comment@v1
id : fc
with :
issue-number : ${{ github.event.pull_request.number }}
comment-author : 'github-actions[bot]'
body-includes : Integration Tests Results
- name : Publish results to PR
2022-02-24 02:00:54 +08:00
if : always() && github.event_name == 'pull_request'
2022-01-04 07:04:41 +08:00
uses : peter-evans/create-or-update-comment@v1
with :
comment-id : ${{ steps.fc.outputs.comment-id }}
issue-number : ${{ github.event.pull_request.number }}
body : |
### Matrix SDK
## Integration Tests Results:
- `[org.matrix.android.sdk.session]`<br>${{ steps.get-comment-body-session.outputs.session }}
- `[org.matrix.android.sdk.account]`<br>${{ steps.get-comment-body-account.outputs.account }}
2022-01-06 06:38:05 +08:00
- `[org.matrix.android.sdk.internal]`<br>${{ steps.get-comment-body-internal.outputs.internal }}
2022-01-04 07:04:41 +08:00
- `[org.matrix.android.sdk.ordering]`<br>${{ steps.get-comment-body-ordering.outputs.ordering }}
- `[org.matrix.android.sdk.PermalinkParserTest]`<br>${{ steps.get-comment-body-permalink.outputs.permalink }}
edit-mode : replace
2022-03-01 01:06:34 +08:00
- name : Upload Test Report Log
uses : actions/upload-artifact@v2
if : always()
with :
name : integrationtest-error-results
path : |
emulator-permalink.log
emulator-internal.log
emulator-ordering.log
emulator-account.log
emulator-session.log
2022-02-25 22:18:56 +08:00
ui-tests :
name : UI Tests (Synapse)
runs-on : macos-latest
strategy :
fail-fast : false
matrix :
api-level : [ 28 ]
2022-02-28 20:29:52 +08:00
# No concurrency required, runs every time on a schedule.
2022-02-25 22:18:56 +08:00
steps :
2022-03-08 07:05:24 +08:00
- uses : actions/checkout@v3
2022-02-25 22:18:56 +08:00
- name : Set up Python 3.8
2022-03-01 07:03:07 +08:00
uses : actions/setup-python@v3
2022-02-25 22:18:56 +08:00
with :
python-version : 3.8
2022-03-22 07:03:30 +08:00
- uses : actions/cache@v3
2022-02-25 22:18:56 +08:00
with :
path : |
~/.gradle/caches
~/.gradle/wrapper
key : ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
restore-keys : |
${{ runner.os }}-gradle-
- name : Start synapse server
2022-03-10 19:31:44 +08:00
uses : michaelkaye/setup-matrix-synapse@v0.3.0
2022-03-10 02:26:37 +08:00
with :
uploadLogs : true
httpPort : 8080
disableRateLimiting : true
2022-02-25 22:18:56 +08:00
- uses : actions/setup-java@v2
with :
distribution : 'adopt'
java-version : '11'
- name : Run sanity tests on API ${{ matrix.api-level }}
uses : reactivecircus/android-emulator-runner@v2
with :
api-level : ${{ matrix.api-level }}
arch : x86
profile : Nexus 5X
force-avd-creation : false
emulator-options : -no -snapshot-save -no-window -gpu swiftshader_indirect -noaudio -no-boot-anim -camera-back none
emulator-build: 7425822 # workaround to emulator bug : https://github.com/ReactiveCircus/android-emulator-runner/issues/160
script : |
adb root
adb logcat -c
touch emulator.log
chmod 777 emulator.log
adb logcat >> emulator.log &
2022-03-08 21:26:04 +08:00
./gradlew $CI_GRADLE_ARG_PROPERTIES connectedGplayDebugAndroidTest -Pandroid.testInstrumentationRunnerArguments.class=im.vector.app.ui.UiAllScreensSanityTest || (adb pull storage/emulated/0/Pictures/failure_screenshots && exit 1 )
2022-02-25 22:18:56 +08:00
- name : Upload Test Report Log
uses : actions/upload-artifact@v2
if : always()
with :
2022-03-01 01:06:34 +08:00
name : uitest-error-results
2022-02-25 22:18:56 +08:00
path : |
emulator.log
failure_screenshots/
2022-03-03 23:41:09 +08:00
codecov-units :
2022-03-21 22:31:17 +08:00
name : Unit tests with code coverage
2022-03-03 23:41:09 +08:00
runs-on : macos-latest
steps :
2022-03-08 07:05:24 +08:00
- uses : actions/checkout@v3
2022-03-03 23:41:09 +08:00
- uses : actions/setup-java@v2
with :
distribution : 'adopt'
java-version : '11'
2022-03-22 07:03:30 +08:00
- uses : actions/cache@v3
2022-03-03 23:41:09 +08:00
with :
path : |
~/.gradle/caches
~/.gradle/wrapper
key : ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
restore-keys : |
${{ runner.os }}-gradle-
- run : ./gradlew allCodeCoverageReport $CI_GRADLE_ARG_PROPERTIES
- name : Upload Codecov data
uses : actions/upload-artifact@v2
if : always()
with :
name : codecov-xml
path : |
2022-03-04 23:15:52 +08:00
build/reports/jacoco/allCodeCoverageReport/allCodeCoverageReport.xml
2022-03-03 23:41:09 +08:00
2022-03-01 21:17:25 +08:00
sonarqube :
2022-03-09 18:21:29 +08:00
name : Sonarqube upload
2022-03-01 21:17:25 +08:00
runs-on : macos-latest
if : always()
needs :
2022-03-03 23:41:09 +08:00
- codecov-units
2022-03-01 21:17:25 +08:00
steps :
2022-03-08 07:05:24 +08:00
- uses : actions/checkout@v3
2022-03-02 18:31:07 +08:00
- uses : actions/setup-java@v2
with :
distribution : 'adopt'
java-version : '11'
2022-03-22 07:03:30 +08:00
- uses : actions/cache@v3
2022-03-01 21:17:25 +08:00
with :
path : |
~/.gradle/caches
~/.gradle/wrapper
key : ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
restore-keys : |
${{ runner.os }}-gradle-
2022-03-03 23:41:09 +08:00
- uses : actions/download-artifact@v3
with :
2022-03-07 18:26:25 +08:00
name : codecov-xml # will restore to allCodeCoverageReport.xml by default; we restore to the same location in following tasks
2022-03-05 02:00:20 +08:00
- run : mkdir -p build/reports/jacoco/allCodeCoverageReport/
2022-03-07 18:26:25 +08:00
- run : mv allCodeCoverageReport.xml build/reports/jacoco/allCodeCoverageReport/
2022-03-01 21:17:25 +08:00
- run : ./gradlew sonarqube $CI_GRADLE_ARG_PROPERTIES
env :
2022-03-04 00:34:26 +08:00
ORG_GRADLE_PROJECT_SONAR_LOGIN : ${{ secrets.SONAR_TOKEN }}
2022-03-01 21:17:25 +08:00
2022-02-28 22:37:14 +08:00
# Notify the channel about scheduled runs, do not notify for manually triggered runs
2022-02-25 22:18:56 +08:00
notify :
2022-03-09 18:21:29 +08:00
name : Notify matrix
2022-02-25 22:18:56 +08:00
runs-on : ubuntu-latest
needs :
2022-02-28 20:29:52 +08:00
- integration-tests
- ui-tests
2022-03-01 21:17:25 +08:00
- sonarqube
2022-02-28 22:37:14 +08:00
if : always() && github.event_name != 'workflow_dispatch'
2022-02-28 20:29:52 +08:00
# No concurrency required, runs every time on a schedule.
2022-02-25 22:18:56 +08:00
steps :
2022-03-01 07:03:03 +08:00
- uses : michaelkaye/matrix-hookshot-action@v0.3.0
2022-02-28 20:29:52 +08:00
with :
github_token : ${{ secrets.GITHUB_TOKEN }}
matrix_access_token : ${{ secrets.ELEMENT_ANDROID_NOTIFICATION_ACCESS_TOKEN }}
matrix_room_id : ${{ secrets.ELEMENT_ANDROID_INTERNAL_ROOM_ID }}
text_template : "Nightly test run: {{#each job_statuses }}{{#with this }}{{#if completed }} {{name}} {{conclusion}} at {{completed_at}}, {{/if}}{{/with}}{{/each}}"
2022-03-09 18:04:25 +08:00
html_template : "Nightly test run results: {{#each job_statuses }}{{#with this }}{{#if completed }}<br />{{icon conclusion}} {{name}} <font color='{{color conclusion}}'>{{conclusion}} at {{completed_at}} <a href=\"{{html_url}}\">[details]</a></font>{{/if}}{{/with}}{{/each}}"