Skip to content

Conversation

@glitchminer
Copy link
Contributor

What does the PR do

  • introduced ci/Jenkinsfile.test-e2e.android so Jenkins can run Android smoke tests on BrowserStack (in preparation for PR checks and nightly runs)
  • updated config and the reporting/logging structure to give one report folder per run for export (inlcuding logs & screenshots)

Successfully ran with simulated config locally but still to be tested from Jenkins directly

@glitchminer glitchminer requested review from a team as code owners October 28, 2025 22:57
@glitchminer glitchminer requested review from Rsttskyy and removed request for a team October 28, 2025 22:57
@status-im-auto
Copy link
Member

status-im-auto commented Oct 28, 2025

Jenkins Builds

Click to see older builds (51)
Commit #️⃣ Finished (UTC) Duration Platform Result
✔️ 162d5a5 #1 2025-10-28 23:06:07 ~8 min tests/nim 📄log
✔️ 162d5a5 #1 2025-10-28 23:08:01 ~10 min android/arm64 🤖apk 📲
✔️ 162d5a5 #1 2025-10-28 23:10:22 ~12 min ios/aarch64 📦pkg
✔️ 162d5a5 #1 2025-10-28 23:15:25 ~17 min linux/x86_64 📦tgz
✔️ 162d5a5 #1 2025-10-28 23:17:03 ~19 min macos/aarch64 🍎dmg
✔️ 162d5a5 #1 2025-10-28 23:19:25 ~21 min windows/x86_64 💿exe
✔️ 162d5a5 #1 2025-10-28 23:20:33 ~22 min macos/aarch64-nwaku 🍎dmg
✔️ 162d5a5 #1 2025-10-28 23:21:34 ~24 min linux/x86_64-nwaku 📦tgz
✔️ 162d5a5 PR19163 2025-10-28 23:28:44 ~9 min tests/e2e-windows 📊rpt
✔️ 162d5a5 pr19163 2025-10-28 23:32:10 ~16 min tests/e2e 📊rpt
✔️ 162d5a5 #2 2025-11-07 13:45:09 ~8 min tests/nim 📄log
✔️ 162d5a5 #2 2025-11-07 13:46:04 ~9 min ios/aarch64 📦pkg
✔️ 162d5a5 #2 2025-11-07 13:51:31 ~14 min tests/ui 📄log
✔️ 162d5a5 #2 2025-11-07 13:51:53 ~14 min macos/aarch64 🍎dmg
✖️ 162d5a5 #2 2025-11-07 13:53:59 ~17 min linux/x86_64 📦tgz
✔️ 162d5a5 #2 2025-11-07 13:56:27 ~19 min macos/aarch64-nwaku 🍎dmg
✖️ 162d5a5 #2 2025-11-07 13:59:35 ~22 min windows/x86_64 💿exe
✔️ 162d5a5 #2 2025-11-07 14:00:26 ~23 min linux/x86_64-nwaku 📦tgz
✔️ 162d5a5 #3 2025-11-10 14:52:24 ~7 min ios/aarch64 📦pkg
✔️ 162d5a5 #3 2025-11-10 14:52:59 ~8 min tests/nim 📄log
162d5a5 #3 2025-11-10 14:56:17 ~11 min macos/aarch64 📄log
162d5a5 #3 2025-11-10 14:56:48 ~12 min macos/aarch64-nwaku 📄log
✖️ 162d5a5 #3 2025-11-10 15:02:14 ~17 min linux/x86_64 📦tgz
✔️ 162d5a5 #3 2025-11-10 15:03:39 ~18 min tests/ui 📄log
✔️ 162d5a5 #3 2025-11-10 15:04:40 ~20 min linux/x86_64-nwaku 📦tgz
✔️ 162d5a5 #3 2025-11-10 15:05:03 ~20 min windows/x86_64 💿exe
✔️ 162d5a5 PR19163 2025-11-10 15:17:53 ~12 min tests/e2e-windows 📊rpt
✔️ a21a910 #4 2025-11-12 15:08:30 ~6 min tests/nim 📄log
✔️ a21a910 #4 2025-11-12 15:11:33 ~9 min android/arm64 🤖apk 📲
✔️ a21a910 #4 2025-11-12 15:12:51 ~10 min ios/aarch64 📱ipa
✔️ a21a910 #4 2025-11-12 15:14:34 ~12 min macos/aarch64 🍎dmg
✔️ a21a910 #4 2025-11-12 15:16:09 ~14 min tests/ui 📄log
✔️ a21a910 #4 2025-11-12 15:24:01 ~22 min linux/x86_64-nwaku 📦tgz
✔️ a21a910 #4 2025-11-12 15:26:02 ~23 min windows/x86_64 💿exe
✖️ a21a910 PR19163 2025-11-12 15:37:16 ~11 min tests/e2e-windows 📊rpt
✔️ 41c709e2 #5 2025-11-12 17:37:30 ~20 min android/arm64 🤖apk 📲
✔️ f913cba4 #6 2025-11-13 17:38:13 ~22 min android/arm64 🤖apk 📲
✔️ 84d6d5c4 #7 2025-11-14 17:27:28 ~11 min android/arm64 🤖apk 📲
✔️ 2dbfaf5c #8 2025-11-15 17:27:37 ~12 min android/arm64 🤖apk 📲
✔️ 644cb06e #9 2025-11-17 17:27:24 ~11 min android/arm64 🤖apk 📲
✔️ dd2efa4c #10 2025-11-18 17:25:08 ~9 min android/arm64 🤖apk 📲
✔️ d711ae49 #11 2025-11-19 17:25:28 ~9 min android/arm64 🤖apk 📲
b8dc5e01 #12 2025-11-20 17:24:21 ~8 min android/arm64 📄log
✔️ 1abc3bc5 #13 2025-11-21 17:38:13 ~21 min android/arm64 🤖apk 📲
✔️ 31df6f0b #14 2025-11-22 17:28:02 ~12 min android/arm64 🤖apk 📲
✔️ ec509d82 #15 2025-11-24 17:40:46 ~24 min android/arm64 🤖apk 📲
✔️ 18c3d3df #16 2025-11-25 17:52:01 ~35 min android/arm64 🤖apk 📲
✔️ ddb2b47f #17 2025-11-26 17:44:38 ~28 min android/arm64 🤖apk 📲
✔️ f10f9f4e #18 2025-11-27 17:39:25 ~23 min android/arm64 🤖apk 📲
✔️ 054fa6fc #19 2025-11-28 17:37:04 ~20 min android/arm64 🤖apk 📲
✔️ 3a103e2a #20 2025-11-29 17:39:03 ~23 min android/arm64 🤖apk 📲
Commit #️⃣ Finished (UTC) Duration Platform Result
✔️ dff904fc #21 2025-12-01 17:42:14 ~25 min android/arm64 🤖apk 📲
✔️ 36ce919b #22 2025-12-02 17:45:36 ~29 min android/arm64 🤖apk 📲

