[CI]Parallelize LLC tests #2608
This file contains 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
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 | |
XCODE_VERSION: "15.2" | |
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 }} | |
MATCH_PASSWORD: ${{ secrets.MATCH_PASSWORD }} | |
APPSTORE_API_KEY: ${{ secrets.APPSTORE_API_KEY }} | |
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 | |
with: | |
parent: test-sdks | |
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 | |
with: | |
parent: build-test-app-and-frameworks | |
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 | |
with: | |
parent: build-test-app-and-frameworks | |
- 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 | |
with: | |
parent: build-test-app-and-frameworks | |
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 }}" test_without_building:false | |
timeout-minutes: 60 | |
env: | |
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 }} | |
- 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] | |
with: | |
fetch-depth: 100 | |
- name: Bootstrap | |
uses: ./.github/actions/bootstrap | |
with: | |
parent: allure-testops-launch | |
- 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 | |
# Xcode 15 | |
test-sdks-xcode-15: | |
name: Test SDKs in Xcode 15 | |
needs: test-sdks | |
runs-on: macos-13 | |
env: | |
XCODE_VERSION: "15.0.1" | |
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: Build SDK Tests | |
run: bundle exec fastlane test_unified device:"${{ env.IOS_SIMULATOR_DEVICE }}" skip_testing:true build_for_testing:true | |
build-xcode15-xcframework-stream-video: | |
name: Build StreamVideo XCframeworks (Xcode 15.0) | |
needs: test-sdks-xcode-15 | |
runs-on: macos-13 | |
env: | |
XCODE_VERSION: "15.0.1" | |
if: ${{ github.event_name != 'push' && github.event.inputs.snapshots != 'true' }} | |
steps: | |
- name: Connect Bot | |
uses: webfactory/[email protected] | |
with: | |
ssh-private-key: ${{ secrets.BOT_SSH_PRIVATE_KEY }} | |
- name: Checkout repository | |
uses: actions/[email protected] | |
- name: Bootstrap | |
uses: ./.github/actions/bootstrap | |
with: | |
parent: test-sdks-xcode-15 | |
env: | |
INSTALL_YEETD: true | |
SKIP_MINT_BOOTSTRAP: true | |
SKIP_BREW_BOOTSTRAP: true | |
- name: Build StreamVideo XCFramework | |
run: bundle exec fastlane build_xcframeworks_concurrent scheme:"StreamVideo" | |
build-xcode15-xcframework-stream-video-swiftui: | |
name: Build StreamVideoSwiftUI XCframeworks (Xcode 15.0) | |
needs: test-sdks-xcode-15 | |
runs-on: macos-13 | |
env: | |
XCODE_VERSION: "15.0.1" | |
if: ${{ github.event_name != 'push' && github.event.inputs.snapshots != 'true' }} | |
steps: | |
- name: Connect Bot | |
uses: webfactory/[email protected] | |
with: | |
ssh-private-key: ${{ secrets.BOT_SSH_PRIVATE_KEY }} | |
- name: Checkout repository | |
uses: actions/[email protected] | |
- name: Bootstrap | |
uses: ./.github/actions/bootstrap | |
with: | |
parent: test-sdks-xcode-15 | |
env: | |
INSTALL_YEETD: true | |
SKIP_MINT_BOOTSTRAP: true | |
SKIP_BREW_BOOTSTRAP: true | |
- name: Build StreamVideoSwiftUI XCFramework | |
run: bundle exec fastlane build_xcframeworks_concurrent scheme:"StreamVideoSwiftUI" | |
build-xcode15-xcframework-stream-video-uikit: | |
name: Build StreamVideoUIKit XCframeworks (Xcode 15.0) | |
needs: test-sdks-xcode-15 | |
runs-on: macos-13 | |
env: | |
XCODE_VERSION: "15.0.1" | |
if: ${{ github.event_name != 'push' && github.event.inputs.snapshots != 'true' }} | |
steps: | |
- name: Connect Bot | |
uses: webfactory/[email protected] | |
with: | |
ssh-private-key: ${{ secrets.BOT_SSH_PRIVATE_KEY }} | |
- name: Checkout repository | |
uses: actions/[email protected] | |
- name: Bootstrap | |
uses: ./.github/actions/bootstrap | |
with: | |
parent: test-sdks-xcode-15 | |
env: | |
INSTALL_YEETD: true | |
SKIP_MINT_BOOTSTRAP: true | |
SKIP_BREW_BOOTSTRAP: true | |
- name: Build StreamVideoUIKit XCFramework | |
run: bundle exec fastlane build_xcframeworks_concurrent scheme:"StreamVideoUIKit" | |