Skip to content
Merged
Show file tree
Hide file tree
Changes from 110 commits
Commits
Show all changes
142 commits
Select commit Hold shift + click to select a range
97f45ce
feat(ci): add GitHub Step Summary to all workflows and standardize na…
Oct 2, 2025
41fb8b6
feat(ci): extract seed document logic into reusable composite action
Oct 2, 2025
66ffba3
fix(javascript-web): use ORDER BY _id ASC instead of ORDER BY done
Oct 2, 2025
6bec5bf
fix: use ORDER BY title ASC for consistency across all apps
Oct 2, 2025
1be6a8c
fix(javascript-web): correct document ID matching in BrowserStack test
Oct 2, 2025
b49e294
fix: portable head command and exact doc ID matching in tests
Oct 2, 2025
9daf1c6
refactor(ci): standardize KMP workflow to use single seed job after b…
Oct 2, 2025
1a444ed
refactor(ci): standardize seed job name to seed-ditto-cloud
Oct 2, 2025
32d3110
refactor(ci): extract inline seed to seed-ditto-cloud job in android-…
Oct 2, 2025
88b3184
refactor(ci): extract inline seed to seed-ditto-cloud job in android-…
Oct 2, 2025
8d999e3
refactor(ci): standardize seed-ditto-cloud job in swift and flutter
Oct 2, 2025
efec197
refactor(ci): extract inline seed to seed-ditto-cloud job in java-spring
Oct 2, 2025
75e718e
fix: remove redundant job dependencies from summary jobs
Oct 2, 2025
b52d6e7
fix(java-spring): ensure Ditto cloud sync is enabled at runtime
Oct 2, 2025
57c7d96
fix(ci): remove retry logic from android-java and fix kotlin-multipla…
Oct 2, 2025
b4a63aa
refactor(ci): move seed steps inline to BrowserStack test jobs
Oct 2, 2025
a899b26
fix(ci): use specific BrowserStack links in android-cpp and java-spri…
Oct 3, 2025
4db35d8
feat(ci): standardize BrowserStack naming across all workflows
Oct 3, 2025
45d628f
feat(ci): remove branch restrictions to allow workflows on all branches
Oct 3, 2025
7adef7f
feat(ci): standardize javascript-web BrowserStack naming and links
Oct 3, 2025
c515ea0
feat(ci): move seed action into React Native test jobs
Oct 3, 2025
4b29854
feat(ci): refactor javascript-web workflow to standard structure
Oct 3, 2025
a8bae9e
fix(ci): add Node.js setup to javascript-web browserstack-test job
Oct 3, 2025
ecd89a0
fix(ci): pre-install http-server to avoid race condition
Oct 3, 2025
575f56c
fix(ci): increase BrowserStack Local tunnel wait time to 20s
Oct 3, 2025
8de19ef
chore(ci): standardize summary job naming across all workflows
Oct 3, 2025
158ef9b
chore(ci): add critical production-readiness fixes
Oct 3, 2025
06a8389
refactor(ci): reorganize device config by SDK/app instead of framework
Oct 3, 2025
de46e27
refactor(ci): standardize BrowserStack job names to browserstack-{pla…
Oct 4, 2025
a5c0fba
fix(ci): remove Google Pixel 6-12.0 from Kotlin Multiplatform tests
Oct 4, 2025
1366496
refactor(ci): standardize instrumentationOptions key and fix javascri…
Oct 4, 2025
8664c6e
refactor(ci): standardize MAX_WAIT_TIME to 30 minutes across all work…
Oct 4, 2025
847e744
refactor(ci): remove concurrency and add retry mechanism to BrowserSt…
Oct 4, 2025
f8610e0
refactor(ci): add retry to javascript-web and dotnet-maui BrowserStac…
Oct 4, 2025
d423c2a
refactor(ci): add retry mechanism to all remaining BrowserStack workf…
Oct 4, 2025
3fa8259
fix(ci): correct browserstack script filename in javascript-web workflow
Oct 4, 2025
20de0ba
refactor(ci): load BrowserStack devices from centralized JSON config
Oct 4, 2025
bb20bdb
fix(ci): add 60-minute timeout to all BrowserStack retry blocks
Oct 4, 2025
64774d8
refactor(ci): standardize BrowserStack timeout and test parameters
Oct 4, 2025
48546a6
fix(tests): standardize test parameter to GITHUB_TEST_DOC_TITLE
Oct 4, 2025
ffdc771
fix(build): standardize GITHUB_TEST_DOC_TITLE in build configs and sc…
Oct 4, 2025
1e74f9f
refactor(ci): standardize all env variables to GITHUB_TEST_DOC_TITLE
Oct 4, 2025
6e97b5d
refactor(tests): standardize Maestro env variable to GITHUB_TEST_DOC_…
Oct 4, 2025
0b9d051
Revert "refactor(tests): standardize Maestro env variable to GITHUB_T…
Oct 4, 2025
635fe44
refactor(tests): standardize Maestro variable to MAESTRO_GITHUB_TEST_…
Oct 4, 2025
9b1c218
fix(tests): standardize dotnet-tui to use GITHUB_TEST_DOC_TITLE
Oct 4, 2025
23aa9f9
fix(tests): standardize Flutter to use GITHUB_TEST_DOC_TITLE
Oct 4, 2025
3d072e9
refactor(ci): standardize env vars and centralize device configs
Oct 4, 2025
2097ce3
refactor(ci): combine Execute and Wait steps in retry blocks for andr…
Oct 5, 2025
b7ce532
refactor(ci): rename Execute steps to Execute and wait for flutter/sw…
Oct 5, 2025
05ec9d4
refactor(ci): combine Execute and Wait logic into single retry blocks
Oct 5, 2025
bcfc3ea
refactor(ci): centralize android-cpp and dotnet-maui device configs
Oct 5, 2025
9b3bea1
fix(ci): format workflow files with prettier
Oct 5, 2025
d2149a2
fix(lint): format Flutter and Rust TUI code
Oct 5, 2025
848a002
refactor(ci): standardize workflow triggers
Oct 5, 2025
b497a0d
fix(ci): restore missing push triggers
Oct 5, 2025
17af6bc
ci: trigger all workflows with empty .citest files
Oct 5, 2025
a0219a3
Revert "ci: trigger all workflows with empty .citest files"
Oct 5, 2025
ec2e296
refactor(ci): move dotnet-maui seeding inline to retry block
Oct 5, 2025
9321f1f
refactor(ci): move android-cpp and dotnet-maui seeding inline to retr…
Oct 5, 2025
bc45b5b
refactor(ci): move seed AND upload into retry blocks for android-cpp …
Oct 5, 2025
ebb2383
refactor(ci): move ALL seed+upload into retry blocks for 8 workflows
Oct 5, 2025
4f20d38
refactor(ci): move app/test uploads OUTSIDE retry blocks
Oct 5, 2025
6a2ffb9
refactor(ci): standardize inline seeding for react-native-expo and swift
Oct 5, 2025
4fd800e
debug(ci): add flutter seed API response logging
Oct 5, 2025
ea58fbd
fix(ci): add -L flag to curl for following redirects in seed API calls
Oct 5, 2025
3040e03
fix(ci): update all seed API calls from v1 to v4
Oct 5, 2025
e27cf59
fix(ci): add branch filter to push triggers to prevent duplicate runs
Oct 5, 2025
34090b7
refactor(ci): remove push triggers to optimize CI costs
Oct 5, 2025
de1df22
refactor(ci): remove push triggers from TUI/WinForms workflows
Oct 5, 2025
2f0650f
fix(ci): use inverted timestamp for seeded tasks
Oct 5, 2025
637fa6c
fix(ci): remove backslash escaping from INVERTED_TIMESTAMP variables
Oct 5, 2025
ab557a1
fix(swift): handle local network permission dialog in XCUITests
Oct 5, 2025
57c7794
feat(ci): add concurrency control to all BrowserStack workflows
Oct 5, 2025
009840b
fix(swift): wait for permission dialog instead of tapping random element
Oct 5, 2025
dfd977f
fix(ci): standardize BrowserStack project and build names in test code
Oct 5, 2025
58e16b1
fix(ci): add autoGrantPermissions for Flutter Android tests
Oct 5, 2025
79037de
fix(ci): improve error handling and fix workflow dependencies
Oct 5, 2025
12eb5b0
fix(ci): skip tests during Java Spring bootJar build
Oct 5, 2025
7f81528
fix(ci): increase all BrowserStack job timeouts to 150 minutes
Oct 5, 2025
383e5c8
fix(java-spring): add missing BrowserStack browser/OS capabilities
Oct 5, 2025
12fdd61
refactor(java-spring): read BrowserStack config from browserstack-dev…
Oct 5, 2025
ec0158c
docs(ci): add BrowserStack device format documentation
Oct 5, 2025
3c89a4a
fix(ci): remove timeout_minutes from retry actions to fix wait behavior
Oct 5, 2025
8ce0192
Revert "fix(ci): remove timeout_minutes from retry actions to fix wai…
Oct 5, 2025
8589fa3
fix(ci): increase retry_wait_seconds to 900 (15 min) for BrowserStack…
Oct 5, 2025
f242d9c
fix(flutter-ci): move seed+build+upload+test inside retry blocks for …
Oct 6, 2025
7986963
debug: add logging for dart-define values in Flutter workflow
Oct 6, 2025
b22a58e
fix(flutter-ci): remove unnecessary iOS app upload and debug logging
Oct 6, 2025
0c41ad7
fix(flutter-ci): use absolute path for iOS test package upload
Oct 6, 2025
f9f9160
fix(flutter-ci): add clean step before Android build
Oct 6, 2025
60991cd
fix(ci): improve Flutter iOS paths and BrowserStack wait loop detection
Oct 6, 2025
f1f9415
debug(ci): add extensive logging for Flutter Android dart-defines
Oct 6, 2025
094357b
debug(flutter): add logging for dart-define environment variables
Oct 6, 2025
5d4415d
fix(ci): export TASK_TITLE and ENCODED_TASK for subprocess visibility
Oct 6, 2025
95ef047
fix(ci): correct path to browserstack-devices.json for iOS tests
Oct 6, 2025
e459c37
refactor(ci): remove retry mechanism from Flutter Android tests
Oct 6, 2025
5a36c61
refactor(flutter): remove retry mechanism, match PR #181 structure
Oct 6, 2025
347d447
fix(flutter): correct iOS artifact name to include run number
Oct 6, 2025
586c8ba
ci: retry Flutter workflow (BrowserStack capacity)
Oct 6, 2025
2b37bbb
fix(flutter): revert to TASK_TO_FIND to match PR #181
Oct 6, 2025
125f02d
fix(flutter): add autoGrantPermissions for Android tests
Oct 6, 2025
e5499dd
Merge branch 'main' into teodorciuraru/standardize-browserstack-ci
Oct 6, 2025
dec3b5a
fix(flutter): add missing INTEGRATION_TEST_MODE for Android and iOS
Oct 6, 2025
b806176
feat(flutter): add retry mechanism for BrowserStack Android and iOS t…
Oct 6, 2025
b8f8759
fix(flutter): move seed+build into retry block for both Android and iOS
Oct 6, 2025
e798483
fix(ci): standardize BrowserStack workflow configurations
Oct 6, 2025
61ca2b8
fix(ci): rename Swift workflow to Swift CI for consistency
Oct 6, 2025
b59985a
fix(dotnet-maui): remove default device fallbacks, require centralize…
Oct 6, 2025
fc1514b
fix(rust-tui): require DITTO_CLOUD_TASK_TITLE, no default fallback
Oct 6, 2025
c0d4451
refactor(ci): migrate BrowserStack config from JSON to YAML
Oct 7, 2025
7598661
refactor(ci): standardize timeout patterns and cleanup config
Oct 7, 2025
3f59203
feat(ci): add PR and commit context to BrowserStack dashboard names
Oct 7, 2025
fd2bb66
feat(ci): add PR context to java-spring and android-cpp workflows
Oct 7, 2025
ec2517a
fix(ci): add -p=json flag to all yq eval commands parsing JSON responses
Oct 7, 2025
df2b616
fix(ci): use empty string instead of 'empty' keyword in yq fallback
Oct 7, 2025
f911cb0
fix(ci): truncate PR titles to 75 chars to keep BrowserStack project …
Oct 7, 2025
8ee9914
chore(ci): remove unused retry-browserstack.sh script
Oct 7, 2025
98613c0
fix(android-cpp): require BROWSERSTACK_DEVICE, no default fallback
Oct 7, 2025
55bd4f3
feat(ci): add repo and platform to BrowserStack project names
Oct 7, 2025
7226038
fix(ci): use commit message in BrowserStack build names and fix test …
Oct 8, 2025
2b181dc
fix(ci): replace # with - in BrowserStack build names for compatibility
Oct 8, 2025
6696c23
feat(ci): add PR title and commit message to BrowserStack build names…
Oct 8, 2025
a836877
fix(ci): fix sed quote escaping in sanitization regex
Oct 8, 2025
ed78f99
fix(ci): escape forward slash in sed character class for BSD sed comp…
Oct 8, 2025
3597b5f
fix(ci): remove spaces in GitHub Actions variable expansion syntax
Oct 8, 2025
9da89e5
fix(ci): remove # character from fallback build names
Oct 8, 2025
71cb5dc
fix(ci): fetch PR info for push events to populate build names correctly
Oct 8, 2025
33f4adc
refactor(ci): simplify PR info fetching to always use gh CLI
Oct 8, 2025
ddffabb
feat(ci): add reusable composite action for BrowserStack build info
Oct 8, 2025
e006261
fix(ci): use correct branch reference for PR info fetching
Oct 8, 2025
6ef6a8c
fix(ci): update BrowserStack summary links to use project-only filter
Oct 8, 2025
0a71f33
refactor(ci): migrate all workflows to use composite action for build…
Oct 9, 2025
48a2ad7
refactor(ci): standardize BrowserStack summary links to use dynamic B…
Oct 9, 2025
e744da2
feat(ci): add BUILD_ID extraction to all BrowserStack workflows
Oct 9, 2025
fed68d9
refactor(ci): standardize BrowserStack summary links and fix project …
Oct 9, 2025
58f4b1a
fix(ci): only show BrowserStack section when build_id exists
Oct 9, 2025
083de99
fix(ci): add GH_TOKEN to build-info action and fix Espresso build names
Oct 9, 2025
81dcf7f
refactor(ci): improve BrowserStack buildName sanitization
Oct 9, 2025
c57c7ab
refactor(ci): standardize JavaScript Web to use build-info action
Oct 13, 2025
5fc68d5
refactor(ci): auto-derive BrowserStack project names from workflow co…
Oct 13, 2025
bfab9fe
fix(ci): add Android platform suffix to Kotlin Multiplatform workflow
Oct 13, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
127 changes: 127 additions & 0 deletions .github/browserstack-devices.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,127 @@
{
"android-cpp": {
"devices": ["Google Pixel 7-13.0"]
},
"android-java": {
"devices": [
"Google Pixel 8-14.0",
"Samsung Galaxy S23-13.0",
"Google Pixel 6-12.0",
"OnePlus 9-11.0"
]
},
"android-kotlin": {
"devices": [
"Google Pixel 8-14.0",
"Samsung Galaxy S23-13.0",
"Google Pixel 6-12.0",
"OnePlus 9-11.0"
]
},
"flutter": {
"android": {
"devices": [
"Google Pixel 7-13.0",
"Samsung Galaxy S23-13.0",
"Google Pixel 6-12.0"
]
},
"ios": {
"devices": [
"iPhone 13-15",
"iPhone 14-16",
"iPhone 12-17"
]
}
},
"kotlin-multiplatform": {
"android": {
"devices": [
"Google Pixel 8-14.0",
"Samsung Galaxy S23-13.0"
]
}
},
"react-native": {
"android": {
"devices": [
"Samsung Galaxy S22-12.0",
"Google Pixel 7-13.0"
]
},
"ios": {
"devices": [
"iPhone 15-17.0",
"iPhone 14-16.0"
]
}
},
"react-native-expo": {
"android": {
"devices": [
"Samsung Galaxy S22-12.0",
"Google Pixel 7-13.0"
]
},
"ios": {
"devices": [
"iPhone 15-17.0",
"iPhone 14-16.0"
]
}
},
"dotnet-maui": {
"android": {
"devices": [
"Google Pixel 8-14.0",
"Samsung Galaxy S23-13.0"
]
},
"ios": {
"devices": [
"iPhone 15-17.0",
"iPhone 14-16.0"
]
}
},
"swift": {
"devices": ["iPhone 15 Pro-17"]
},
"java-spring": {
"platforms": [
{
"os": "Windows",
"osVersion": "11",
"browserName": "Chrome",
"browserVersion": "latest"
}
]
},
"javascript-web": {
"browsers": [
{
"browser": "Chrome",
"browser_version": "120.0",
"os": "Windows",
"os_version": "11"
},
{
"browser": "Firefox",
"browser_version": "121.0",
"os": "Windows",
"os_version": "11"
}
]
},
"_metadata": {
"description": "Centralized BrowserStack device configuration organized by SDK/app",
"last_updated": "2025-10-03",
"structure": "Each SDK has its own configuration. Multi-platform SDKs have nested android/ios objects.",
"device_format_docs": {
"mobile_devices": "https://www.browserstack.com/docs/app-automate/api-reference/appium/devices",
"desktop_browsers": "https://www.browserstack.com/docs/automate/api-reference/selenium/list-of-browsers-and-platforms",
"format_mobile": "Device Name-OS Version (e.g., 'Google Pixel 7-13.0', 'iPhone 15-17')",
"format_desktop": "Separate fields: os, osVersion, browserName, browserVersion"
}
}
}
28 changes: 10 additions & 18 deletions .github/scripts/browserstack-test.py
Original file line number Diff line number Diff line change
Expand Up @@ -64,8 +64,8 @@ def run_test(browser_config):
"os": browser_config["os"],
"osVersion": browser_config["os_version"],
"sessionName": f"Ditto Tasks Test - {browser_config['browser']} {browser_config['browser_version']}",
"buildName": f"Ditto JavaScript Web Build #{os.environ.get('GITHUB_RUN_NUMBER', '0')}",
"projectName": "Ditto JavaScript Web",
"buildName": f"CI Build #{os.environ.get('GITHUB_RUN_NUMBER', '0')}",
"projectName": "QuickStart JavaScript Web",
"local": "true",
"debug": "true",
"video": "true",
Expand Down Expand Up @@ -125,7 +125,7 @@ def run_test(browser_config):
time.sleep(3)

# Check for GitHub test document
github_doc_id = os.environ.get("GITHUB_TEST_DOC_ID")
github_doc_id = os.environ.get("DITTO_CLOUD_TASK_TITLE")
if github_doc_id:
print(f"Checking for GitHub test document: {github_doc_id}")
if wait_for_sync_document(driver, github_doc_id):
Expand Down Expand Up @@ -226,21 +226,13 @@ def run_test(browser_config):

def main():
"""Main function to run all browser tests."""
# Browser configurations to test
browsers = [
{
"browser": "Chrome",
"browser_version": "120.0",
"os": "Windows",
"os_version": "11",
},
{
"browser": "Firefox",
"browser_version": "121.0",
"os": "Windows",
"os_version": "11",
},
]
# Load browser configurations from centralized config
config_path = os.path.join(
os.path.dirname(__file__), "..", "browserstack-devices.json"
)
with open(config_path, "r") as f:
config = json.load(f)
browsers = config["javascript-web"]["browsers"]

# Run tests on all browsers
results = []
Expand Down
Loading
Loading