diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 95e3bb7e..a86ad282 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -11,9 +11,43 @@ concurrency: cancel-in-progress: true jobs: + filter: + name: Detect changed paths + runs-on: ubuntu-latest + outputs: + packages: ${{ steps.filter.outputs.packages }} + rnapp: ${{ steps.filter.outputs.rnapp }} + expo54: ${{ steps.filter.outputs.expo54 }} + expo55: ${{ steps.filter.outputs.expo55 }} + androidapp: ${{ steps.filter.outputs.androidapp }} + appleapp: ${{ steps.filter.outputs.appleapp }} + steps: + - name: Checkout + uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6 + + - name: Filter paths + uses: dorny/paths-filter@v3 + id: filter + with: + filters: | + packages: + - 'packages/**' + rnapp: + - 'apps/RNApp/**' + expo54: + - 'apps/ExpoApp54/**' + expo55: + - 'apps/ExpoApp55/**' + androidapp: + - 'apps/AndroidApp/**' + appleapp: + - 'apps/AppleApp/**' + check-changeset: name: Check changeset runs-on: ubuntu-latest + needs: filter + if: needs.filter.outputs.packages == 'true' steps: - name: Checkout repository uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6 @@ -30,6 +64,8 @@ jobs: build-lint: name: Build, lint, typecheck & Jest runs-on: ubuntu-latest + needs: filter + if: needs.filter.outputs.packages == 'true' steps: - name: Checkout uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6 @@ -56,7 +92,16 @@ jobs: android-androidapp-expo: name: Android road test (RNApp & AndroidApp - Expo ${{ matrix.version }}) runs-on: ubuntu-latest - needs: build-lint + needs: [filter, build-lint] + if: | + always() && + ( + needs.filter.outputs.expo54 == 'true' || + needs.filter.outputs.expo55 == 'true' || + needs.filter.outputs.androidapp == 'true' || + needs.filter.outputs.packages == 'true' + ) && + (needs.build-lint.result == 'success' || needs.build-lint.result == 'skipped') strategy: matrix: include: @@ -77,7 +122,15 @@ jobs: android-androidapp-vanilla: name: Android road test (RNApp & AndroidApp - Vanilla) runs-on: ubuntu-latest - needs: build-lint + needs: [filter, build-lint] + if: | + always() && + ( + needs.filter.outputs.rnapp == 'true' || + needs.filter.outputs.androidapp == 'true' || + needs.filter.outputs.packages == 'true' + ) && + (needs.build-lint.result == 'success' || needs.build-lint.result == 'skipped') steps: - name: Checkout @@ -93,7 +146,15 @@ jobs: ios-appleapp-vanilla: name: iOS road test (RNApp & AppleApp - Vanilla) runs-on: macos-26 - needs: build-lint + needs: [filter, build-lint] + if: | + always() && + ( + needs.filter.outputs.rnapp == 'true' || + needs.filter.outputs.appleapp == 'true' || + needs.filter.outputs.packages == 'true' + ) && + (needs.build-lint.result == 'success' || needs.build-lint.result == 'skipped') steps: - name: Checkout @@ -108,7 +169,16 @@ jobs: ios-appleapp-expo: name: iOS road test (RNApp & AppleApp - Expo ${{ matrix.version }}) runs-on: macos-26 - needs: build-lint + needs: [filter, build-lint] + if: | + always() && + ( + needs.filter.outputs.expo54 == 'true' || + needs.filter.outputs.expo55 == 'true' || + needs.filter.outputs.appleapp == 'true' || + needs.filter.outputs.packages == 'true' + ) && + (needs.build-lint.result == 'success' || needs.build-lint.result == 'skipped') strategy: matrix: include: diff --git a/apps/ExpoApp54/README.md b/apps/ExpoApp54/README.md index 48dd63ff..17956731 100644 --- a/apps/ExpoApp54/README.md +++ b/apps/ExpoApp54/README.md @@ -48,3 +48,4 @@ Join our community of developers creating universal apps. - [Expo on GitHub](https://github.com/expo/expo): View our open source platform and contribute. - [Discord community](https://chat.expo.dev): Chat with Expo users and ask questions. +