-
Notifications
You must be signed in to change notification settings - Fork 2
131 lines (115 loc) · 5.36 KB
/
gradle_connected-tests.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
# This workflow ensures the connected tests keep working
#
# @author Armin Schnabel
# @version 1.0.0
# @since 6.3.0
name: Gradle Connected Tests
on:
push:
branches:
- 'release-6'
pull_request:
branches:
- 'release-6'
jobs:
androidTest:
# Faster, but MacOS costs 8 ct/min instead of 0.8 ct/min of on Linux.
# Unfortunately, `DataCapturingServiceTest.testDisconnectReconnect` fails on linux stack.
# But as this is a public repository, Github Actions are currently free of charge.
#runs-on: macos-latest # as recommended in `actions/android-emulator-runner`
# But we had to add `free-disk-space` to fix emulator flakiness. It only runs on ubuntu.
runs-on: ubuntu-latest
timeout-minutes: 55
strategy:
matrix:
api-level: [ 28 ]
steps:
# From https://github.com/android/nowinandroid/pull/1219/files to fix flaky emulator start
# See https://github.com/ReactiveCircus/android-emulator-runner/issues/324#issuecomment-1998737488
- name: Delete unnecessary tools 🔧
uses: jlumbroso/[email protected]
with:
android: false # Keep Don't remove Android tools
tool-cache: true # Remove image tool cache - rm -rf "$AGENT_TOOLSDIRECTORY"
dotnet: true # rm -rf /usr/share/dotnet
haskell: true # rm -rf /opt/ghc...
swap-storage: true # rm -f /mnt/swapfile (4GiB)
docker-images: false # Takes 16s (`nowinandroid`), enable if needed in the future
large-packages: false # includes google-cloud-sdk and it's slow
# Set up KVM permissions to enable efficient Android emulator runs by modifying udev rules for universal access.
# From https://github.com/android/nowinandroid/blob/main/.github/workflows/Build.yaml#L142
- name: Enable KVM group perms
run: |
echo 'KERNEL=="kvm", GROUP="kvm", MODE="0666", OPTIONS+="static_node=kvm"' | sudo tee /etc/udev/rules.d/99-kvm4all.rules
sudo udevadm control --reload-rules
sudo udevadm trigger --name-match=kvm
ls /dev/kvm
- name: Checkout
uses: actions/checkout@v4
- name: Set up JDK 17
uses: actions/setup-java@v3
with:
distribution: 'temurin'
java-version: '17'
- name: Create empty truststore file
run: |
# When no truststore is required by the server we create an empty file or else the build fails
mkdir -p synchronization/src/main/res/raw
touch synchronization/src/main/res/raw/truststore.jks
- name: Add gradle.properties
run: |
# Use a personal read token to install the Cyface Utils package
cp gradle.properties.template gradle.properties
echo "githubUser=${{ secrets.GH_READ_ACCOUNT }}" >> gradle.properties
echo "githubToken=${{ secrets.GH_READ_TOKEN }}" >> gradle.properties
# Not executing build here on MacOS stack (10x costs)
#- name: Build with Gradle
# run: ./gradlew build
# Add caching to speed up connected tests below (see `actions/android-emulator-runner`)
- name: Setup Gradle
uses: gradle/gradle-build-action@v3
- name: AVD cache
uses: actions/cache@v3
id: avd-cache
with:
path: |
~/.android/avd/*
~/.android/adb*
key: avd-${{ matrix.api-level }}
- name: Create AVD and generate snapshot for caching
if: steps.avd-cache.outputs.cache-hit != 'true'
uses: reactivecircus/android-emulator-runner@v2
with:
api-level: ${{ matrix.api-level }}
force-avd-creation: false
disable-animations: true
script: echo "Generated AVD snapshot for caching."
# From https://github.com/android/nowinandroid/blob/main/.github/workflows/Build.yaml#L142
- name: Build projects before running emulator
run: ./gradlew packageDebugAndroidTest
# Only execute mock tests to exclude `@FlakyTest`s (instead of running `connectedCheck`)
- name: Connected tests
uses: reactivecircus/android-emulator-runner@v2
with:
api-level: ${{ matrix.api-level }}
# From https://github.com/android/nowinandroid >>>
arch: x86_64
disable-animations: true
disk-size: 6000M
heap-size: 600M
# <<<<
# default options are: -no-window -gpu swiftshader_indirect -no-snapshot -noaudio -no-boot-anim
# Action recommendation: -no-snapshot-save -camera-back none
emulator-options: -no-snapshot-save -no-window -gpu swiftshader_indirect -noaudio -no-boot-anim -camera-back none
#avd-name: ubuntu-avd-28
#force-avd-creation: false
script: ./gradlew :persistence:connectedDebugAndroidTest :datacapturing:connectedDebugAndroidTest :synchronization:connectedDebugAndroidTest --daemon
# To execute a single test class
#script: ./gradlew :datacapturing:connectedCyfaceMockDebugAndroidTest -Pandroid.testInstrumentationRunnerArguments.class=de.cyface.datacapturing.DataCapturingServiceTest --daemon
# From https://github.com/android/nowinandroid/blob/main/.github/workflows/Build.yaml#L142
- name: Upload test reports
if: always()
uses: actions/upload-artifact@v4
with:
name: test-reports-${{ matrix.api-level }}
path: '**/build/reports/androidTests'