Skip to content

[CI]Parallelize LLC tests #2590

[CI]Parallelize LLC tests

[CI]Parallelize LLC tests #2590

Workflow file for this run

name: Smoke Checks
on:
pull_request:
branches:
- '**'
paths-ignore:
- 'README.md'
- 'CHANGELOG.md'
workflow_dispatch:
inputs:
swiftui_snapshots:
description: 'Should SwiftUI Snapshots be recorded on CI?'
type: boolean
required: false
default: false
uikit_snapshots:
description: 'Should UIKit Snapshots be recorded on CI?'
type: boolean
required: false
default: false
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
env:
HOMEBREW_NO_INSTALL_CLEANUP: 1 # Disable cleanup for homebrew, we don't need it on CI
IOS_SIMULATOR_DEVICE: "iPhone 15 Pro (17.2)"
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
GITHUB_PR_NUM: ${{ github.event.pull_request.number }}
STREAM_VIDEO_SECRET: ${{ secrets.STREAM_VIDEO_SECRET }}
XCODE_VERSION: "15.2"
jobs:
test-sdks:
name: Test SDKs
runs-on: macos-14
if: ${{ github.event.inputs.swiftui_snapshots != 'true' && github.event.inputs.uikit_snapshots != 'true' }}
steps:
- name: Checkout repository
uses: actions/[email protected]
- name: Bootstrap
uses: ./.github/actions/bootstrap
env:
INSTALL_YEETD: true
SKIP_MINT_BOOTSTRAP: true
- name: Run SDK Tests
run: bundle exec fastlane test_unified device:"${{ env.IOS_SIMULATOR_DEVICE }}"
- name: Run Sonar analysis
run: bundle exec fastlane sonar_upload
env:
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
- name: Handle failures
uses: ./.github/actions/failure-handling
with:
xcresult-basenames: '["StreamVideo", "StreamVideoSwiftUI", "StreamVideoUIKit"]'
slack-webhook-url: ${{ secrets.SLACK_WEBHOOK_URL }}
build-test-app-and-frameworks:
name: Build Test App and Frameworks
runs-on: macos-14
needs: test-sdks
if: ${{ github.event_name != 'push' && github.event.inputs.swiftui_snapshots != 'true' && github.event.inputs.uikit_snapshots != 'true' }}
steps:
- name: Checkout repository
uses: actions/[email protected]
- name: Bootstrap
uses: ./.github/actions/bootstrap
env:
INSTALL_YEETD: true
SKIP_MINT_BOOTSTRAP: true
SKIP_BREW_BOOTSTRAP: true
- name: Build
run: bundle exec fastlane build_test_app_and_frameworks
build-apps:
name: Build Demo Apps
runs-on: macos-14
needs: build-test-app-and-frameworks
if: ${{ github.event_name != 'push' && github.event.inputs.swiftui_snapshots != 'true' && github.event.inputs.uikit_snapshots != 'true' }}
steps:
- name: Checkout
uses: actions/[email protected]
- name: Bootstrap
uses: ./.github/actions/bootstrap
env:
INSTALL_YEETD: true
SKIP_MINT_BOOTSTRAP: true
SKIP_BREW_BOOTSTRAP: true
- name: Build UIKit Demo App
run: bundle exec fastlane build_uikit_demo
- name: Build Docs Test Project
run: bundle exec fastlane build_docs_test
allure-testops-launch:
name: Launch Allure TestOps
runs-on: macos-13
needs: build-test-app-and-frameworks
if: ${{ github.event_name != 'push' && github.event.inputs.swiftui_snapshots != 'true' && github.event.inputs.uikit_snapshots != 'true' }}
outputs:
launch_id: ${{ steps.get_launch_id.outputs.launch_id }}
steps:
- name: Checkout
uses: actions/[email protected]
- name: Bootstrap
uses: ./.github/actions/ruby-cache
- name: Launch Allure TestOps
run: bundle exec fastlane allure_launch
env:
ALLURE_TOKEN: ${{ secrets.ALLURE_TOKEN }}
GITHUB_EVENT: ${{ toJson(github.event) }}
- id: get_launch_id
run: echo "launch_id=${{env.LAUNCH_ID}}" >> $GITHUB_OUTPUT
if: env.LAUNCH_ID != ''
test-e2e-debug:
name: Test E2E UI (Debug)
needs: allure-testops-launch
runs-on: macos-14
if: ${{ github.event_name != 'push' && github.event.inputs.swiftui_snapshots != 'true' && github.event.inputs.uikit_snapshots != 'true' }}
env:
LAUNCH_ID: ${{ needs.allure_testops_launch.outputs.launch_id }}
ALLURE_TOKEN: ${{ secrets.ALLURE_TOKEN }}
steps:
- name: Checkout
uses: actions/[email protected]
- name: Bootstrap
uses: ./.github/actions/bootstrap
env:
INSTALL_ALLURE: true
INSTALL_VIDEO_BUDDY: true
INSTALL_YEETD: true
SKIP_MINT_BOOTSTRAP: true
SKIP_BREW_BOOTSTRAP: true
- name: Run UI Tests (Debug)
run: bundle exec fastlane test_e2e device:"${{ env.IOS_SIMULATOR_DEVICE }}" batch:'${{ matrix.batch }}' test_without_building:false
env:
XCODE_VERSION: "15.2" # the most stable pair of Xcode
IOS_SIMULATOR_DEVICE: "iPhone 15 Pro (17.2)" # and iOS
MATRIX_SIZE: ${{ strategy.job-total }}
STREAM_SDK_TEST_APP: ${{ secrets.STREAM_SDK_TEST_APP }}
STREAM_SDK_TEST_ACCOUNT_EMAIL: ${{ secrets.STREAM_SDK_TEST_ACCOUNT_EMAIL }}
STREAM_SDK_TEST_ACCOUNT_PASSWORD: ${{ secrets.STREAM_SDK_TEST_ACCOUNT_PASSWORD }}
STREAM_SDK_TEST_ACCOUNT_OTP_SECRET: ${{ secrets.STREAM_SDK_TEST_ACCOUNT_OTP_SECRET }}
STREAM_VIDEO_SECRET: ${{ secrets.STREAM_VIDEO_SECRET }}
- name: Allure TestOps Upload
if: env.LAUNCH_ID != '' && (success() || failure())
run: bundle exec fastlane allure_upload launch_id:$LAUNCH_ID
- name: Allure TestOps Launch Removal
if: env.LAUNCH_ID != '' && cancelled()
run: bundle exec fastlane allure_launch_removal launch_id:$LAUNCH_ID
- name: Parse xcresult
if: failure()
run: |
brew install chargepoint/xcparse/xcparse
xcparse logs fastlane/test_output/DemoApp.xcresult fastlane/test_output/logs/
- uses: actions/upload-artifact@v4
if: failure()
with:
name: E2E Test Data ${{ matrix.batch }}
path: |
~/Library/Logs/scan
fastlane/recordings
fastlane/*.log
fastlane/test_output/report.junit
fastlane/test_output/logs/*/Diagnostics/**/*.txt
fastlane/test_output/logs/*/Diagnostics/simctl_diagnostics/DiagnosticReports/*
automated-code-review:
name: Automated Code Review
runs-on: macos-13
needs: allure-testops-launch
env:
XCODE_VERSION: "15.0.1"
if: ${{ github.event_name != 'push' && github.event.inputs.swiftui_snapshots != 'true' && github.event.inputs.uikit_snapshots != 'true' }}
steps:
- name: Checkout
uses: actions/[email protected]
- name: Bootstrap
uses: ./.github/actions/bootstrap
- name: Run Danger
run: bundle exec danger
- name: Run Fastlane Linting
run: bundle exec fastlane rubocop
- name: Run SwiftFormat Linting
run: bundle exec fastlane run_swift_format lint:true
- name: Run Podspec Linting
if: startsWith(github.event.pull_request.head.ref, 'release/')
run: bundle exec fastlane pod_lint