Skip to content

Cron Checks

Cron Checks #1500

Workflow file for this run

name: Cron Checks
on:
schedule:
# Runs "At 03:00 every night except weekends"
- cron: '0 3 * * 1-5'
workflow_dispatch:
inputs:
mock_server_branch:
description: 'Mock server branch'
type: string
required: true
default: main
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
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
jobs:
test-e2e-debug:
name: Test E2E UI (Debug)
strategy:
matrix:
include:
- ios: "26.2"
device: "iPhone 17 Pro"
setup_runtime: false
- ios: "18.5"
device: "iPhone 16 Pro"
setup_runtime: false
- ios: "17.5"
device: "iPhone 15 Pro"
setup_runtime: true
- ios: "15.4"
device: "iPhone 13 Pro"
setup_runtime: true
fail-fast: false
runs-on: macos-15
env:
GITHUB_EVENT: ${{ toJson(github.event) }}
ALLURE_TOKEN: ${{ secrets.ALLURE_TOKEN }}
STREAM_DEMO_APP_SECRET: ${{ secrets.STREAM_DEMO_APP_SECRET }}
XCODE_VERSION: "26.2"
IOS_SIMULATOR_DEVICE: "${{ matrix.device }} (${{ matrix.ios }})"
steps:
- uses: actions/checkout@v4.1.1
- uses: ./.github/actions/bootstrap
env:
INSTALL_ALLURE: true
INSTALL_YEETD: true
INSTALL_IPSW: true
SKIP_SWIFT_BOOTSTRAP: true
- uses: ./.github/actions/setup-ios-runtime
if: ${{ matrix.setup_runtime }}
timeout-minutes: 60
with:
version: ${{ matrix.ios }}
device: ${{ matrix.device }}
- name: Launch Allure TestOps
run: bundle exec fastlane allure_launch cron:true
- name: Run UI Tests (Debug)
run: bundle exec fastlane test_e2e_mock device:"${{ env.IOS_SIMULATOR_DEVICE }}" mock_server_branch:${{ inputs.mock_server_branch }}
timeout-minutes: 120
- name: Allure TestOps Upload
if: success() || failure()
run: bundle exec fastlane allure_upload launch_id:$LAUNCH_ID
- name: Allure TestOps Launch Removal
if: 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/StreamChatUITestsApp.xcresult fastlane/test_output/logs/
- uses: actions/upload-artifact@v4
if: failure()
with:
name: Test Data E2E (iOS ${{ matrix.ios }})
path: |
fastlane/recordings
fastlane/stream-chat-test-mock-server/logs/*
fastlane/test_output/logs/*/Diagnostics/**/*.txt
fastlane/test_output/logs/*/Diagnostics/simctl_diagnostics/DiagnosticReports/*
build-and-test-llc-debug:
name: Test LLC (Debug)
if: ${{ github.event_name != 'workflow_dispatch' || github.event.inputs.mock_server_branch == 'main' }}
strategy:
matrix:
include:
- ios: "26.2"
device: "iPhone 17 Pro"
setup_runtime: false
- ios: "18.5"
device: "iPhone 16 Pro"
setup_runtime: false
- ios: "17.5"
device: "iPhone 15 Pro"
setup_runtime: true
- ios: "16.4"
device: "iPhone 14 Pro"
setup_runtime: true
- ios: "15.4"
device: "iPhone 13 Pro"
setup_runtime: true
fail-fast: false
runs-on: macos-15
env:
XCODE_VERSION: "26.2"
IOS_SIMULATOR_DEVICE: "${{ matrix.device }} (${{ matrix.ios }})"
steps:
- uses: actions/checkout@v4.1.1
- uses: ./.github/actions/bootstrap
env:
INSTALL_YEETD: true
INSTALL_IPSW: true
- uses: ./.github/actions/setup-ios-runtime
if: ${{ matrix.setup_runtime }}
timeout-minutes: 60
with:
version: ${{ matrix.ios }}
device: ${{ matrix.device }}
- name: Run LLC Tests (Debug)
run: bundle exec fastlane test device:"${{ env.IOS_SIMULATOR_DEVICE }}" cron:true
timeout-minutes: 100
- name: Parse xcresult
if: failure()
run: |
brew install chargepoint/xcparse/xcparse
xcparse logs fastlane/test_output/StreamChat.xcresult fastlane/test_output/logs/
- uses: actions/upload-artifact@v4
if: failure()
with:
name: Test Data LLC (iOS ${{ matrix.ios }})
path: |
fastlane/test_output/logs/*/Diagnostics/**/*.txt
fastlane/test_output/logs/*/Diagnostics/simctl_diagnostics/DiagnosticReports/*
build-and-test-common-ui-debug:
name: Test CommonUI (Debug)
strategy:
matrix:
include:
- ios: "26.1"
device: "iPhone 17 Pro"
setup_runtime: false
- ios: "18.5"
device: "iPhone 16 Pro"
setup_runtime: false
- ios: "17.5"
device: "iPhone 15 Pro"
setup_runtime: true
- ios: "16.4"
device: "iPhone 14 Pro"
setup_runtime: true
- ios: "15.5"
device: "iPhone 13 Pro"
setup_runtime: true
fail-fast: false
runs-on: macos-15
env:
XCODE_VERSION: "26.1.1"
IOS_SIMULATOR_DEVICE: "${{ matrix.device }} (${{ matrix.ios }})"
steps:
- uses: actions/checkout@v4.1.1
- uses: ./.github/actions/bootstrap
env:
INSTALL_YEETD: true
INSTALL_IPSW: true
- uses: ./.github/actions/setup-ios-runtime
if: ${{ matrix.setup_runtime }}
timeout-minutes: 60
with:
version: ${{ matrix.ios }}
device: ${{ matrix.device }}
- name: Run Common UI Tests (Debug)
run: bundle exec fastlane test_common_ui device:"${{ env.IOS_SIMULATOR_DEVICE }}" cron:true
timeout-minutes: 100
- name: Parse xcresult
if: failure()
run: |
brew install chargepoint/xcparse/xcparse
xcparse logs fastlane/test_output/StreamChatCommonUI.xcresult fastlane/test_output/logs/
- uses: actions/upload-artifact@v4
if: failure()
with:
name: Test Data Common UI (iOS ${{ matrix.ios }})
path: |
fastlane/test_output/logs/*/Diagnostics/**/*.txt
fastlane/test_output/logs/*/Diagnostics/simctl_diagnostics/DiagnosticReports/*
build-old-xcode:
name: Build SDKs (Old Xcode)
if: ${{ github.event_name != 'workflow_dispatch' || github.event.inputs.mock_server_branch == 'main' }}
runs-on: macos-14
env:
XCODE_VERSION: "16.1"
steps:
- name: Connect Bot
uses: webfactory/ssh-agent@v0.7.0
with:
ssh-private-key: ${{ secrets.BOT_SSH_PRIVATE_KEY }}
- uses: actions/checkout@v4.1.1
- uses: ./.github/actions/xcode-cache
- uses: ./.github/actions/ruby-cache
- name: List Xcode versions
run: mdfind "kMDItemCFBundleIdentifier = 'com.apple.dt.Xcode'"
- name: Build LLC
run: bundle exec fastlane test device:"iPhone 16" build_for_testing:true
timeout-minutes: 25
- name: Build UI
run: bundle exec fastlane test_ui device:"iPhone 16" build_for_testing:true
- name: Build Common UI
run: bundle exec fastlane test_common_ui device:"iPhone 16" build_for_testing:true
timeout-minutes: 25
automated-code-review:
name: Automated Code Review
runs-on: macos-14
env:
XCODE_VERSION: "16.1"
steps:
- uses: actions/checkout@v4.1.1
- uses: ./.github/actions/bootstrap
- run: bundle exec fastlane rubocop
- run: bundle exec fastlane run_swift_format strict:true
slack:
name: Slack Report
runs-on: ubuntu-latest
needs: [build-and-test-llc-debug, build-and-test-common-ui-debug, test-e2e-debug, build-old-xcode, automated-code-review]
if: failure() && github.event_name == 'schedule'
steps:
- uses: 8398a7/action-slack@v3
with:
status: cancelled
text: "You shall not pass!"
job_name: "${{ github.workflow }}: ${{ github.job }}"
fields: repo,commit,author,workflow
env:
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_NIGHTLY_CHECKS }}