Skip to content

feat: Codec Negotiation #5167

feat: Codec Negotiation

feat: Codec Negotiation #5167

name: React Native Dogfood Release
env:
SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }}
GOOGLE_APPLICATION_CREDENTIALS: '/home/runner/rn-samples-google-services.json'
MATCH_PASSWORD: ${{ secrets.MATCH_PASSWORD }}
MATCH_GIT_BASIC_AUTHORIZATION: ${{ secrets.MATCH_GIT_BASIC_AUTHORIZATION }}
APP_STORE_CONNECT_API_KEY_KEY_ID: ${{ secrets.APP_STORE_CONNECT_API_KEY_KEY_ID }}
APP_STORE_CONNECT_API_KEY_ISSUER_ID: ${{ secrets.APP_STORE_CONNECT_API_KEY_ISSUER_ID }}
APP_STORE_CONNECT_API_KEY_KEY: ${{ secrets.APP_STORE_CONNECT_API_KEY_KEY }}
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 }}
RN_DOGFOOD_ANDROID_KEYSTORE: '/home/runner/stream-video-calls-rn.keystore'
RN_DOGFOOD_ANDROID_KEYSTORE_PASSWORD: ${{ secrets.RN_DOGFOOD_ANDROID_KEYSTORE_PASSWORD }}
RN_DOGFOOD_ANDROID_KEYSTORE_ALIAS: ${{ secrets.RN_DOGFOOD_ANDROID_KEYSTORE_ALIAS }}
RN_DOGFOOD_ANDROID_DEPLOY_SERVICE_ACCOUNT: '/home/runner/service-account.json'
FASTLANE_SKIP_UPDATE_CHECK: 1
REACT_NATIVE_DOGFOOD_APP_ENVIRONMENT: 'demo'
on:
push:
tags:
- '@stream-io/video-react-native-dogfood-*'
pull_request:
types:
- opened
- synchronize
- reopened
paths:
- '.github/workflows/react-native-workflow.yml'
- 'sample-apps/react-native/dogfood/**'
- 'packages/client/**'
- 'packages/react-bindings/**'
- 'packages/react-native-sdk/**'
- 'packages/video-filters-react-native/**'
- '!**.md'
workflow_dispatch:
concurrency:
group: react-native-workflow-${{ github.ref }}
cancel-in-progress: true
jobs:
code_review:
name: Code Lint, Unit Test and dogfood versioning
timeout-minutes: 20
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: ./.github/actions/rn-bootstrap
timeout-minutes: 15
env:
INSTALL_NODE: true
INSTALL_RN_DEPENDENCIES: true
- name: Lint source code
working-directory: sample-apps/react-native/dogfood
run: yarn lint:ci
- name: Lint fastlane
working-directory: sample-apps/react-native/dogfood
run: bundle exec fastlane rubocop
- name: Test RN SDK (Unit tests only)
run: yarn test:react-native:sdk
build_ios:
name: Build iOS
timeout-minutes: 60
needs: code_review
runs-on: macos-14
steps:
- uses: actions/checkout@v4
- uses: ./.github/actions/rn-bootstrap
timeout-minutes: 20
env:
INSTALL_NODE: true
INSTALL_PODS: true
INSTALL_RN_DEPENDENCIES: true
- name: Build
working-directory: sample-apps/react-native/dogfood
run: bundle exec fastlane build_ios
- name: Upload .ipa
uses: actions/upload-artifact@v3
with:
name: ipa
path: |
**/dogfood/dist/*.ipa
**/dogfood/dist/*.zip
test_ios:
name: Test iOS
needs: build_ios
if: ${{ github.ref == 'refs/heads/main' }}
timeout-minutes: 100
runs-on: macos-latest
steps:
- uses: actions/checkout@v4
- uses: ./.github/actions/rn-bootstrap
timeout-minutes: 20
env:
INSTALL_NODE: true
INSTALL_PODS: true
INSTALL_PYTHON: true
INSTALL_MAESTRO: true
INSTALL_VIDEO_BUDDY: true
INSTALL_RN_DEPENDENCIES: true
- name: Test
working-directory: sample-apps/react-native/dogfood
run: bundle exec fastlane test_ios
- uses: actions/upload-artifact@v3
if: failure()
with:
name: iOS Test Data
path: |
**/fastlane/recordings
**/fastlane/video-buddy-log.txt
~/.maestro/tests
deploy_ios:
name: Deploy iOS
needs: build_ios
timeout-minutes: 60
if: ${{ github.ref == 'refs/heads/main' || github.ref == 'refs/heads/use-vp8-on-ios' }}
runs-on: macos-latest
steps:
- uses: actions/checkout@v4
- uses: ./.github/actions/rn-bootstrap
timeout-minutes: 15
- name: Download .ipa
uses: actions/download-artifact@v3
with:
name: ipa
- name: Deploy
working-directory: sample-apps/react-native/dogfood
run: bundle exec fastlane deploy_ios
build_android:
name: Build Android
timeout-minutes: 60
needs: code_review
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: ./.github/actions/rn-bootstrap
timeout-minutes: 15
env:
INSTALL_NODE: true
INSTALL_JAVA: true
INSTALL_RN_DEPENDENCIES: true
- name: Create Google Services JSON File
env:
DATA: ${{ secrets.GOOGLE_SERVICES_JSON_RN_SAMPLES_DEPLOYMENT }}
run: echo $DATA > ~/rn-samples-google-services.json
shell: bash
- name: Create Google Service Account for Play Store Deployment
env:
DATA: ${{ secrets.RN_DOGFOOD_ANDROID_DEPLOY_SERVICE_ACCOUNT_BASE64 }}
run: echo $DATA | base64 --decode | jq > ~/service-account.json
shell: bash
- name: Create Keystore Signing for Play Store Deployment
env:
DATA: ${{ secrets.RN_DOGFOOD_ANDROID_KEYSTORE_BASE64 }}
run: echo $DATA | base64 -d > ~/stream-video-calls-rn.keystore
shell: bash
- name: Build
working-directory: sample-apps/react-native/dogfood
run: bundle exec fastlane build_android_play_store
- name: Upload .apk
uses: actions/upload-artifact@v3
with:
name: apk
path: '**/dist/*.apk'
- name: Upload .aab
uses: actions/upload-artifact@v3
with:
name: aab
path: '**/dist/*.aab'
test_android:
name: Test Android
needs: build_android
timeout-minutes: 100
if: ${{ github.ref == 'refs/heads/main' }}
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: ./.github/actions/rn-bootstrap
timeout-minutes: 15
env:
INSTALL_NODE: true
INSTALL_FFMPEG: true
INSTALL_MAESTRO: true
INSTALL_VIDEO_BUDDY: true
INSTALL_ANDROID_EMULATOR: true
- name: Download .apk
uses: actions/download-artifact@v3
with:
name: apk
- name: Create AVD Snapshot
if: steps.avd-cache.outputs.cache-hit != 'true'
uses: reactivecircus/android-emulator-runner@v2
with:
api-level: 28
arch: x86_64
target: google_apis
profile: pixel_5
disable-animations: false
force-avd-creation: false
avd-name: test
ram-size: 8192M
disk-size: 2048M
emulator-boot-timeout: 1000
emulator-options: -no-window -no-boot-anim -no-audio -no-snapshot-load -gpu swiftshader_indirect
working-directory: sample-apps/react-native/dogfood
script: echo 'AVD snapshot is generated and will be cached for the future runs.'
- name: Test
uses: reactivecircus/android-emulator-runner@v2
with:
api-level: 28
arch: x86_64
target: google_apis
profile: pixel_5
disable-animations: true
force-avd-creation: false
avd-name: test
ram-size: 8192M
disk-size: 2048M
emulator-boot-timeout: 1000
emulator-options: -no-window -no-boot-anim -no-audio -no-snapshot-load -gpu swiftshader_indirect
working-directory: sample-apps/react-native/dogfood
script: bundle exec fastlane test_android
- uses: actions/upload-artifact@v3
if: failure()
with:
name: Android Test Data
path: |
**/fastlane/recordings
**/fastlane/video-buddy-log.txt
~/.maestro/tests
deploy_android:
name: Deploy Android
needs: build_android
timeout-minutes: 60
if: ${{ github.ref == 'refs/heads/main' }}
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: ./.github/actions/rn-bootstrap
timeout-minutes: 15
- name: Download .aab
uses: actions/download-artifact@v3
with:
name: aab
- name: Create Google Service Account for Play Store Deployment
env:
DATA: ${{ secrets.RN_DOGFOOD_ANDROID_DEPLOY_SERVICE_ACCOUNT_BASE64 }}
run: echo $DATA | base64 --decode | jq > ~/service-account.json
shell: bash
- name: Deploy
working-directory: sample-apps/react-native/dogfood
run: bundle exec fastlane deploy_android_play_store