Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
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
44 changes: 34 additions & 10 deletions .github/workflows/browserstack-e2e-android-journey.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
# This software may be modified and distributed under the terms
# of the MIT license. See the LICENSE file for details.
#
name: BrowserStack E2E — Android Journey
name: BrowserStack E2E — Android Journey & DaVinci

on:
workflow_call:
Expand All @@ -18,7 +18,7 @@ on:
description: BrowserStack session name used by Detox
required: false
type: string
default: android-detox-e2e-journey
default: android-detox-e2e-journey-davinci
secrets:
BROWSERSTACK_USERNAME:
description: BrowserStack account username
Expand Down Expand Up @@ -56,13 +56,31 @@ on:
PING_CALLBACK_TREES_ENABLED:
description: Flag enabling callback tree coverage in BrowserStack E2E tests
required: false
PINGONE_DISCOVERY_ENDPOINT:
description: PingOne DaVinci OIDC discovery endpoint
required: false
PINGONE_CLIENT_ID:
description: PingOne DaVinci OIDC client identifier
required: false
PINGONE_REDIRECT_URI:
description: PingOne DaVinci OIDC redirect URI
required: false
PINGONE_ACR_VALUES:
description: ACR values to route to the correct DaVinci flow
required: false
PINGONE_USERNAME:
description: PingOne DaVinci test account username
required: false
PINGONE_PASSWORD:
description: PingOne DaVinci test account password
required: false

permissions:
contents: read

jobs:
e2e-android-journey:
name: E2E — Android BrowserStack (journey)
e2e-android-journey-davinci:
name: E2E — Android BrowserStack (journey & davinci)
runs-on: ubuntu-latest
timeout-minutes: 45
defaults:
Expand All @@ -83,6 +101,12 @@ jobs:
PING_CLIENT_ID: ${{ secrets.PING_CLIENT_ID }}
PING_REDIRECT_URI: ${{ secrets.PING_REDIRECT_URI }}
PING_CALLBACK_TREES_ENABLED: ${{ secrets.PING_CALLBACK_TREES_ENABLED }}
PINGONE_DISCOVERY_ENDPOINT: ${{ secrets.PINGONE_DISCOVERY_ENDPOINT }}
PINGONE_CLIENT_ID: ${{ secrets.PINGONE_CLIENT_ID }}
PINGONE_REDIRECT_URI: ${{ secrets.PINGONE_REDIRECT_URI }}
PINGONE_ACR_VALUES: ${{ secrets.PINGONE_ACR_VALUES }}
PINGONE_USERNAME: ${{ secrets.PINGONE_USERNAME }}
PINGONE_PASSWORD: ${{ secrets.PINGONE_PASSWORD }}

steps:
- name: Checkout
Expand Down Expand Up @@ -111,8 +135,8 @@ jobs:
- name: Compute BrowserStack identifiers
# Naming convention:
# Project : rn-<moduleName>-test → rn-sdk-test
# Build : <EVENT_PREFIX>-<RUN_ID>-<RUN_ATTEMPT>-<SHORT_SHA>-journey
# Session : <platform>-<framework>-journey
# Build : <EVENT_PREFIX>-<RUN_ID>-<RUN_ATTEMPT>-<SHORT_SHA>-journey-davinci
# Session : <platform>-<framework>-journey-davinci
run: |
set -euo pipefail
SHORT_SHA="${GITHUB_SHA:0:7}"
Expand All @@ -127,7 +151,7 @@ jobs:
BUILD_PREFIX="run"
;;
esac
echo "BROWSERSTACK_BUILD_ID=${BUILD_PREFIX}-${GITHUB_RUN_ID}-${GITHUB_RUN_ATTEMPT}-${SHORT_SHA}-journey" >> "$GITHUB_ENV"
echo "BROWSERSTACK_BUILD_ID=${BUILD_PREFIX}-${GITHUB_RUN_ID}-${GITHUB_RUN_ATTEMPT}-${SHORT_SHA}-journey-davinci" >> "$GITHUB_ENV"
echo "BROWSERSTACK_PROJECT_NAME=${{ inputs.browserstack_project_name }}" >> "$GITHUB_ENV"
echo "BROWSERSTACK_SESSION_NAME=${{ inputs.browserstack_session_name }}" >> "$GITHUB_ENV"