Base automatically changed from e2e_appium/add-browserstack-tests to e2e_appium/add-browserstack November 7, 2025 13:36
@glitchminer glitchminer force-pushed the e2e_appium/add-browserstack branch from 42e0569 to 220c950 Compare November 10, 2025 11:42
Base automatically changed from e2e_appium/add-browserstack to master November 10, 2025 14:44
- wallet locators
- app lifecycle management
- toast message handling (visibility checks and logging).
- saved addresses page
…ertions

- Replaced instances of LambdaTest reporting with Cloud reporting
- Assertion messages for clarity
- Updated test methods for toast handling
Copy link
Member

@jakubgs jakubgs left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Much better, but needs some more work. You make a few weird assumptions about availability of env variables.

Comment on lines +16 to +24
if [[ ! -f "${APK_PATH}" ]]; then
echo "Error: APK_PATH does not exist or is not a file: ${APK_PATH}" >&2
exit 1
fi

if [[ ! -r "${APK_PATH}" ]]; then
echo "Error: APK_PATH is not readable: ${APK_PATH}" >&2
exit 1
fi
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pointless double test, the -r will fail if -f would fail.

Comment on lines +11 to +14
if [[ -z "${APK_PATH:-}" ]]; then
echo "Error: APK_PATH environment variable is required" >&2
exit 1
fi
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why is this an env variables rather than a positional argument?

curl -s -u "${BROWSERSTACK_USERNAME}:${BROWSERSTACK_ACCESS_KEY}" \
-X POST "https://api-cloud.browserstack.com/app-automate/upload" \
-F "file=@${APK_PATH}" \
-F "custom_id=${CUSTOM_ID}"
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Use --show-error and --fail-with-body to make debugging less painful:

Suggested change
-F "custom_id=${CUSTOM_ID}"
curl --request POST "https://api-cloud.browserstack.com/app-automate/upload"
--silent --show-error --fail-with-body \
--user "${BROWSERSTACK_USERNAME}:${BROWSERSTACK_ACCESS_KEY}" \
--form "file=@${APK_PATH}" \
--form "custom_id=${CUSTOM_ID}"

And use full flag names instead of cryptic one letter flags. Those are for CLI use, not for scripts.

}

parameters {
gitParameter(
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Avoid using gitParameter, see this PR for problem description:

Comment on lines +91 to +101
stage('Use provided BrowserStack app') {
when {
expression { params.BROWSERSTACK_APP_ID?.trim() }
}
steps {
script {
env.BROWSERSTACK_APP_ID = params.BROWSERSTACK_APP_ID.trim()
echo "Using provided BrowserStack app id: ${env.BROWSERSTACK_APP_ID}"
}
}
}
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pointless stage that achieves nothing.

steps {
script {
dir('test/e2e_appium') {
println("Using TEST_DEVICE_ID: ${env.TEST_DEVICE_ID}")
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not sure what the point of this is since user can just look up job parameters.

stage('Publish test results') {
steps {
script {
def runId = env.E2E_RUN_ID?.trim()
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Where is this supposed to come from?

def runId = env.E2E_RUN_ID?.trim()
def reportsPattern = runId ? "test/e2e_appium/reports/${runId}/**/*.xml" : "test/e2e_appium/reports/**/*.xml"
junit allowEmptyResults: true, testResults: reportsPattern
def archivePattern = runId ? "test/e2e_appium/reports/${runId}/**/*" : "test/e2e_appium/reports/**/*"
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why is this pattern wider than the one above? How are those artifacts useful?

Comment on lines +224 to +233
success {
script {
github.notifyPR(true)
}
}
failure {
script {
github.notifyPR(false)
}
}
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
success {
script {
github.notifyPR(true)
}
}
failure {
script {
github.notifyPR(false)
}
}
success { script { github.notifyPR(true) } }
failure { script { github.notifyPR(false) } }

}
}
cleanup {
cleanWs(disableDeferredWipeout: true)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
cleanWs(disableDeferredWipeout: true)
cleanWs(disableDeferredWipeout: true)
dir(env.WORKSPACE_TMP) { deleteDir() }

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants