2022-02-25 17:18:56 +03:00
name : Nightly Tests
2022-01-04 02:04:41 +03:00
on :
push :
2022-02-25 17:18:56 +03:00
branches : [ release/* ]
schedule :
# At 20:00 every day UTC
- cron : '0 20 * * *'
workflow_dispatch :
2022-01-04 02:04:41 +03:00
# Enrich gradle.properties for CI/CD
env :
CI_GRADLE_ARG_PROPERTIES : >
2022-02-25 17:18:56 +03:00
-Porg.gradle.jvmargs=-Xmx4g
2022-01-04 02:04:41 +03:00
-Porg.gradle.parallel=false
jobs :
# Build Android Tests [Matrix SDK]
build-android-test-matrix-sdk :
name : Matrix SDK - Build Android Tests
2022-02-25 17:18:56 +03:00
runs-on : macos-latest
2022-02-28 15:29:52 +03:00
# No concurrency required, runs every time on a schedule.
2022-01-04 02:04:41 +03:00
steps :
2022-03-08 02:05:24 +03:00
- uses : actions/checkout@v3
2022-02-28 17:37:14 +03:00
- uses : actions/setup-java@v2
with :
distribution : 'adopt'
java-version : 11
2022-01-04 02:04:41 +03:00
- uses : actions/cache@v2
with :
path : |
~/.gradle/caches
~/.gradle/wrapper
key : ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
restore-keys : |
${{ runner.os }}-gradle-
- name : Build Android Tests for matrix-sdk-android
2022-02-23 21:00:54 +03:00
run : ./gradlew clean matrix-sdk-android:assembleAndroidTest $CI_GRADLE_ARG_PROPERTIES --stacktrace
2022-01-04 02:04:41 +03:00
# Build Android Tests [Matrix APP]
build-android-test-app :
name : App - Build Android Tests
2022-02-25 17:18:56 +03:00
runs-on : macos-latest
2022-02-28 15:29:52 +03:00
# No concurrency required, runs every time on a schedule.
2022-01-04 02:04:41 +03:00
steps :
2022-03-08 02:05:24 +03:00
- uses : actions/checkout@v3
2022-02-28 17:37:14 +03:00
- uses : actions/setup-java@v2
with :
distribution : 'adopt'
java-version : 11
2022-01-04 02:04:41 +03:00
- uses : actions/cache@v2
with :
path : |
~/.gradle/caches
~/.gradle/wrapper
key : ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
restore-keys : |
${{ runner.os }}-gradle-
- name : Build Android Tests for vector
2022-02-23 21:00:54 +03:00
run : ./gradlew clean vector:assembleAndroidTest $CI_GRADLE_ARG_PROPERTIES --stacktrace
2022-01-04 02:04:41 +03:00
2022-02-28 15:29:52 +03:00
# Run Android Tests
2022-01-04 02:04:41 +03:00
integration-tests :
name : Matrix SDK - Running Integration Tests
2022-02-25 17:18:56 +03:00
runs-on : macos-latest
2022-01-04 02:04:41 +03:00
strategy :
fail-fast : false
matrix :
api-level : [ 28 ]
2022-02-28 15:29:52 +03:00
# No concurrency required, runs every time on a schedule.
2022-01-04 02:04:41 +03:00
steps :
2022-03-08 02:05:24 +03:00
- uses : actions/checkout@v3
2022-01-04 02:04:41 +03: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 02:03:07 +03:00
uses : actions/setup-python@v3
2022-01-04 02:04:41 +03:00
with :
python-version : 3.8
- uses : actions/cache@v2
with :
path : |
~/.gradle/caches
~/.gradle/wrapper
key : ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
restore-keys : |
${{ runner.os }}-gradle-
- name : Start synapse server
run : |
2022-02-23 18:58:05 +03:00
pip install matrix-synapse
2022-01-04 02:04:41 +03:00
curl https://raw.githubusercontent.com/matrix-org/synapse/develop/demo/start.sh -o start.sh
chmod 777 start.sh
./start.sh --no-rate-limit
2022-02-28 15:29:52 +03:00
# package: org.matrix.android.sdk.session
2022-01-04 02:04:41 +03: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 14:59:43 +03:00
force-avd-creation : false
2022-01-04 02:04:41 +03:00
emulator-options : -no -snapshot-save -no-window -gpu swiftshader_indirect -noaudio -no-boot-anim -camera-back none
emulator-build : 7425822
2022-02-28 20:06:34 +03: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 02:04:41 +03:00
- name : Read Results [org.matrix.android.sdk.session]
2022-02-23 21:00:54 +03:00
if : always()
2022-01-04 02:04:41 +03:00
id : get-comment-body-session
2022-02-24 14:40:04 +03:00
run : python3 ./tools/ci/render_test_output.py session ./matrix-sdk-android/build/outputs/androidTest-results/connected/*.xml
2022-02-28 20:08:52 +03:00
- name : Remove adb logcat
if : always()
run : pkill -9 adb
2022-01-04 02:04:41 +03:00
- name : Run integration tests for Matrix SDK [org.matrix.android.sdk.account] API[${{ matrix.api-level }}]
2022-02-23 21:00:54 +03:00
if : always()
2022-01-04 02:04:41 +03:00
uses : reactivecircus/android-emulator-runner@v2
with :
api-level : ${{ matrix.api-level }}
arch : x86
profile : Nexus 5X
2022-01-07 14:59:43 +03:00
force-avd-creation : false
2022-01-04 02:04:41 +03:00
emulator-options : -no -snapshot-save -no-window -gpu swiftshader_indirect -noaudio -no-boot-anim -camera-back none
emulator-build : 7425822
2022-02-28 20:06:34 +03: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 02:04:41 +03:00
- name : Read Results [org.matrix.android.sdk.account]
2022-02-23 21:00:54 +03:00
if : always()
2022-01-04 02:04:41 +03:00
id : get-comment-body-account
2022-02-24 14:40:04 +03:00
run : python3 ./tools/ci/render_test_output.py account ./matrix-sdk-android/build/outputs/androidTest-results/connected/*.xml
2022-02-28 20:08:52 +03:00
- name : Remove adb logcat
if : always()
run : pkill -9 adb
2022-02-28 15:29:52 +03:00
# package: org.matrix.android.sdk.internal
2022-01-04 02:04:41 +03:00
- name : Run integration tests for Matrix SDK [org.matrix.android.sdk.internal] API[${{ matrix.api-level }}]
2022-02-23 21:00:54 +03:00
if : always()
2022-01-04 02:04:41 +03:00
uses : reactivecircus/android-emulator-runner@v2
with :
api-level : ${{ matrix.api-level }}
arch : x86
profile : Nexus 5X
2022-01-07 14:59:43 +03:00
force-avd-creation : false
2022-01-04 02:04:41 +03:00
emulator-options : -no -snapshot-save -no-window -gpu swiftshader_indirect -noaudio -no-boot-anim -camera-back none
emulator-build : 7425822
2022-02-28 20:06:34 +03: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 02:04:41 +03:00
- name : Read Results [org.matrix.android.sdk.internal]
2022-02-23 21:00:54 +03:00
if : always()
2022-01-04 02:04:41 +03:00
id : get-comment-body-internal
2022-02-24 14:40:04 +03:00
run : python3 ./tools/ci/render_test_output.py internal ./matrix-sdk-android/build/outputs/androidTest-results/connected/*.xml
2022-02-28 20:08:52 +03:00
- name : Remove adb logcat
if : always()
run : pkill -9 adb
2022-02-28 15:29:52 +03:00
# package: org.matrix.android.sdk.ordering
2022-01-04 02:04:41 +03:00
- name : Run integration tests for Matrix SDK [org.matrix.android.sdk.ordering] API[${{ matrix.api-level }}]
2022-02-23 21:00:54 +03:00
if : always()
2022-01-04 02:04:41 +03:00
uses : reactivecircus/android-emulator-runner@v2
with :
api-level : ${{ matrix.api-level }}
arch : x86
profile : Nexus 5X
2022-01-07 14:59:43 +03:00
force-avd-creation : false
2022-01-04 02:04:41 +03:00
emulator-options : -no -snapshot-save -no-window -gpu swiftshader_indirect -noaudio -no-boot-anim -camera-back none
emulator-build : 7425822
2022-02-28 20:06:34 +03: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 02:04:41 +03:00
- name : Read Results [org.matrix.android.sdk.ordering]
2022-02-23 21:00:54 +03:00
if : always()
2022-01-04 02:04:41 +03:00
id : get-comment-body-ordering
2022-02-24 14:40:04 +03:00
run : python3 ./tools/ci/render_test_output.py ordering ./matrix-sdk-android/build/outputs/androidTest-results/connected/*.xml
2022-02-28 20:08:52 +03:00
- name : Remove adb logcat
if : always()
run : pkill -9 adb
2022-02-28 15:29:52 +03:00
# package: class PermalinkParserTest
2022-01-04 02:04:41 +03:00
- name : Run integration tests for Matrix SDK class [org.matrix.android.sdk.PermalinkParserTest] API[${{ matrix.api-level }}]
2022-02-23 21:00:54 +03:00
if : always()
2022-01-04 02:04:41 +03:00
uses : reactivecircus/android-emulator-runner@v2
with :
api-level : ${{ matrix.api-level }}
arch : x86
profile : Nexus 5X
2022-01-07 14:59:43 +03:00
force-avd-creation : false
2022-01-04 02:04:41 +03:00
emulator-options : -no -snapshot-save -no-window -gpu swiftshader_indirect -noaudio -no-boot-anim -camera-back none
emulator-build : 7425822
2022-02-28 20:06:34 +03: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 17:47:23 +03:00
- name : Read Results [org.matrix.android.sdk.PermalinkParserTest]
2022-02-23 21:00:54 +03:00
if : always()
2022-01-04 02:04:41 +03:00
id : get-comment-body-permalink
2022-02-24 14:40:04 +03:00
run : python3 ./tools/ci/render_test_output.py permalink ./matrix-sdk-android/build/outputs/androidTest-results/connected/*.xml
2022-02-28 20:08:52 +03:00
- name : Remove adb logcat
if : always()
run : pkill -9 adb
2022-02-28 15:29:52 +03:00
# package: class PermalinkParserTest
2022-01-04 02:04:41 +03:00
- name : Find Comment
2022-02-23 21:00:54 +03:00
if : always() && github.event_name == 'pull_request'
2022-01-04 02:04:41 +03: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-23 21:00:54 +03:00
if : always() && github.event_name == 'pull_request'
2022-01-04 02:04:41 +03: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 01:38:05 +03:00
- `[org.matrix.android.sdk.internal]`<br>${{ steps.get-comment-body-internal.outputs.internal }}
2022-01-04 02:04:41 +03: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-02-28 20:06:34 +03: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 17:18:56 +03:00
ui-tests :
name : UI Tests (Synapse)
runs-on : macos-latest
strategy :
fail-fast : false
matrix :
api-level : [ 28 ]
2022-02-28 15:29:52 +03:00
# No concurrency required, runs every time on a schedule.
2022-02-25 17:18:56 +03:00
steps :
2022-03-08 02:05:24 +03:00
- uses : actions/checkout@v3
2022-02-25 17:18:56 +03:00
- name : Set up Python 3.8
2022-03-01 02:03:07 +03:00
uses : actions/setup-python@v3
2022-02-25 17:18:56 +03:00
with :
python-version : 3.8
- uses : actions/cache@v2
with :
path : |
~/.gradle/caches
~/.gradle/wrapper
key : ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
restore-keys : |
${{ runner.os }}-gradle-
- name : Start synapse server
run : |
pip install matrix-synapse
curl -sL https://raw.githubusercontent.com/matrix-org/synapse/develop/demo/start.sh \
| sed s/127.0.0.1/0.0.0.0/g | sed 's/http:\/\/localhost/http:\/\/10.0.2.2/g' | bash -s -- --no-rate-limit
- 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 16:26:04 +03: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 17:18:56 +03:00
- name : Upload Test Report Log
uses : actions/upload-artifact@v2
if : always()
with :
2022-02-28 20:06:34 +03:00
name : uitest-error-results
2022-02-25 17:18:56 +03:00
path : |
emulator.log
failure_screenshots/
2022-03-03 18:41:09 +03:00
codecov-units :
runs-on : macos-latest
steps :
2022-03-08 02:05:24 +03:00
- uses : actions/checkout@v3
2022-03-03 18:41:09 +03:00
- uses : actions/setup-java@v2
with :
distribution : 'adopt'
java-version : '11'
2022-03-03 21:28:13 +03:00
- uses : actions/cache@v2
2022-03-03 18:41:09 +03: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 18:15:52 +03:00
build/reports/jacoco/allCodeCoverageReport/allCodeCoverageReport.xml
2022-03-03 18:41:09 +03:00
2022-03-01 16:17:25 +03:00
sonarqube :
runs-on : macos-latest
if : always()
needs :
2022-03-03 18:41:09 +03:00
- codecov-units
2022-03-01 16:17:25 +03:00
steps :
2022-03-08 02:05:24 +03:00
- uses : actions/checkout@v3
2022-03-02 13:31:07 +03:00
- uses : actions/setup-java@v2
with :
distribution : 'adopt'
java-version : '11'
2022-03-01 16:17:25 +03:00
- uses : actions/cache@v2
with :
path : |
~/.gradle/caches
~/.gradle/wrapper
key : ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
restore-keys : |
${{ runner.os }}-gradle-
2022-03-03 18:41:09 +03:00
- uses : actions/download-artifact@v3
with :
2022-03-07 13:26:25 +03:00
name : codecov-xml # will restore to allCodeCoverageReport.xml by default; we restore to the same location in following tasks
2022-03-04 21:00:20 +03:00
- run : mkdir -p build/reports/jacoco/allCodeCoverageReport/
2022-03-07 13:26:25 +03:00
- run : mv allCodeCoverageReport.xml build/reports/jacoco/allCodeCoverageReport/
2022-03-01 16:17:25 +03:00
- run : ./gradlew sonarqube $CI_GRADLE_ARG_PROPERTIES
env :
2022-03-03 19:34:26 +03:00
ORG_GRADLE_PROJECT_SONAR_LOGIN : ${{ secrets.SONAR_TOKEN }}
2022-03-01 16:17:25 +03:00
2022-02-28 17:37:14 +03:00
# Notify the channel about scheduled runs, do not notify for manually triggered runs
2022-02-25 17:18:56 +03:00
notify :
runs-on : ubuntu-latest
needs :
2022-02-28 15:29:52 +03:00
- integration-tests
- ui-tests
2022-03-01 16:17:25 +03:00
# - unit-tests
- build-android-test-matrix-sdk
- build-android-test-app
- sonarqube
2022-02-28 17:37:14 +03:00
if : always() && github.event_name != 'workflow_dispatch'
2022-02-28 15:29:52 +03:00
# No concurrency required, runs every time on a schedule.
2022-02-25 17:18:56 +03:00
steps :
2022-03-01 02:03:03 +03:00
- uses : michaelkaye/matrix-hookshot-action@v0.3.0
2022-02-28 15:29:52 +03: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-02-28 20:06:34 +03:00
html_template : "Nightly test run results: {{#each job_statuses }}{{#with this }}{{#if completed }}<br />{{name}} {{conclusion}} at {{completed_at}} <a href=\"{{html_url}}\">[details]</a>{{/if}}{{/with}}{{/each}}"