Merge pull request #3794 from GetStream/remove-date-transform #4724
This file contains hidden or 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: sample-distribution | |
| concurrency: | |
| group: sample-distribution-${{ github.ref }} | |
| cancel-in-progress: true | |
| on: | |
| push: | |
| paths: | |
| - '.github/workflows/sample-distribution.yml' | |
| - 'package/**' | |
| - 'examples/SampleApp/**' | |
| permissions: | |
| actions: write | |
| contents: read | |
| # The RC channel is owned by whichever branch the RC_BRANCH repository variable names, so | |
| # retargeting it at a new pre-release branch is a settings change rather than a PR. Unset | |
| # RC_BRANCH resolves to an empty string, which never matches a ref name, so this fails closed. | |
| # The `!= 'develop'` guard stops a mis-set RC_BRANCH from turning develop into the RC channel. | |
| env: | |
| IS_DEVELOP: ${{ github.ref_name == 'develop' }} | |
| IS_RC: ${{ github.ref_name != 'develop' && github.ref_name == vars.RC_BRANCH }} | |
| jobs: | |
| build_and_deploy_ios_testflight_qa: | |
| name: Build SampleApp iOS and Deploy-${{ github.ref_name == 'develop' || github.ref_name == vars.RC_BRANCH }} | |
| runs-on: [macos-15] | |
| strategy: | |
| matrix: | |
| node-version: [24.x] | |
| steps: | |
| - name: Connect Bot | |
| uses: webfactory/ssh-agent@v0.10.0 | |
| with: | |
| ssh-private-key: ${{ secrets.BOT_SSH_PRIVATE_KEY }} | |
| - uses: actions/checkout@v6 | |
| - name: Use Node.js ${{ matrix.node-version }} | |
| uses: actions/setup-node@v6 | |
| with: | |
| node-version: ${{ matrix.node-version }} | |
| cache: 'yarn' | |
| cache-dependency-path: 'yarn.lock' | |
| - uses: maxim-lobanov/setup-xcode@v1 | |
| with: | |
| xcode-version: '26.2' # Update as needed | |
| - uses: ./.github/actions/ruby-cache | |
| - name: Install && Build - SDK and Sample App | |
| uses: ./.github/actions/install-and-build-sdk | |
| - name: Cache iOS pods | |
| uses: actions/cache@v5 | |
| with: | |
| path: examples/SampleApp/ios/Pods | |
| key: ${{ runner.os }}-pods-${{ hashFiles('examples/SampleApp/ios/Podfile.lock') }} | |
| restore-keys: | | |
| ${{ runner.os }}-pods- | |
| - name: iOS Pods setup | |
| working-directory: examples/SampleApp/ios | |
| run: | | |
| rm -rf Pods | |
| rm -f Podfile.lock | |
| rm -rf build | |
| rm -rf ~/Library/Developer/Xcode/DerivedData | |
| bundle exec pod install | |
| - name: Build and release Testflight QA | |
| working-directory: examples/SampleApp | |
| run: bundle exec fastlane ios deploy_to_testflight_qa deploy:${{ env.IS_DEVELOP == 'true' || env.IS_RC == 'true' }} variant:${{ env.IS_RC == 'true' && 'rc' || 'default' }}; | |
| env: | |
| MATCH_PASSWORD: ${{ secrets.MATCH_PASSWORD }} | |
| MATCH_GIT_BASIC_AUTHORIZATION: ${{ secrets.MATCH_GIT_BASIC_AUTHORIZATION }} | |
| APPSTORE_API_KEY: ${{ secrets.APPSTORE_API_KEY }} | |
| build_and_deploy_android_firebase: | |
| name: Build SampleApp Android and Deploy-${{ github.ref_name == 'develop' || github.ref_name == vars.RC_BRANCH }} | |
| runs-on: public | |
| strategy: | |
| matrix: | |
| node-version: [24.x] | |
| steps: | |
| - uses: actions/checkout@v6 | |
| - name: Use Node.js ${{ matrix.node-version }} | |
| uses: actions/setup-node@v6 | |
| with: | |
| node-version: ${{ matrix.node-version }} | |
| cache: 'yarn' | |
| cache-dependency-path: 'yarn.lock' | |
| - uses: actions/setup-java@v5 | |
| with: | |
| distribution: 'zulu' | |
| java-version: '17' | |
| check-latest: true | |
| - name: Setup Android SDK | |
| uses: amyu/setup-android@v5 | |
| - uses: ./.github/actions/ruby-cache | |
| - name: Install && Build - SDK and Sample App | |
| uses: ./.github/actions/install-and-build-sdk | |
| - name: Build and deploy Android Firebase | |
| working-directory: examples/SampleApp | |
| run: bundle exec fastlane android firebase_build_and_upload deploy:${{ env.IS_DEVELOP == 'true' || env.IS_RC == 'true' }} variant:${{ env.IS_RC == 'true' && 'rc' || 'default' }}; | |
| env: | |
| ANDROID_FIREBASE_APP_ID: ${{ secrets.ANDROID_FIREBASE_APP_ID }} | |
| FIREBASE_CREDENTIALS_JSON: ${{ secrets.FIREBASE_CREDENTIALS_JSON }} | |
| # Publish the same APK to S3 for the public download link. Reuses the | |
| # artifact the Fastlane step above already built (app-build/), no rebuild. | |
| # | |
| # These three steps are deliberately gated on develop ALONE, not on the combined deploy | |
| # gate above: the S3 key backs the public getstream.io/downloads/rn-sample-app.apk link, | |
| # so letting an RC build reach it would replace the published develop APK. | |
| - name: Ensure AWS CLI is available | |
| if: env.IS_DEVELOP == 'true' | |
| # The self-hosted `public` runner does not ship the AWS CLI. Install v2 | |
| # only when missing, to a user-writable dir (no sudo), then expose it. | |
| run: | | |
| if command -v aws >/dev/null 2>&1; then | |
| echo "AWS CLI already installed: $(aws --version)" | |
| exit 0 | |
| fi | |
| echo "AWS CLI not found; installing v2..." | |
| case "$(uname -m)" in | |
| x86_64) zip="awscli-exe-linux-x86_64.zip" ;; | |
| aarch64|arm64) zip="awscli-exe-linux-aarch64.zip" ;; | |
| *) echo "Unsupported architecture: $(uname -m)"; exit 1 ;; | |
| esac | |
| curl -fsSL "https://awscli.amazonaws.com/${zip}" -o /tmp/awscliv2.zip | |
| unzip -q /tmp/awscliv2.zip -d /tmp | |
| /tmp/aws/install --bin-dir "$HOME/.local/bin" --install-dir "$HOME/.local/aws-cli" --update | |
| echo "$HOME/.local/bin" >> "$GITHUB_PATH" | |
| "$HOME/.local/bin/aws" --version | |
| - name: Configure AWS credentials | |
| if: env.IS_DEVELOP == 'true' | |
| uses: aws-actions/configure-aws-credentials@v4 | |
| with: | |
| aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} | |
| aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} | |
| aws-region: us-east-1 | |
| - name: Upload APK to S3 | |
| if: env.IS_DEVELOP == 'true' | |
| working-directory: examples/SampleApp | |
| # Public download link: https://getstream.io/downloads/rn-sample-app.apk | |
| run: | | |
| cp app-build/reactnativesampleapp.apk rn-sample-app.apk | |
| aws s3 cp rn-sample-app.apk s3://${{ secrets.AWS_S3_BUCKET }} --sse AES256 |