Skip to content

Commit 2c76267

Browse files
ci: Run tests for both snapshot and stable selenium versions (#2394)
1 parent 1f0a2f8 commit 2c76267

File tree

2 files changed

+56
-33
lines changed

2 files changed

+56
-33
lines changed

.github/workflows/ci.yml

Lines changed: 51 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,10 @@ env:
2323
ANDROID_SDK_VERSION: "28"
2424
ANDROID_EMU_NAME: test
2525
ANDROID_EMU_TARGET: default
26-
# https://github.com/actions/runner-images/blob/main/images/macos/macos-14-arm64-Readme.md
27-
XCODE_VERSION: "15.4"
28-
IOS_DEVICE_NAME: iPhone 15
29-
IOS_PLATFORM_VERSION: "17.5"
26+
# https://github.com/actions/runner-images/blob/main/images/macos (macos-15 for Xcode 16 / iOS 18.5)
27+
XCODE_VERSION: "16.4"
28+
IOS_DEVICE_NAME: iPhone 16
29+
IOS_PLATFORM_VERSION: "18.5"
3030
FLUTTER_ANDROID_APP: "https://github.com/AppiumTestDistribution/appium-flutter-server/releases/latest/download/app-debug.apk"
3131
FLUTTER_IOS_APP: "https://github.com/AppiumTestDistribution/appium-flutter-server/releases/latest/download/ios.zip"
3232
PREBUILT_WDA_PATH: ${{ github.workspace }}/wda/WebDriverAgentRunner-Runner.app
@@ -38,33 +38,49 @@ jobs:
3838
matrix:
3939
include:
4040
- java: 17
41-
# Need to use specific (not `-latest`) version of macOS to be sure the required version of Xcode/simulator is available
42-
platform: macos-14
41+
platform: macos-15
4342
e2e-tests: ios
43+
selenium: stable
4444
- java: 17
45-
# Need to use specific (not `-latest`) version of macOS to be sure the required version of Xcode/simulator is available
46-
platform: macos-14
45+
platform: macos-15
4746
e2e-tests: flutter-ios
47+
selenium: stable
4848
- java: 17
4949
platform: ubuntu-latest
5050
e2e-tests: android
51+
selenium: stable
5152
- java: 17
5253
platform: ubuntu-latest
5354
e2e-tests: flutter-android
55+
selenium: stable
5456
- java: 21
5557
platform: ubuntu-latest
58+
selenium: stable
5659
- java: 25
5760
platform: ubuntu-latest
61+
selenium: stable
62+
# Snapshot: compile-only (no E2E) to verify compatibility with latest Selenium
63+
- java: 17
64+
platform: ubuntu-latest
65+
selenium: snapshot
66+
- java: 21
67+
platform: ubuntu-latest
68+
selenium: snapshot
69+
- java: 25
70+
platform: ubuntu-latest
71+
selenium: snapshot
5872
fail-fast: false
5973

6074
runs-on: ${{ matrix.platform }}
6175

62-
name: JDK ${{ matrix.java }} - ${{ matrix.platform }} ${{ matrix.e2e-tests }}
76+
continue-on-error: ${{ matrix.selenium == 'snapshot' }}
77+
78+
name: JDK ${{ matrix.java }} - ${{ matrix.platform }} ${{ matrix.e2e-tests || 'build' }} (${{ matrix.selenium }})
6379
steps:
6480
- uses: actions/checkout@v6
6581

6682
- name: Enable KVM group perms
67-
if: matrix.e2e-tests == 'android' || matrix.e2e-tests == 'flutter-android'
83+
if: (matrix.e2e-tests == 'android' || matrix.e2e-tests == 'flutter-android') && matrix.selenium == 'stable'
6884
run: |
6985
echo 'KERNEL=="kvm", GROUP="kvm", MODE="0666", OPTIONS+="static_node=kvm"' | sudo tee /etc/udev/rules.d/99-kvm4all.rules
7086
sudo udevadm control --reload-rules
@@ -79,80 +95,84 @@ jobs:
7995
- name: Setup Gradle
8096
uses: gradle/actions/setup-gradle@v5
8197

82-
- name: Build with Gradle against Selenium nightly build
98+
- name: Resolve Selenium snapshot version
99+
if: matrix.selenium == 'snapshot'
83100
run: |
84101
latest_snapshot=$(curl -sf https://raw.githubusercontent.com/SeleniumHQ/selenium/refs/heads/trunk/java/version.bzl | grep 'SE_VERSION' | sed 's/.*"\(.*\)".*/\1/')
85102
echo ">>> $latest_snapshot"
86103
echo "latest_snapshot=$latest_snapshot" >> "$GITHUB_ENV"
87-
./gradlew clean build -PisCI -Pselenium.version=$latest_snapshot
88104
89-
- name: Build with Gradle against stable Selenium version
90-
run: |
91-
./gradlew clean build -PisCI
105+
- name: Build with Gradle (stable Selenium)
106+
if: matrix.selenium == 'stable'
107+
run: ./gradlew clean build
108+
109+
- name: Build with Gradle (snapshot Selenium)
110+
if: matrix.selenium == 'snapshot'
111+
run: ./gradlew clean build -Pselenium.version=$latest_snapshot
92112

93113
- name: Install Node.js
94-
if: ${{ matrix.e2e-tests }}
114+
if: ${{ matrix.e2e-tests && matrix.selenium == 'stable' }}
95115
uses: actions/setup-node@v6
96116
with:
97117
node-version: 'lts/*'
98118

99119
- name: Install Appium
100-
if: ${{ matrix.e2e-tests }}
120+
if: ${{ matrix.e2e-tests && matrix.selenium == 'stable' }}
101121
run: npm install --location=global appium
102122

103123
- name: Install UIA2 driver
104-
if: matrix.e2e-tests == 'android' || matrix.e2e-tests == 'flutter-android'
124+
if: (matrix.e2e-tests == 'android' || matrix.e2e-tests == 'flutter-android') && matrix.selenium == 'stable'
105125
run: appium driver install uiautomator2
106126

107127
- name: Install Flutter Integration driver
108-
if: matrix.e2e-tests == 'flutter-android' || matrix.e2e-tests == 'flutter-ios'
128+
if: (matrix.e2e-tests == 'flutter-android' || matrix.e2e-tests == 'flutter-ios') && matrix.selenium == 'stable'
109129
run: appium driver install appium-flutter-integration-driver --source npm
110130

111131
- name: Run Android E2E tests
112-
if: matrix.e2e-tests == 'android'
132+
if: matrix.e2e-tests == 'android' && matrix.selenium == 'stable'
113133
uses: reactivecircus/android-emulator-runner@v2
114134
with:
115-
script: ./gradlew e2eAndroidTest -PisCI -Pselenium.version=$latest_snapshot
135+
script: ./gradlew e2eAndroidTest
116136
api-level: ${{ env.ANDROID_SDK_VERSION }}
117137
avd-name: ${{ env.ANDROID_EMU_NAME }}
118138
disable-spellchecker: true
119139
disable-animations: true
120140
target: ${{ env.ANDROID_EMU_TARGET }}
121141

122142
- name: Run Flutter Android E2E tests
123-
if: matrix.e2e-tests == 'flutter-android'
143+
if: matrix.e2e-tests == 'flutter-android' && matrix.selenium == 'stable'
124144
uses: reactivecircus/android-emulator-runner@v2
125145
with:
126-
script: ./gradlew e2eFlutterTest -Pplatform="android" -Pselenium.version=$latest_snapshot -PisCI -PflutterApp=${{ env.FLUTTER_ANDROID_APP }}
146+
script: ./gradlew e2eFlutterTest -Pplatform="android" -PflutterApp=${{ env.FLUTTER_ANDROID_APP }}
127147
api-level: ${{ env.ANDROID_SDK_VERSION }}
128148
avd-name: ${{ env.ANDROID_EMU_NAME }}
129149
disable-spellchecker: true
130150
disable-animations: true
131151
target: ${{ env.ANDROID_EMU_TARGET }}
132152

133153
- name: Select Xcode
134-
if: matrix.e2e-tests == 'ios' || matrix.e2e-tests == 'flutter-ios'
154+
if: (matrix.e2e-tests == 'ios' || matrix.e2e-tests == 'flutter-ios') && matrix.selenium == 'stable'
135155
uses: maxim-lobanov/setup-xcode@v1
136156
with:
137157
xcode-version: "${{ env.XCODE_VERSION }}"
138158
- name: Prepare iOS simulator
139-
if: matrix.e2e-tests == 'ios' || matrix.e2e-tests == 'flutter-ios'
159+
if: (matrix.e2e-tests == 'ios' || matrix.e2e-tests == 'flutter-ios') && matrix.selenium == 'stable'
140160
uses: futureware-tech/simulator-action@v4
141161
with:
142162
model: "${{ env.IOS_DEVICE_NAME }}"
143163
os_version: "${{ env.IOS_PLATFORM_VERSION }}"
144164
wait_for_boot: true
145165
shutdown_after_job: false
146166
- name: Install XCUITest driver
147-
if: matrix.e2e-tests == 'ios' || matrix.e2e-tests == 'flutter-ios'
167+
if: (matrix.e2e-tests == 'ios' || matrix.e2e-tests == 'flutter-ios') && matrix.selenium == 'stable'
148168
run: appium driver install xcuitest
149169
- name: Download prebuilt WDA
150-
if: matrix.e2e-tests == 'ios' || matrix.e2e-tests == 'flutter-ios'
170+
if: (matrix.e2e-tests == 'ios' || matrix.e2e-tests == 'flutter-ios') && matrix.selenium == 'stable'
151171
run: appium driver run xcuitest download-wda-sim --platform=ios --outdir=$(dirname "$PREBUILT_WDA_PATH")
152172
- name: Run iOS E2E tests
153-
if: matrix.e2e-tests == 'ios'
154-
run: ./gradlew e2eIosTest -PisCI -Pselenium.version=$latest_snapshot
173+
if: matrix.e2e-tests == 'ios' && matrix.selenium == 'stable'
174+
run: ./gradlew e2eIosTest
155175

156176
- name: Run Flutter iOS E2E tests
157-
if: matrix.e2e-tests == 'flutter-ios'
158-
run: ./gradlew e2eFlutterTest -Pplatform="ios" -Pselenium.version=$latest_snapshot -PisCI -PflutterApp=${{ env.FLUTTER_IOS_APP }}
177+
if: matrix.e2e-tests == 'flutter-ios' && matrix.selenium == 'stable'
178+
run: ./gradlew e2eFlutterTest -Pplatform="ios" -PflutterApp=${{ env.FLUTTER_IOS_APP }}

build.gradle

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,9 @@ version = appiumClientVersion
2424
repositories {
2525
mavenCentral()
2626

27-
if (project.hasProperty("isCI")) {
27+
// Only add Selenium snapshot repo when resolving a SNAPSHOT version.
28+
// Release versions (e.g. from gradle.properties) resolve from Maven Central only.
29+
if (project.property('selenium.version').toString().contains('SNAPSHOT')) {
2830
maven {
2931
name = 'Central Portal Snapshots'
3032
url = 'https://central.sonatype.com/repository/maven-snapshots/'
@@ -49,7 +51,8 @@ dependencies {
4951
compileOnly 'org.projectlombok:lombok:1.18.42'
5052
annotationProcessor 'org.projectlombok:lombok:1.18.42'
5153

52-
if (project.hasProperty("isCI")) {
54+
// Pin exact Selenium version when using a SNAPSHOT (needs snapshot repo); otherwise use version range.
55+
if (seleniumVersion.toString().contains('SNAPSHOT')) {
5356
api "org.seleniumhq.selenium:selenium-api:${seleniumVersion}"
5457
api "org.seleniumhq.selenium:selenium-remote-driver:${seleniumVersion}"
5558
api "org.seleniumhq.selenium:selenium-support:${seleniumVersion}"

0 commit comments

Comments
 (0)