-
Notifications
You must be signed in to change notification settings - Fork 5
refactor(ci): standardize workflows and add retry mechanisms and centralized config #185
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
teodorciuraru
merged 142 commits into
main
from
teodorciuraru/standardize-browserstack-ci
Oct 16, 2025
Merged
Changes from all 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…
teodorciuraru 41fb8b6
feat(ci): extract seed document logic into reusable composite action
teodorciuraru 66ffba3
fix(javascript-web): use ORDER BY _id ASC instead of ORDER BY done
teodorciuraru 6bec5bf
fix: use ORDER BY title ASC for consistency across all apps
teodorciuraru 1be6a8c
fix(javascript-web): correct document ID matching in BrowserStack test
teodorciuraru b49e294
fix: portable head command and exact doc ID matching in tests
teodorciuraru 9daf1c6
refactor(ci): standardize KMP workflow to use single seed job after b…
teodorciuraru 1a444ed
refactor(ci): standardize seed job name to seed-ditto-cloud
teodorciuraru 32d3110
refactor(ci): extract inline seed to seed-ditto-cloud job in android-…
teodorciuraru 88b3184
refactor(ci): extract inline seed to seed-ditto-cloud job in android-…
teodorciuraru 8d999e3
refactor(ci): standardize seed-ditto-cloud job in swift and flutter
teodorciuraru efec197
refactor(ci): extract inline seed to seed-ditto-cloud job in java-spring
teodorciuraru 75e718e
fix: remove redundant job dependencies from summary jobs
teodorciuraru b52d6e7
fix(java-spring): ensure Ditto cloud sync is enabled at runtime
teodorciuraru 57c7d96
fix(ci): remove retry logic from android-java and fix kotlin-multipla…
teodorciuraru b4a63aa
refactor(ci): move seed steps inline to BrowserStack test jobs
teodorciuraru a899b26
fix(ci): use specific BrowserStack links in android-cpp and java-spri…
teodorciuraru 4db35d8
feat(ci): standardize BrowserStack naming across all workflows
teodorciuraru 45d628f
feat(ci): remove branch restrictions to allow workflows on all branches
teodorciuraru 7adef7f
feat(ci): standardize javascript-web BrowserStack naming and links
teodorciuraru c515ea0
feat(ci): move seed action into React Native test jobs
teodorciuraru 4b29854
feat(ci): refactor javascript-web workflow to standard structure
teodorciuraru a8bae9e
fix(ci): add Node.js setup to javascript-web browserstack-test job
teodorciuraru ecd89a0
fix(ci): pre-install http-server to avoid race condition
teodorciuraru 575f56c
fix(ci): increase BrowserStack Local tunnel wait time to 20s
teodorciuraru 8de19ef
chore(ci): standardize summary job naming across all workflows
teodorciuraru 158ef9b
chore(ci): add critical production-readiness fixes
teodorciuraru 06a8389
refactor(ci): reorganize device config by SDK/app instead of framework
teodorciuraru de46e27
refactor(ci): standardize BrowserStack job names to browserstack-{pla…
teodorciuraru a5c0fba
fix(ci): remove Google Pixel 6-12.0 from Kotlin Multiplatform tests
teodorciuraru 1366496
refactor(ci): standardize instrumentationOptions key and fix javascri…
teodorciuraru 8664c6e
refactor(ci): standardize MAX_WAIT_TIME to 30 minutes across all work…
teodorciuraru 847e744
refactor(ci): remove concurrency and add retry mechanism to BrowserSt…
teodorciuraru f8610e0
refactor(ci): add retry to javascript-web and dotnet-maui BrowserStac…
teodorciuraru d423c2a
refactor(ci): add retry mechanism to all remaining BrowserStack workf…
teodorciuraru 3fa8259
fix(ci): correct browserstack script filename in javascript-web workflow
teodorciuraru 20de0ba
refactor(ci): load BrowserStack devices from centralized JSON config
teodorciuraru bb20bdb
fix(ci): add 60-minute timeout to all BrowserStack retry blocks
teodorciuraru 64774d8
refactor(ci): standardize BrowserStack timeout and test parameters
teodorciuraru 48546a6
fix(tests): standardize test parameter to GITHUB_TEST_DOC_TITLE
teodorciuraru ffdc771
fix(build): standardize GITHUB_TEST_DOC_TITLE in build configs and sc…
teodorciuraru 1e74f9f
refactor(ci): standardize all env variables to GITHUB_TEST_DOC_TITLE
teodorciuraru 6e97b5d
refactor(tests): standardize Maestro env variable to GITHUB_TEST_DOC_…
teodorciuraru 0b9d051
Revert "refactor(tests): standardize Maestro env variable to GITHUB_T…
teodorciuraru 635fe44
refactor(tests): standardize Maestro variable to MAESTRO_GITHUB_TEST_…
teodorciuraru 9b1c218
fix(tests): standardize dotnet-tui to use GITHUB_TEST_DOC_TITLE
teodorciuraru 23aa9f9
fix(tests): standardize Flutter to use GITHUB_TEST_DOC_TITLE
teodorciuraru 3d072e9
refactor(ci): standardize env vars and centralize device configs
teodorciuraru 2097ce3
refactor(ci): combine Execute and Wait steps in retry blocks for andr…
teodorciuraru b7ce532
refactor(ci): rename Execute steps to Execute and wait for flutter/sw…
teodorciuraru 05ec9d4
refactor(ci): combine Execute and Wait logic into single retry blocks
teodorciuraru bcfc3ea
refactor(ci): centralize android-cpp and dotnet-maui device configs
teodorciuraru 9b3bea1
fix(ci): format workflow files with prettier
teodorciuraru d2149a2
fix(lint): format Flutter and Rust TUI code
teodorciuraru 848a002
refactor(ci): standardize workflow triggers
teodorciuraru b497a0d
fix(ci): restore missing push triggers
teodorciuraru 17af6bc
ci: trigger all workflows with empty .citest files
teodorciuraru a0219a3
Revert "ci: trigger all workflows with empty .citest files"
teodorciuraru ec2e296
refactor(ci): move dotnet-maui seeding inline to retry block
teodorciuraru 9321f1f
refactor(ci): move android-cpp and dotnet-maui seeding inline to retr…
teodorciuraru bc45b5b
refactor(ci): move seed AND upload into retry blocks for android-cpp …
teodorciuraru ebb2383
refactor(ci): move ALL seed+upload into retry blocks for 8 workflows
teodorciuraru 4f20d38
refactor(ci): move app/test uploads OUTSIDE retry blocks
teodorciuraru 6a2ffb9
refactor(ci): standardize inline seeding for react-native-expo and swift
teodorciuraru 4fd800e
debug(ci): add flutter seed API response logging
teodorciuraru ea58fbd
fix(ci): add -L flag to curl for following redirects in seed API calls
teodorciuraru 3040e03
fix(ci): update all seed API calls from v1 to v4
teodorciuraru e27cf59
fix(ci): add branch filter to push triggers to prevent duplicate runs
teodorciuraru 34090b7
refactor(ci): remove push triggers to optimize CI costs
teodorciuraru de1df22
refactor(ci): remove push triggers from TUI/WinForms workflows
teodorciuraru 2f0650f
fix(ci): use inverted timestamp for seeded tasks
teodorciuraru 637fa6c
fix(ci): remove backslash escaping from INVERTED_TIMESTAMP variables
teodorciuraru ab557a1
fix(swift): handle local network permission dialog in XCUITests
teodorciuraru 57c7794
feat(ci): add concurrency control to all BrowserStack workflows
teodorciuraru 009840b
fix(swift): wait for permission dialog instead of tapping random element
teodorciuraru dfd977f
fix(ci): standardize BrowserStack project and build names in test code
teodorciuraru 58e16b1
fix(ci): add autoGrantPermissions for Flutter Android tests
teodorciuraru 79037de
fix(ci): improve error handling and fix workflow dependencies
teodorciuraru 12eb5b0
fix(ci): skip tests during Java Spring bootJar build
teodorciuraru 7f81528
fix(ci): increase all BrowserStack job timeouts to 150 minutes
teodorciuraru 383e5c8
fix(java-spring): add missing BrowserStack browser/OS capabilities
teodorciuraru 12fdd61
refactor(java-spring): read BrowserStack config from browserstack-dev…
teodorciuraru ec0158c
docs(ci): add BrowserStack device format documentation
teodorciuraru 3c89a4a
fix(ci): remove timeout_minutes from retry actions to fix wait behavior
teodorciuraru 8ce0192
Revert "fix(ci): remove timeout_minutes from retry actions to fix wai…
teodorciuraru 8589fa3
fix(ci): increase retry_wait_seconds to 900 (15 min) for BrowserStack…
teodorciuraru f242d9c
fix(flutter-ci): move seed+build+upload+test inside retry blocks for …
teodorciuraru 7986963
debug: add logging for dart-define values in Flutter workflow
teodorciuraru b22a58e
fix(flutter-ci): remove unnecessary iOS app upload and debug logging
teodorciuraru 0c41ad7
fix(flutter-ci): use absolute path for iOS test package upload
teodorciuraru f9f9160
fix(flutter-ci): add clean step before Android build
teodorciuraru 60991cd
fix(ci): improve Flutter iOS paths and BrowserStack wait loop detection
teodorciuraru f1f9415
debug(ci): add extensive logging for Flutter Android dart-defines
teodorciuraru 094357b
debug(flutter): add logging for dart-define environment variables
teodorciuraru 5d4415d
fix(ci): export TASK_TITLE and ENCODED_TASK for subprocess visibility
teodorciuraru 95ef047
fix(ci): correct path to browserstack-devices.json for iOS tests
teodorciuraru e459c37
refactor(ci): remove retry mechanism from Flutter Android tests
teodorciuraru 5a36c61
refactor(flutter): remove retry mechanism, match PR #181 structure
teodorciuraru 347d447
fix(flutter): correct iOS artifact name to include run number
teodorciuraru 586c8ba
ci: retry Flutter workflow (BrowserStack capacity)
teodorciuraru 2b37bbb
fix(flutter): revert to TASK_TO_FIND to match PR #181
teodorciuraru 125f02d
fix(flutter): add autoGrantPermissions for Android tests
teodorciuraru e5499dd
Merge branch 'main' into teodorciuraru/standardize-browserstack-ci
teodorciuraru dec3b5a
fix(flutter): add missing INTEGRATION_TEST_MODE for Android and iOS
teodorciuraru b806176
feat(flutter): add retry mechanism for BrowserStack Android and iOS t…
teodorciuraru b8f8759
fix(flutter): move seed+build into retry block for both Android and iOS
teodorciuraru e798483
fix(ci): standardize BrowserStack workflow configurations
teodorciuraru 61ca2b8
fix(ci): rename Swift workflow to Swift CI for consistency
teodorciuraru b59985a
fix(dotnet-maui): remove default device fallbacks, require centralize…
teodorciuraru fc1514b
fix(rust-tui): require DITTO_CLOUD_TASK_TITLE, no default fallback
teodorciuraru c0d4451
refactor(ci): migrate BrowserStack config from JSON to YAML
teodorciuraru 7598661
refactor(ci): standardize timeout patterns and cleanup config
teodorciuraru 3f59203
feat(ci): add PR and commit context to BrowserStack dashboard names
teodorciuraru fd2bb66
feat(ci): add PR context to java-spring and android-cpp workflows
teodorciuraru ec2517a
fix(ci): add -p=json flag to all yq eval commands parsing JSON responses
teodorciuraru df2b616
fix(ci): use empty string instead of 'empty' keyword in yq fallback
teodorciuraru f911cb0
fix(ci): truncate PR titles to 75 chars to keep BrowserStack project …
teodorciuraru 8ee9914
chore(ci): remove unused retry-browserstack.sh script
teodorciuraru 98613c0
fix(android-cpp): require BROWSERSTACK_DEVICE, no default fallback
teodorciuraru 55bd4f3
feat(ci): add repo and platform to BrowserStack project names
teodorciuraru 7226038
fix(ci): use commit message in BrowserStack build names and fix test …
teodorciuraru 2b181dc
fix(ci): replace # with - in BrowserStack build names for compatibility
teodorciuraru 6696c23
feat(ci): add PR title and commit message to BrowserStack build names…
teodorciuraru a836877
fix(ci): fix sed quote escaping in sanitization regex
teodorciuraru ed78f99
fix(ci): escape forward slash in sed character class for BSD sed comp…
teodorciuraru 3597b5f
fix(ci): remove spaces in GitHub Actions variable expansion syntax
teodorciuraru 9da89e5
fix(ci): remove # character from fallback build names
teodorciuraru 71cb5dc
fix(ci): fetch PR info for push events to populate build names correctly
teodorciuraru 33f4adc
refactor(ci): simplify PR info fetching to always use gh CLI
teodorciuraru ddffabb
feat(ci): add reusable composite action for BrowserStack build info
teodorciuraru e006261
fix(ci): use correct branch reference for PR info fetching
teodorciuraru 6ef6a8c
fix(ci): update BrowserStack summary links to use project-only filter
teodorciuraru 0a71f33
refactor(ci): migrate all workflows to use composite action for build…
teodorciuraru 48a2ad7
refactor(ci): standardize BrowserStack summary links to use dynamic B…
teodorciuraru e744da2
feat(ci): add BUILD_ID extraction to all BrowserStack workflows
teodorciuraru fed68d9
refactor(ci): standardize BrowserStack summary links and fix project …
teodorciuraru 58f4b1a
fix(ci): only show BrowserStack section when build_id exists
teodorciuraru 083de99
fix(ci): add GH_TOKEN to build-info action and fix Espresso build names
teodorciuraru 81dcf7f
refactor(ci): improve BrowserStack buildName sanitization
teodorciuraru c57c7ab
refactor(ci): standardize JavaScript Web to use build-info action
teodorciuraru 5fc68d5
refactor(ci): auto-derive BrowserStack project names from workflow co…
teodorciuraru bfab9fe
fix(ci): add Android platform suffix to Kotlin Multiplatform workflow
teodorciuraru File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,63 @@ | ||
name: 'Generate BrowserStack Names' | ||
description: 'Auto-generates BrowserStack project name from workflow context' | ||
inputs: | ||
platform-suffix: | ||
description: 'Optional platform suffix to append to build name (e.g., " (Android)", " (iOS)")' | ||
required: false | ||
default: '' | ||
outputs: | ||
project-name: | ||
description: 'BrowserStack project name (auto-derived from workflow)' | ||
value: ${{ steps.generate.outputs.project-name }} | ||
build-name: | ||
description: 'BrowserStack build name (currently returns empty - FIXME)' | ||
value: ${{ steps.generate.outputs.build-name }} | ||
|
||
runs: | ||
using: 'composite' | ||
steps: | ||
- name: Generate BrowserStack names | ||
id: generate | ||
shell: bash | ||
run: | | ||
# Auto-derive project name from workflow file name | ||
# Pattern: <workflow-name>-ci.yml -> quickstart - <Workflow Name> | ||
WORKFLOW_FILE="${{ github.workflow }}" | ||
|
||
echo "🔍 Workflow: $WORKFLOW_FILE" | ||
|
||
# Extract platform name from workflow name and convert to title case | ||
# Examples: | ||
# "JavaScript Web CI" -> "JavaScript Web" | ||
# "Android Kotlin CI" -> "Android Kotlin" | ||
# "React Native Expo CI" -> "React Native Expo" | ||
PLATFORM_NAME=$(echo "$WORKFLOW_FILE" | sed 's/ CI$//') | ||
|
||
# Special case mappings for non-standard names | ||
case "$PLATFORM_NAME" in | ||
"Android C++") | ||
PLATFORM_NAME="Android CPP" | ||
;; | ||
esac | ||
|
||
PROJECT_NAME="quickstart - $PLATFORM_NAME" | ||
|
||
# FIXME: Build name generation is currently broken and doesn't work properly | ||
# For now, we return an empty string. This needs to be fixed in a future PR. | ||
# The build name should ideally include PR context and commit info, but the | ||
# current implementation using GitHub CLI and event context is unreliable. | ||
# | ||
# TODO: Implement proper build name generation that: | ||
# 1. Reliably fetches PR information | ||
# 2. Sanitizes strings for BrowserStack requirements | ||
# 3. Handles both PR and non-PR contexts | ||
# 4. Includes platform suffix when provided | ||
BUILD_NAME="" | ||
|
||
# Output values | ||
echo "project-name=$PROJECT_NAME" >> $GITHUB_OUTPUT | ||
echo "build-name=$BUILD_NAME" >> $GITHUB_OUTPUT | ||
|
||
# Debug output | ||
echo "📦 Project: $PROJECT_NAME" | ||
echo "🏗️ Build: $BUILD_NAME (empty - FIXME)" |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,115 @@ | ||
--- | ||
# BrowserStack Device Configuration | ||
# | ||
# Centralized configuration for all BrowserStack testing across CI workflows. | ||
# Each SDK/app has its own configuration section below. | ||
# | ||
# Device Selection Criteria: | ||
# - Coverage: Test across multiple OS versions (latest, current-1, current-2) | ||
# - Market share: Focus on popular devices (Pixel, Samsung Galaxy, iPhone) | ||
# - OS baseline: Ensure minimum supported OS versions are tested | ||
# | ||
# References: | ||
# - 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 | ||
|
||
# Android C++ QuickStart | ||
android-cpp: | ||
devices: | ||
- "Google Pixel 7-13.0" # Android 13 baseline | ||
|
||
# Android Java QuickStart | ||
android-java: | ||
devices: | ||
- "Google Pixel 8-14.0" # Latest Android 14 | ||
- "Samsung Galaxy S23-13.0" # Popular flagship, Android 13 | ||
- "Google Pixel 6-12.0" # Android 12 support | ||
- "OnePlus 9-11.0" # Android 11 minimum baseline | ||
|
||
# Android Kotlin QuickStart | ||
android-kotlin: | ||
devices: | ||
- "Google Pixel 8-14.0" # Latest Android 14 | ||
- "Samsung Galaxy S23-13.0" # Popular flagship, Android 13 | ||
- "Google Pixel 6-12.0" # Android 12 support | ||
- "OnePlus 9-11.0" # Android 11 minimum baseline | ||
|
||
# Flutter QuickStart (multi-platform) | ||
flutter: | ||
android: | ||
devices: | ||
- "Google Pixel 7-13.0" # Android 13 baseline | ||
- "Samsung Galaxy S23-13.0" # Popular flagship | ||
- "Google Pixel 6-12.0" # Android 12 support | ||
ios: | ||
devices: | ||
- "iPhone 13-15" # iOS 15 support | ||
- "iPhone 14-16" # iOS 16 current | ||
- "iPhone 12-17" # iOS 17 latest | ||
|
||
# Kotlin Multiplatform QuickStart | ||
kotlin-multiplatform: | ||
android: | ||
devices: | ||
- "Google Pixel 8-14.0" # Latest Android 14 | ||
- "Samsung Galaxy S23-13.0" # Popular flagship | ||
|
||
# React Native QuickStart | ||
react-native: | ||
android: | ||
devices: | ||
- "Samsung Galaxy S22-12.0" # Android 12 | ||
- "Google Pixel 7-13.0" # Android 13 | ||
ios: | ||
devices: | ||
- "iPhone 15-17.0" # Latest iOS 17 | ||
- "iPhone 14-16.0" # iOS 16 support | ||
|
||
# React Native Expo QuickStart | ||
react-native-expo: | ||
android: | ||
devices: | ||
- "Samsung Galaxy S22-12.0" # Android 12 | ||
- "Google Pixel 7-13.0" # Android 13 | ||
ios: | ||
devices: | ||
- "iPhone 15-17.0" # Latest iOS 17 | ||
- "iPhone 14-16.0" # iOS 16 support | ||
|
||
# .NET MAUI QuickStart (multi-platform) | ||
dotnet-maui: | ||
android: | ||
devices: | ||
- "Google Pixel 8-14.0" # Latest Android 14 | ||
- "Samsung Galaxy S23-13.0" # Popular flagship | ||
ios: | ||
devices: | ||
- "iPhone 15-17.0" # Latest iOS 17 | ||
- "iPhone 14-16.0" # iOS 16 support | ||
|
||
# Swift/iOS QuickStart | ||
swift: | ||
devices: | ||
- "iPhone 15 Pro-17" # Latest flagship with iOS 17 | ||
|
||
# Java Spring (web application) | ||
# Tests web app in desktop browsers using Selenium WebDriver | ||
java-spring: | ||
platforms: | ||
- os: "Windows" | ||
osVersion: "11" | ||
browserName: "Chrome" | ||
browserVersion: "latest" # Always test latest Chrome | ||
|
||
# JavaScript Web (React web application) | ||
# Tests web app in multiple desktop browsers | ||
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" |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file was deleted.
Oops, something went wrong.
Oops, something went wrong.
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.