Skip to content

Commit ecbf706

Browse files
committed
ci: merge Android + iOS workflows into one with single filter block
1 parent 12385c0 commit ecbf706

2 files changed

Lines changed: 91 additions & 142 deletions

File tree

Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
name: Android example apps build check
1+
name: Example apps build check
22
on:
33
push:
44
branches:
@@ -12,7 +12,8 @@ jobs:
1212
if: github.repository == 'software-mansion/react-native-executorch' && github.event.pull_request.draft != true
1313
runs-on: ubuntu-latest
1414
outputs:
15-
apps: ${{ steps.matrix.outputs.apps }}
15+
android_apps: ${{ steps.matrix.outputs.android_apps }}
16+
ios_apps: ${{ steps.matrix.outputs.ios_apps }}
1617
steps:
1718
- name: Checkout
1819
uses: actions/checkout@v6
@@ -23,10 +24,10 @@ jobs:
2324
uses: dorny/paths-filter@v3
2425
with:
2526
filters: |
26-
shared: &shared
27-
- .github/workflows/build-android.yml
28-
- .github/actions/build-android-app/**
29-
- packages/react-native-executorch/{android,scripts,third-party}/**
27+
# Cross-platform shared infrastructure
28+
core-shared: &core-shared
29+
- .github/workflows/build-apps.yml
30+
- packages/react-native-executorch/{scripts,third-party}/**
3031
- packages/react-native-executorch/{package.json,tsconfig.json}
3132
- packages/react-native-executorch/common/{ada,runner}/**
3233
- packages/react-native-executorch/common/rnexecutorch/{Error,ErrorCodes,Log}.h
@@ -38,66 +39,105 @@ jobs:
3839
- packages/react-native-executorch/src/modules/{BaseModule.ts,general/**}
3940
- packages/react-native-executorch/src/hooks/{general/**,useModule.ts,useModuleFactory.ts}
4041
- "{package.json,yarn.lock}"
41-
expo-shared: &expo-shared
42-
- *shared
42+
# Platform-specific shared
43+
android-shared: &android-shared
44+
- .github/actions/build-android-app/**
45+
- packages/react-native-executorch/android/**
46+
ios-shared: &ios-shared
47+
- .github/actions/build-ios-app/**
48+
- packages/react-native-executorch/ios/**
49+
- packages/react-native-executorch/react-native-executorch.podspec
50+
# Resource fetchers
51+
expo-fetcher: &expo-fetcher
4352
- packages/expo-resource-fetcher/**
53+
bare-fetcher: &bare-fetcher
54+
- packages/bare-resource-fetcher/**
55+
# Per-app package paths (TS modules + C++ models for the app's domain)
4456
llm-pkg: &llm-pkg
4557
- packages/react-native-executorch/common/rnexecutorch/TokenizerModule.{cpp,h}
4658
- packages/react-native-executorch/common/rnexecutorch/models/llm/**
4759
- packages/react-native-executorch/src/modules/natural_language_processing/{LLMModule,TokenizerModule}.ts
4860
- packages/react-native-executorch/src/hooks/natural_language_processing/{useLLM,useTokenizer}.ts
4961
- packages/react-native-executorch/src/controllers/LLMController.ts
50-
llm:
51-
- *expo-shared
52-
- *llm-pkg
53-
- apps/llm/**
54-
computer-vision:
55-
- *expo-shared
62+
cv-pkg: &cv-pkg
5663
- packages/react-native-executorch/common/rnexecutorch/models/VisionModel.{cpp,h}
5764
- packages/react-native-executorch/common/rnexecutorch/models/{classification,instance_segmentation,object_detection,ocr,semantic_segmentation,style_transfer,text_to_image,vertical_ocr}/**
5865
- packages/react-native-executorch/src/{modules,hooks}/computer_vision/**
5966
- packages/react-native-executorch/src/controllers/{BaseOCRController,OCRController,VerticalOCRController}.ts
60-
- apps/computer-vision/**
61-
speech:
62-
- *expo-shared
67+
speech-pkg: &speech-pkg
6368
- packages/react-native-executorch/common/pfft/**
6469
- packages/react-native-executorch/common/rnexecutorch/TokenizerModule.{cpp,h}
6570
- packages/react-native-executorch/common/rnexecutorch/models/{speech_to_text,text_to_speech,voice_activity_detection}/**
6671
- packages/react-native-executorch/src/modules/natural_language_processing/{SpeechToTextModule,TextToSpeechModule,VADModule,TokenizerModule}.ts
6772
- packages/react-native-executorch/src/hooks/natural_language_processing/{useSpeechToText,useTextToSpeech,useVAD,useTokenizer}.ts
68-
- apps/speech/**
69-
text-embeddings:
70-
- *expo-shared
73+
text-embeddings-pkg: &text-embeddings-pkg
7174
- packages/react-native-executorch/common/rnexecutorch/TokenizerModule.{cpp,h}
7275
- packages/react-native-executorch/common/rnexecutorch/models/embeddings/**
7376
- packages/react-native-executorch/src/modules/natural_language_processing/{TextEmbeddingsModule,TokenizerModule}.ts
7477
- packages/react-native-executorch/src/modules/computer_vision/ImageEmbeddingsModule.ts
7578
- packages/react-native-executorch/src/hooks/natural_language_processing/{useTextEmbeddings,useTokenizer}.ts
7679
- packages/react-native-executorch/src/hooks/computer_vision/useImageEmbeddings.ts
80+
# Per-app bundle: core + fetcher + pkg + app dir
81+
llm-app: &llm-app
82+
- *core-shared
83+
- *expo-fetcher
84+
- *llm-pkg
85+
- apps/llm/**
86+
computer-vision-app: &computer-vision-app
87+
- *core-shared
88+
- *expo-fetcher
89+
- *cv-pkg
90+
- apps/computer-vision/**
91+
speech-app: &speech-app
92+
- *core-shared
93+
- *expo-fetcher
94+
- *speech-pkg
95+
- apps/speech/**
96+
text-embeddings-app: &text-embeddings-app
97+
- *core-shared
98+
- *expo-fetcher
99+
- *text-embeddings-pkg
77100
- apps/text-embeddings/**
78-
bare-rn:
79-
- *shared
101+
bare-rn-app: &bare-rn-app
102+
- *core-shared
103+
- *bare-fetcher
80104
- *llm-pkg
81-
- packages/bare-resource-fetcher/**
82105
- apps/bare-rn/**
106+
# Final per-platform per-app filters (the only ones the matrix consumes)
107+
llm-android: [*llm-app, *android-shared]
108+
llm-ios: [*llm-app, *ios-shared]
109+
computer-vision-android: [*computer-vision-app, *android-shared]
110+
computer-vision-ios: [*computer-vision-app, *ios-shared]
111+
speech-android: [*speech-app, *android-shared]
112+
speech-ios: [*speech-app, *ios-shared]
113+
text-embeddings-android: [*text-embeddings-app, *android-shared]
114+
text-embeddings-ios: [*text-embeddings-app, *ios-shared]
115+
bare-rn-android: [*bare-rn-app, *android-shared]
116+
bare-rn-ios: [*bare-rn-app, *ios-shared]
83117
84-
- name: Compute matrix
118+
- name: Compute matrices
85119
id: matrix
86120
run: |
121+
all='["llm","computer-vision","speech","text-embeddings","bare-rn"]'
87122
if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then
88-
echo 'apps=["llm","computer-vision","speech","text-embeddings","bare-rn"]' >> "$GITHUB_OUTPUT"
123+
echo "android_apps=$all" >> "$GITHUB_OUTPUT"
124+
echo "ios_apps=$all" >> "$GITHUB_OUTPUT"
89125
else
90-
echo "apps=${{ steps.filter.outputs.changes }}" >> "$GITHUB_OUTPUT"
126+
changes='${{ steps.filter.outputs.changes }}'
127+
android_apps=$(echo "$changes" | jq -c '[.[] | select(endswith("-android")) | sub("-android$"; "")]')
128+
ios_apps=$(echo "$changes" | jq -c '[.[] | select(endswith("-ios")) | sub("-ios$"; "")]')
129+
echo "android_apps=$android_apps" >> "$GITHUB_OUTPUT"
130+
echo "ios_apps=$ios_apps" >> "$GITHUB_OUTPUT"
91131
fi
92132
93-
build:
133+
build-android:
94134
needs: detect-changes
95-
if: needs.detect-changes.outputs.apps != '[]' && needs.detect-changes.outputs.apps != ''
135+
if: needs.detect-changes.outputs.android_apps != '[]' && needs.detect-changes.outputs.android_apps != ''
96136
runs-on: ubuntu-latest
97137
strategy:
98138
fail-fast: false
99139
matrix:
100-
app: ${{ fromJSON(needs.detect-changes.outputs.apps) }}
140+
app: ${{ fromJSON(needs.detect-changes.outputs.android_apps) }}
101141
concurrency:
102142
group: android-${{ matrix.app }}-${{ github.ref }}
103143
cancel-in-progress: true
@@ -111,3 +151,25 @@ jobs:
111151
with:
112152
app-path: apps/${{ matrix.app }}
113153
expo-prebuild: ${{ matrix.app == 'bare-rn' && 'false' || 'true' }}
154+
155+
build-ios:
156+
needs: detect-changes
157+
if: needs.detect-changes.outputs.ios_apps != '[]' && needs.detect-changes.outputs.ios_apps != ''
158+
runs-on: macos-latest
159+
strategy:
160+
fail-fast: false
161+
matrix:
162+
app: ${{ fromJSON(needs.detect-changes.outputs.ios_apps) }}
163+
concurrency:
164+
group: ios-${{ matrix.app }}-${{ github.ref }}
165+
cancel-in-progress: true
166+
steps:
167+
- name: Checkout
168+
uses: actions/checkout@v6
169+
with:
170+
submodules: recursive
171+
- name: Build iOS app
172+
uses: ./.github/actions/build-ios-app
173+
with:
174+
app-path: apps/${{ matrix.app }}
175+
expo-prebuild: ${{ matrix.app == 'bare-rn' && 'false' || 'true' }}

.github/workflows/build-ios.yml

Lines changed: 0 additions & 113 deletions
This file was deleted.

0 commit comments

Comments
 (0)