feat: add rootDir for consistent output folder structure #338
Workflow file for this run
This file contains 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: Build template | |
on: | |
workflow_dispatch: | |
push: | |
branches: | |
- main | |
paths: | |
- '.github/workflows/build-templates.yml' | |
- 'packages/create-react-native-library/**' | |
- '!**.md' | |
pull_request: | |
branches: | |
- main | |
jobs: | |
build: | |
env: | |
TURBO_TOKEN: ${{ secrets.TURBO_TOKEN }} | |
TURBO_TEAM: ${{ secrets.TURBO_TEAM }} | |
strategy: | |
fail-fast: false | |
matrix: | |
os: | |
- ubuntu | |
- macos | |
type: | |
- module-legacy | |
- module-mixed | |
- module-new | |
- view-legacy | |
- view-mixed | |
- view-new | |
language: | |
- java-objc | |
- java-swift | |
- kotlin-objc | |
- kotlin-swift | |
exclude: | |
- os: macos | |
language: kotlin-objc | |
- os: macos | |
language: kotlin-swift | |
- type: module-new | |
language: java-swift | |
- type: module-new | |
language: kotlin-swift | |
- type: module-mixed | |
language: java-swift | |
- type: module-mixed | |
language: kotlin-swift | |
- type: view-new | |
language: java-swift | |
- type: view-new | |
language: kotlin-swift | |
- type: view-mixed | |
language: java-swift | |
- type: view-mixed | |
language: kotlin-swift | |
include: | |
- os: ubuntu | |
type: library | |
language: js | |
- os: ubuntu | |
type: module-legacy | |
language: cpp | |
- os: ubuntu | |
type: module-mixed | |
language: cpp | |
- os: ubuntu | |
type: module-new | |
language: cpp | |
- os: macos | |
type: module-legacy | |
language: cpp | |
- os: macos | |
type: module-mixed | |
language: cpp | |
- os: macos | |
type: module-new | |
language: cpp | |
concurrency: | |
group: ${{ github.workflow }}-${{ github.ref }}-${{ matrix.os }}-${{ matrix.type }}-${{ matrix.language }} | |
cancel-in-progress: true | |
runs-on: ${{ matrix.os }}-latest | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v3 | |
- name: Setup | |
uses: ./.github/actions/setup | |
- name: Build package | |
run: | | |
yarn workspace create-react-native-library prepack | |
- name: Get working directory | |
run: | | |
echo "work_dir=${{ matrix.os }}-${{ matrix.type }}-${{ matrix.language }}" >> $GITHUB_ENV | |
- name: Create library | |
run: | | |
rm -rf ${{ env.work_dir }} # Workaround for tests failing intermittently | |
./packages/create-react-native-library/bin/create-react-native-library ${{ env.work_dir }} \ | |
--slug @bob/react-native-test \ | |
--description test \ | |
--author-name test \ | |
--author-email test@test \ | |
--author-url https://test.test \ | |
--repo-url https://test.test \ | |
--type ${{ matrix.type }} \ | |
--languages ${{ matrix.language }} \ | |
- name: Cache dependencies of library | |
id: library-yarn-cache | |
uses: actions/cache@v3 | |
with: | |
path: | | |
${{ env.work_dir }}/**/node_modules | |
${{ env.work_dir }}/**/yarn.lock | |
key: ${{ runner.os }}-library-yarn-${{ hashFiles(format('{0}/**/package.json', env.work_dir)) }} | |
restore-keys: | | |
${{ runner.os }}-library-yarn- | |
- name: Install dependencies of library | |
if: steps.library-yarn-cache.outputs.cache-hit != 'true' | |
working-directory: ${{ env.work_dir }} | |
run: | | |
yarn install --cwd example | |
yarn install | |
- name: Get build target | |
working-directory: ${{ env.work_dir }} | |
run: | | |
# Build Android for only some matrices to skip redundant builds | |
if [[ ${{ matrix.os }} == ubuntu ]]; then | |
if [[ ${{ matrix.type }} == view-* && ${{ matrix.language }} == *-objc ]] || [[ ${{ matrix.type }} == module-* && ${{ matrix.language }} == *-objc ]] || [[ ${{ matrix.type }} == module-* && ${{ matrix.language }} == cpp ]]; then | |
echo "android_build=1" >> $GITHUB_ENV | |
fi | |
fi | |
# Build iOS for only some matrices to skip redundant builds | |
if [[ ${{ matrix.os }} == macos ]]; then | |
if [[ ${{ matrix.type }} == view-* && ${{ matrix.language }} == java-* ]] || [[ ${{ matrix.type }} == module-* && ${{ matrix.language }} == java-* ]] || [[ ${{ matrix.type }} == module-* && ${{ matrix.language }} == cpp ]]; then | |
echo "ios_build=1" >> $GITHUB_ENV | |
fi | |
fi | |
- name: Cache turborepo | |
if: env.android_build == 1 || env.ios_build == 1 | |
uses: actions/cache@v3 | |
with: | |
path: | | |
${{ env.work_dir }}/.turbo | |
key: ${{ runner.os }}-library-turborepo-${{ matrix.type }}-${{ matrix.language }}-${{ hashFiles(format('{0}/**/yarn.lock', env.work_dir)) }} | |
restore-keys: | | |
${{ runner.os }}-library-turborepo-${{ matrix.type }}-${{ matrix.language }}- | |
- name: Check turborepo cache | |
if: env.android_build == 1 || env.ios_build == 1 | |
working-directory: ${{ env.work_dir }} | |
run: | | |
TURBO_CACHE_STATUS_ANDROID=$(node -p "($(yarn --silent turbo run build:android --cache-dir=".turbo/cache" --dry=json)).tasks.find(t => t.task === 'build:android').cache.status") | |
TURBO_CACHE_STATUS_IOS=$(node -p "($(yarn --silent turbo run build:ios --cache-dir=".turbo/cache" --dry=json)).tasks.find(t => t.task === 'build:ios').cache.status") | |
if [[ $TURBO_CACHE_STATUS_ANDROID == "HIT" ]]; then | |
echo "turbo_cache_hit_android=1" >> $GITHUB_ENV | |
fi | |
if [[ $TURBO_CACHE_STATUS_IOS == "HIT" ]]; then | |
echo "turbo_cache_hit_ios=1" >> $GITHUB_ENV | |
fi | |
- name: Lint library | |
working-directory: ${{ env.work_dir }} | |
run: | | |
yarn lint | |
- name: Typecheck library | |
working-directory: ${{ env.work_dir }} | |
run: | | |
yarn typecheck | |
- name: Test library | |
working-directory: ${{ env.work_dir }} | |
run: | | |
yarn test | |
- name: Build library | |
working-directory: ${{ env.work_dir }} | |
run: | | |
yarn prepack | |
- name: Build example (Web) | |
working-directory: ${{ env.work_dir }} | |
if: matrix.language == 'js' | |
run: | | |
yarn example expo export:web | |
- name: Install JDK | |
if: env.android_build == 1 && env.turbo_cache_hit_android != 1 | |
uses: actions/setup-java@v3 | |
with: | |
distribution: 'zulu' | |
java-version: '11' | |
- name: Finalize Android SDK | |
if: env.android_build == 1 && env.turbo_cache_hit_android != 1 | |
run: | | |
/bin/bash -c "yes | $ANDROID_HOME/cmdline-tools/latest/bin/sdkmanager --licenses > /dev/null" | |
- name: Cache Gradle | |
if: env.android_build == 1 && env.turbo_cache_hit_android != 1 | |
uses: actions/cache@v3 | |
with: | |
path: | | |
~/.gradle/wrapper | |
~/.gradle/caches | |
key: ${{ runner.os }}-gradle-${{ hashFiles(format('{0}/example/android/gradle/wrapper/gradle-wrapper.properties', env.work_dir)) }} | |
restore-keys: | | |
${{ runner.os }}-gradle- | |
- name: Build example (Android) | |
if: env.android_build == 1 | |
working-directory: ${{ env.work_dir }} | |
run: | | |
yarn turbo run build:android --cache-dir=".turbo/cache" | |
- name: Cache cocoapods | |
if: env.ios_build == 1 && env.turbo_cache_hit_ios != 1 | |
id: library-cocoapods-cache | |
uses: actions/cache@v3 | |
with: | |
path: | | |
${{ env.work_dir }}/**/ios/Pods | |
${{ env.work_dir }}/**/ios/Podfile.lock | |
key: ${{ runner.os }}-library-cocoapods-${{ hashFiles(format('{0}/example/ios/Podfile', env.work_dir)) }}-${{ hashFiles(format('{0}/**/yarn.lock', env.work_dir)) }} | |
restore-keys: | | |
${{ runner.os }}-library-cocoapods-${{ hashFiles(format('{0}/example/ios/Podfile', env.work_dir)) }}- | |
${{ runner.os }}-library-cocoapods- | |
- name: Install cocoapods | |
if: env.ios_build == 1 && env.turbo_cache_hit_ios != 1 && steps.library-cocoapods-cache.outputs.cache-hit != 'true' | |
working-directory: ${{ env.work_dir }} | |
run: | | |
yarn example pods | |
env: | |
NO_FLIPPER: 1 | |
- name: Build example (iOS) | |
if: env.ios_build == 1 | |
working-directory: ${{ env.work_dir }} | |
run: | | |
yarn turbo run build:ios --cache-dir=".turbo/cache" |