Expand Down Expand Up @@ -159,9 +183,9 @@ jobs:
fi
echo "test_url=$test_url" >> "$GITHUB_OUTPUT"

- name: Run E2E journey tests on BrowserStack real devices
- name: Run E2E journey & davinci tests on BrowserStack real devices
id: run-tests
run: yarn test:runner:bs:android:journey 2>&1 | tee /tmp/detox-bs.log; exit "${PIPESTATUS[0]}"
run: yarn test:runner:bs:android:journey-davinci 2>&1 | tee /tmp/detox-bs.log; exit "${PIPESTATUS[0]}"
working-directory: ${{ github.workspace }}
env:
BROWSERSTACK_APP_URL: ${{ steps.upload-app.outputs.app_url }}
Expand Down Expand Up @@ -212,7 +236,7 @@ jobs:
fi

{
echo "## BrowserStack Android Detox Summary — Journey"
echo "## BrowserStack Android Detox Summary — Journey & DaVinci"
echo
echo "- Build ID: \`${build_id}\`"
echo "- Overall status: ${overall_status}"
Expand Down
1 change: 1 addition & 0 deletions .github/workflows/browserstack-prep-android-artifacts.yml
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@ jobs:
cd android && ./gradlew \
:ping-identity_rn-binding:generateCodegenArtifactsFromSchema \
:ping-identity_rn-browser:generateCodegenArtifactsFromSchema \
:ping-identity_rn-davinci:generateCodegenArtifactsFromSchema \
:ping-identity_rn-device-client:generateCodegenArtifactsFromSchema \
:ping-identity_rn-device-id:generateCodegenArtifactsFromSchema \
:ping-identity_rn-device-profile:generateCodegenArtifactsFromSchema \
Expand Down
19 changes: 12 additions & 7 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -110,15 +110,14 @@ jobs:
contents: read
uses: ./.github/workflows/browserstack-prep-android-artifacts.yml

# Run Foundation Modules E2E tests on BrowserStack real devices.
# Run Journey and DaVinci E2E tests on BrowserStack real devices.
# Intentionally sequenced after core (not parallel): each Android workflow runs 3 matrix
# legs and iOS runs 3 devices concurrently. Running core + journey in parallel would peak
# at 6 Android + 3 iOS = 9 sessions, exceeding the limit of 6.
# Serialising core → journey keeps Android at 3 active sessions at any time, leaving 3
# slots for iOS running in parallel — exactly at the limit.
browserstack-android-journey:
# legs and iOS runs 3 devices concurrently. Running core + journey/davinci in parallel would
# peak at 6 Android + 3 iOS = 9 sessions, exceeding the limit of 6.
# Serialising core → journey/davinci keeps Android at 3 active sessions at any time, leaving
# 3 slots for iOS running in parallel — exactly at the limit.
browserstack-android-journey-davinci:
needs: browserstack-android-core
if: ${{ always() }}
permissions:
contents: read
uses: ./.github/workflows/browserstack-e2e-android-journey.yml
Expand All @@ -135,6 +134,12 @@ jobs:
PING_CLIENT_ID: ${{ secrets.PING_CLIENT_ID }}
PING_REDIRECT_URI: ${{ secrets.PING_REDIRECT_URI }}
PING_CALLBACK_TREES_ENABLED: ${{ secrets.PING_CALLBACK_TREES_ENABLED }}
PINGONE_DISCOVERY_ENDPOINT: ${{ secrets.PINGONE_DISCOVERY_ENDPOINT }}
PINGONE_CLIENT_ID: ${{ secrets.PINGONE_CLIENT_ID }}
PINGONE_REDIRECT_URI: ${{ secrets.PINGONE_REDIRECT_URI }}
PINGONE_ACR_VALUES: ${{ secrets.PINGONE_ACR_VALUES }}
PINGONE_USERNAME: ${{ secrets.PINGONE_USERNAME }}
PINGONE_PASSWORD: ${{ secrets.PINGONE_PASSWORD }}

# Run Foundation Modules E2E tests on BrowserStack real devices.
browserstack-android-core:
Expand Down
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -36,3 +36,4 @@ junit.xml

# Turborepo folder for persisting logs and outputs
.turbo
.sdk/
Binary file modified .yarn/install-state.gz
Binary file not shown.
Loading
Loading