Merge remote-tracking branch 'origin/main' #12
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: CI | |
| on: | |
| push: | |
| branches: | |
| - main | |
| pull_request: | |
| branches: | |
| - main | |
| merge_group: | |
| types: | |
| - checks_requested | |
| jobs: | |
| lint: | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 | |
| - name: Setup | |
| uses: ./.github/actions/setup | |
| - name: Lint files | |
| run: yarn lint | |
| - name: Typecheck files | |
| run: yarn typecheck | |
| test: | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 | |
| - name: Setup | |
| uses: ./.github/actions/setup | |
| - name: Run unit tests | |
| run: yarn test --maxWorkers=2 --coverage | |
| build-library: | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 | |
| - name: Setup | |
| uses: ./.github/actions/setup | |
| - name: Build package | |
| run: yarn prepare | |
| build-android: | |
| runs-on: ubuntu-latest | |
| environment: production | |
| env: | |
| TURBO_CACHE_DIR: .turbo/android | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 | |
| - name: Setup | |
| uses: ./.github/actions/setup | |
| - name: Generate nitrogen code | |
| run: yarn nitrogen | |
| - name: Setup Mapbox token for Android | |
| run: | | |
| if [ -z "${{ secrets.MAPBOX_DOWNLOADS_TOKEN }}" ]; then | |
| echo "Error: MAPBOX_DOWNLOADS_TOKEN secret is required but not set" | |
| exit 1 | |
| fi | |
| echo "MAPBOX_DOWNLOADS_TOKEN=${{ secrets.MAPBOX_DOWNLOADS_TOKEN }}" >> example/android/gradle.properties | |
| - name: Cache turborepo for Android | |
| uses: actions/cache@5a3ec84eff668545956fd18022155c47e93e2684 # v4.2.3 | |
| with: | |
| path: ${{ env.TURBO_CACHE_DIR }} | |
| key: ${{ runner.os }}-turborepo-android-${{ hashFiles('yarn.lock') }} | |
| restore-keys: | | |
| ${{ runner.os }}-turborepo-android- | |
| - name: Check turborepo cache for Android | |
| run: | | |
| TURBO_CACHE_STATUS=$(node -p "($(yarn turbo run build:android --cache-dir="${{ env.TURBO_CACHE_DIR }}" --dry=json)).tasks.find(t => t.task === 'build:android').cache.status") | |
| if [[ $TURBO_CACHE_STATUS == "HIT" ]]; then | |
| echo "turbo_cache_hit=1" >> $GITHUB_ENV | |
| fi | |
| - name: Install JDK | |
| if: env.turbo_cache_hit != 1 | |
| uses: actions/setup-java@c5195efecf7bdfc987ee8bae7a71cb8b11521c00 # v4.7.1 | |
| with: | |
| distribution: 'zulu' | |
| java-version: '17' | |
| - name: Finalize Android SDK | |
| if: env.turbo_cache_hit != 1 | |
| run: | | |
| /bin/bash -c "yes | $ANDROID_HOME/cmdline-tools/latest/bin/sdkmanager --licenses > /dev/null" | |
| - name: Cache Gradle | |
| if: env.turbo_cache_hit != 1 | |
| uses: actions/cache@5a3ec84eff668545956fd18022155c47e93e2684 # v4.2.3 | |
| with: | |
| path: | | |
| ~/.gradle/wrapper | |
| ~/.gradle/caches | |
| key: ${{ runner.os }}-gradle-${{ hashFiles('example/android/gradle/wrapper/gradle-wrapper.properties') }} | |
| restore-keys: | | |
| ${{ runner.os }}-gradle- | |
| - name: Build example for Android | |
| env: | |
| JAVA_OPTS: "-XX:MaxHeapSize=6g" | |
| run: | | |
| yarn turbo run build:android --cache-dir="${{ env.TURBO_CACHE_DIR }}" | |
| build-ios: | |
| runs-on: macos-latest | |
| environment: production | |
| env: | |
| XCODE_VERSION: 16.2 | |
| TURBO_CACHE_DIR: .turbo/ios | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 | |
| - name: Setup | |
| uses: ./.github/actions/setup | |
| - name: Generate nitrogen code | |
| run: yarn nitrogen | |
| - name: Setup Mapbox token for iOS | |
| run: | | |
| if [ -z "${{ secrets.MAPBOX_DOWNLOADS_TOKEN }}" ]; then | |
| echo "Error: MAPBOX_DOWNLOADS_TOKEN secret is required but not set" | |
| exit 1 | |
| fi | |
| echo "machine api.mapbox.com" >> ~/.netrc | |
| echo "login mapbox" >> ~/.netrc | |
| echo "password ${{ secrets.MAPBOX_DOWNLOADS_TOKEN }}" >> ~/.netrc | |
| chmod 600 ~/.netrc | |
| - name: Cache turborepo for iOS | |
| uses: actions/cache@5a3ec84eff668545956fd18022155c47e93e2684 # v4.2.3 | |
| with: | |
| path: ${{ env.TURBO_CACHE_DIR }} | |
| key: ${{ runner.os }}-turborepo-ios-${{ hashFiles('yarn.lock') }} | |
| restore-keys: | | |
| ${{ runner.os }}-turborepo-ios- | |
| - name: Check turborepo cache for iOS | |
| run: | | |
| TURBO_CACHE_STATUS=$(node -p "($(yarn turbo run build:ios --cache-dir="${{ env.TURBO_CACHE_DIR }}" --dry=json)).tasks.find(t => t.task === 'build:ios').cache.status") | |
| if [[ $TURBO_CACHE_STATUS == "HIT" ]]; then | |
| echo "turbo_cache_hit=1" >> $GITHUB_ENV | |
| fi | |
| - name: Use appropriate Xcode version | |
| if: env.turbo_cache_hit != 1 | |
| uses: maxim-lobanov/setup-xcode@60606e260d2fc5762a71e64e74b2174e8ea3c8bd # v1.6.0 | |
| with: | |
| xcode-version: ${{ env.XCODE_VERSION }} | |
| - name: Install cocoapods | |
| if: env.turbo_cache_hit != 1 | |
| run: | | |
| cd example | |
| bundle install | |
| # Retry logic for pod repo update with fallback | |
| for i in {1..3}; do | |
| echo "Attempt $i: Updating CocoaPods repos..." | |
| if bundle exec pod repo update --verbose; then | |
| echo "Pod repo update successful" | |
| break | |
| elif [ $i -eq 3 ]; then | |
| echo "Pod repo update failed after 3 attempts, trying alternative approach..." | |
| # Remove existing repos and re-add | |
| bundle exec pod repo remove trunk || true | |
| bundle exec pod repo add trunk https://github.com/CocoaPods/Specs.git --verbose || true | |
| bundle exec pod repo update trunk --verbose || true | |
| else | |
| echo "Attempt $i failed, retrying in 10 seconds..." | |
| sleep 10 | |
| fi | |
| done | |
| # Install pods with retry logic | |
| for i in {1..3}; do | |
| echo "Attempt $i: Installing CocoaPods dependencies..." | |
| if bundle exec pod install --project-directory=ios --verbose; then | |
| echo "Pod install successful" | |
| break | |
| elif [ $i -eq 3 ]; then | |
| echo "Pod install failed after 3 attempts" | |
| exit 1 | |
| else | |
| echo "Attempt $i failed, retrying in 10 seconds..." | |
| sleep 10 | |
| fi | |
| done | |
| - name: Build example for iOS | |
| run: | | |
| yarn turbo run build:ios --cache-dir="${{ env.TURBO_CACHE_DIR }}" |