Skip to content

Feature: Reactive Data #12

Feature: Reactive Data

Feature: Reactive Data #12

Workflow file for this run

name: Beta Release
on:
push:
branches:
- beta
pull_request:
branches:
- beta
jobs:
lint:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup
uses: ./.github/actions/setup
- name: Lint files
run: yarn lint './**/*.{ts,tsx,js,jsx}' --ignore-pattern node_modules
- name: Typecheck files
run: yarn typecheck
test:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup
uses: ./.github/actions/setup
- name: Run unit tests
run: yarn test:cov
- name: Update Coverage Badge
# GitHub actions: default branch variable
# https://stackoverflow.com/questions/64781462/github-actions-default-branch-variable
if: github.ref == format('refs/heads/{0}', github.event.repository.default_branch)
uses: we-cli/coverage-badge-action@main
build-library:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup
uses: ./.github/actions/setup
- name: Build package
run: yarn prepack
build-android:
runs-on: ubuntu-latest
env:
TURBO_CACHE_DIR: .turbo/android
ANDROID_HOME: /usr/local/lib/android/sdk
JAVA_HOME: /usr/lib/jvm/zulu-11-amd64
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup
uses: ./.github/actions/setup
- name: Cache turborepo for Android
uses: actions/cache@v4
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 --silent 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@v4
with:
distribution: 'zulu'
java-version: '11'
- name: Set up Android SDK
if: env.turbo_cache_hit != 1
uses: android-actions/setup-android@v2
with:
api-level: 30
build-tools: 30.0.3
ndk: "23.1.7779620"
- name: Create local.properties
if: env.turbo_cache_hit != 1
run: |
echo "sdk.dir=$ANDROID_HOME" > example/android/local.properties
- 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@v4
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
run: |
yarn turbo run build:android --cache-dir="${{ env.TURBO_CACHE_DIR }}"
build-ios:
runs-on: macos-latest
env:
TURBO_CACHE_DIR: .turbo/ios
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup
uses: ./.github/actions/setup
- name: Cache turborepo for iOS
uses: actions/cache@v4
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 --silent 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: Cache cocoapods
if: env.turbo_cache_hit != 1
id: cocoapods-cache
uses: actions/cache@v4
with:
path: |
**/ios/Pods
key: ${{ runner.os }}-cocoapods-${{ hashFiles('example/ios/Podfile.lock') }}
restore-keys: |
${{ runner.os }}-cocoapods-
- name: Install cocoapods
if: env.turbo_cache_hit != 1 && steps.cocoapods-cache.outputs.cache-hit != 'true'
run: |
yarn example pods
env:
NO_FLIPPER: 1
- name: Build example for iOS
run: |
yarn turbo run build:ios --cache-dir="${{ env.TURBO_CACHE_DIR }}" 2>&1 | grep -i error > ios_errorlog.txt
- name: Upload iOS error log
uses: actions/upload-artifact@v4
with:
name: ios-error-log
path: ios_errorlog.txt
publish-beta:
needs: [lint, test, build-library, build-android, build-ios]
runs-on: ubuntu-latest
permissions:
contents: write # To publish a GitHub release
issues: write # To comment on released issues
pull-requests: write # To comment on released pull requests
id-token: write # To enable use of OIDC for npm provenance
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0 # Ensures all tags are fetched
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: "lts/*" # Use the latest LTS version of Node.js
registry-url: 'https://registry.npmjs.org/' # Specify npm registry
- name: Install dependencies
run: npm ci # Clean install dependencies based on the lock file
- name: Verify the integrity of provenance attestations and registry signatures for installed dependencies
run: npm audit signatures # Check the signatures to verify integrity
- name: Release Beta
run: npx semantic-release # Run semantic-release to manage versioning and publishing
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # GitHub token for authentication
# Why NODE_AUTH_TOKEN instead of NPM_TOKEN: https://github.com/semantic-release/semantic-release/issues/2313
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} # npm token for publishing package