mattermost-mobile-upstream/.github/workflows/e2e-detox.yml
yasser khan bcac248ec0
feat(e2e): Integrate TSIO reporting (#9925)
Retire legacy maestro per-platform contexts from cancel-e2e-runs and
document the canonical PR, master, and CMT status context mapping.
Wire Detox + Maestro (PR/main/CMT) into Test System IO with a single
commit status (e2e/mobile; CMT uses e2e/compatibility-matrix-testing)
and groups mobile-pr / mobile-main / cmt-mobile.

Upload shard results with correct framework labels, merge Jest shards
into TSIO Detox shape, stub missing/dead shards as failures, and post
channel summaries after status settles. Matterwick MASTER is treated as
MAIN for mobile-main routing.

Also harden report/fail paths, stage Maestro screenshots per flow for
TSIO galleries, fix a few Detox setup/testID issues, and skip known
platform flakes so the pipeline stays actionable while TSIO lands.
2026-07-23 06:43:28 +00:00

122 lines
5.2 KiB
YAML

# Detox E2E test runs — reusable workflow only.
# Called from e2e-detox-pr.yml after shared builds and server provisioning complete.
# App artifacts (ios-build-simulator-*, android-build-files-*) are uploaded by
# the parent workflow; templates download them via artifact_run_id.
name: Detox E2E
on:
workflow_call:
inputs:
MOBILE_VERSION:
required: true
type: string
PLATFORM:
required: false
type: string
default: "both"
SITE_1_URL:
required: true
type: string
SITE_2_URL:
required: false
type: string
SITE_3_URL:
required: false
type: string
run_type:
required: false
type: string
default: "PR"
artifact_run_id:
description: "Run ID of the parent workflow that uploaded build artifacts"
required: true
type: string
tsio-config:
description: "TSIO composite identity + total_reports_expected (from parent calculate-tsio-identity)"
required: true
type: string
permissions:
contents: read
id-token: write
actions: read
env:
ARTIFACT_RUN_ID: ${{ inputs.artifact_run_id }}
jobs:
run-ios-tests:
if: inputs.PLATFORM == 'ios' || inputs.PLATFORM == 'both'
name: iOS
uses: ./.github/workflows/e2e-ios-template.yml
with:
run-type: ${{ inputs.run_type || 'PR' }}
tsio-config: ${{ inputs.tsio-config }}
tsio-shard-name: detox-ios
record_tests_in_zephyr: ${{ inputs.run_type == 'RELEASE' || inputs.run_type == 'MAIN' || inputs.run_type == 'MASTER' }}
MOBILE_VERSION: ${{ inputs.MOBILE_VERSION }}
MM_TEST_SERVER_URL: ${{ inputs.SITE_1_URL }}
MM_TEST_SERVER_URL_2: ${{ inputs.SITE_2_URL }}
MM_TEST_SERVER_URL_3: ${{ inputs.SITE_3_URL }}
artifact_run_id: ${{ inputs.artifact_run_id }}
secrets:
MM_MOBILE_E2E_ADMIN_EMAIL: ${{ secrets.MM_MOBILE_E2E_ADMIN_EMAIL }}
MM_MOBILE_E2E_ADMIN_USERNAME: ${{ secrets.MM_MOBILE_E2E_ADMIN_USERNAME }}
MM_MOBILE_E2E_ADMIN_PASSWORD: ${{ secrets.MM_MOBILE_E2E_ADMIN_PASSWORD }}
MM_MOBILE_E2E_ZEPHYR_API_KEY: ${{ secrets.MM_MOBILE_E2E_ZEPHYR_API_KEY }}
MM_MOBILE_E2E_TEST_CYCLE_LINK_PREFIX: ${{ secrets.MM_MOBILE_E2E_TEST_CYCLE_LINK_PREFIX }}
MM_MOBILE_E2E_WEBHOOK_URL: ${{ secrets.MM_MOBILE_E2E_WEBHOOK_URL }}
MM_MOBILE_DETOX_AWS_ACCESS_KEY_ID: ${{ secrets.MM_MOBILE_DETOX_AWS_ACCESS_KEY_ID }}
MM_MOBILE_DETOX_AWS_SECRET_ACCESS_KEY: ${{ secrets.MM_MOBILE_DETOX_AWS_SECRET_ACCESS_KEY }}
run-android-tests:
if: inputs.PLATFORM == 'android' || inputs.PLATFORM == 'both'
name: Android
uses: ./.github/workflows/e2e-android-template.yml
with:
run-android-tests: true
run-type: ${{ inputs.run_type || 'PR' }}
tsio-config: ${{ inputs.tsio-config }}
tsio-shard-name: detox-android
record_tests_in_zephyr: ${{ inputs.run_type == 'RELEASE' || inputs.run_type == 'MAIN' || inputs.run_type == 'MASTER' }}
MOBILE_VERSION: ${{ inputs.MOBILE_VERSION }}
MM_TEST_SERVER_URL: ${{ inputs.SITE_1_URL }}
MM_TEST_SERVER_URL_2: ${{ inputs.SITE_2_URL }}
MM_TEST_SERVER_URL_3: ${{ inputs.SITE_3_URL }}
artifact_run_id: ${{ inputs.artifact_run_id }}
secrets:
MM_MOBILE_E2E_ADMIN_EMAIL: ${{ secrets.MM_MOBILE_E2E_ADMIN_EMAIL }}
MM_MOBILE_E2E_ADMIN_USERNAME: ${{ secrets.MM_MOBILE_E2E_ADMIN_USERNAME }}
MM_MOBILE_E2E_ADMIN_PASSWORD: ${{ secrets.MM_MOBILE_E2E_ADMIN_PASSWORD }}
MM_MOBILE_E2E_ZEPHYR_API_KEY: ${{ secrets.MM_MOBILE_E2E_ZEPHYR_API_KEY }}
MM_MOBILE_E2E_TEST_CYCLE_LINK_PREFIX: ${{ secrets.MM_MOBILE_E2E_TEST_CYCLE_LINK_PREFIX }}
MM_MOBILE_E2E_WEBHOOK_URL: ${{ secrets.MM_MOBILE_E2E_WEBHOOK_URL }}
MM_MOBILE_DETOX_AWS_ACCESS_KEY_ID: ${{ secrets.MM_MOBILE_DETOX_AWS_ACCESS_KEY_ID }}
MM_MOBILE_DETOX_AWS_SECRET_ACCESS_KEY: ${{ secrets.MM_MOBILE_DETOX_AWS_SECRET_ACCESS_KEY }}
run-ios-ipad-tests:
if: inputs.PLATFORM == 'ios' || inputs.PLATFORM == 'both'
name: iOS iPad
uses: ./.github/workflows/e2e-ios-template.yml
with:
run-type: ${{ inputs.run_type || 'PR' }}
tsio-config: ${{ inputs.tsio-config }}
tsio-shard-name: detox-ipad
MOBILE_VERSION: ${{ inputs.MOBILE_VERSION }}
MM_TEST_SERVER_URL: ${{ inputs.SITE_1_URL }}
ios_device_name: "iPad Pro 13-inch (M5)"
ios_device_os_name: "iOS 26.2"
search_path: "detox/e2e/test/products/channels/ipad"
parallelism: "1"
detox_config: "ios.ipad.debug"
artifact_run_id: ${{ inputs.artifact_run_id }}
secrets:
MM_MOBILE_E2E_ADMIN_EMAIL: ${{ secrets.MM_MOBILE_E2E_ADMIN_EMAIL }}
MM_MOBILE_E2E_ADMIN_USERNAME: ${{ secrets.MM_MOBILE_E2E_ADMIN_USERNAME }}
MM_MOBILE_E2E_ADMIN_PASSWORD: ${{ secrets.MM_MOBILE_E2E_ADMIN_PASSWORD }}
MM_MOBILE_E2E_ZEPHYR_API_KEY: ${{ secrets.MM_MOBILE_E2E_ZEPHYR_API_KEY }}
MM_MOBILE_E2E_TEST_CYCLE_LINK_PREFIX: ${{ secrets.MM_MOBILE_E2E_TEST_CYCLE_LINK_PREFIX }}
MM_MOBILE_E2E_WEBHOOK_URL: ${{ secrets.MM_MOBILE_E2E_WEBHOOK_URL }}
MM_MOBILE_DETOX_AWS_ACCESS_KEY_ID: ${{ secrets.MM_MOBILE_DETOX_AWS_ACCESS_KEY_ID }}
MM_MOBILE_DETOX_AWS_SECRET_ACCESS_KEY: ${{ secrets.MM_MOBILE_DETOX_AWS_SECRET_ACCESS_KEY }}