Skip to content

Commit 2a81d20

Browse files
committed
ci: refactor and add caching, use macOS-26 image for iOS
1 parent ac4efd6 commit 2a81d20

7 files changed

Lines changed: 162 additions & 104 deletions

File tree

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
name: Prepare Android environment
2+
description: Prepare Android environment and set up the project
3+
4+
inputs:
5+
free-disk-space:
6+
description: 'Whether to free disk space on the runner'
7+
required: false
8+
default: 'true'
9+
10+
run-yarn-build:
11+
description: 'Whether to run yarn build'
12+
required: false
13+
default: 'true'
14+
15+
runs:
16+
using: composite
17+
steps:
18+
- name: Validate Gradle Wrapper
19+
uses: gradle/actions/wrapper-validation@6f229686ee4375cc4a86b2514c89bac4930e82c4 # v5
20+
21+
- name: Setup Java
22+
uses: actions/setup-java@5d7b2146334bacf88728daaa70414a99f5164e0f # v5
23+
with:
24+
distribution: 'zulu'
25+
java-version: '17'
26+
27+
- name: Free Disk Space (Ubuntu)
28+
if: inputs.free-disk-space == 'true'
29+
uses: jlumbroso/free-disk-space@54081f138730dfa15788a46383842cd2f914a1be # v1.3.1
30+
with:
31+
tool-cache: false
32+
33+
android: false
34+
dotnet: true
35+
haskell: true
36+
large-packages: true
37+
docker-images: true
38+
swap-storage: true
39+
40+
- name: Build packages
41+
if: inputs.run-yarn-build == 'true'
42+
run: yarn build
43+
shell: bash
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
name: Prepare iOS environment
2+
description: Prepare iOS environment and set up the project
3+
4+
inputs:
5+
run-yarn-build:
6+
description: 'Whether to run yarn build'
7+
required: false
8+
default: 'true'
9+
10+
runs:
11+
using: composite
12+
steps:
13+
- name: Use appropriate Xcode version
14+
uses: maxim-lobanov/setup-xcode@60606e260d2fc5762a71e64e74b2174e8ea3c8bd # v1.6.0
15+
with:
16+
xcode-version: '26'
17+
18+
- name: Setup Ruby
19+
uses: ruby/setup-ruby@5dd816ae0186f20dfa905997a64104db9a8221c7 # v1.280.0
20+
with:
21+
ruby-version: '3.2'
22+
bundler-cache: true
23+
24+
- name: Build packages
25+
if: inputs.run-yarn-build == 'true'
26+
run: yarn build
27+
shell: bash

.github/actions/setup/action.yml

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,30 @@
11
name: Setup
22
description: Setup Node.js and install dependencies
33

4+
inputs:
5+
restore-turbo-cache:
6+
description: 'Whether to restore the Turbo cache'
7+
required: false
8+
default: 'true'
9+
410
runs:
511
using: composite
612
steps:
13+
- name: Checkout
14+
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6
15+
716
- name: Setup Node.js
817
uses: actions/setup-node@65d868f8d4d85d7d4abb7de0875cde3fcc8798f5 # v6
918
with:
1019
node-version: 'lts/*'
1120
cache: 'yarn'
1221

13-
- name: Restore turbo cache
22+
- name: Install dependencies
23+
run: yarn install
24+
shell: bash
25+
26+
- name: Restore Turbo cache
27+
if: inputs.restore-turbo-cache == 'true'
1428
uses: actions/cache@9255dc7a253b0ccc959486e2bca901246202afeb # v5
1529
with:
1630
path: |
@@ -20,7 +34,4 @@ runs:
2034
key: ${{ runner.os }}-turbo-${{ hashFiles('.turbo', '**/.turbo') }}
2135
restore-keys: |
2236
${{ runner.os }}-turbo-
23-
24-
- name: Install dependencies
25-
run: yarn install
2637
shell: bash

.github/workflows/ci.yml

Lines changed: 68 additions & 72 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,6 @@ jobs:
1515
name: Build & static code analysis
1616
runs-on: ubuntu-latest
1717
steps:
18-
- name: Checkout
19-
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6
20-
2118
- name: Setup
2219
uses: ./.github/actions/setup
2320

@@ -30,74 +27,50 @@ jobs:
3027
- name: Typecheck files
3128
run: yarn typecheck
3229

33-
- name: Test Brownfield CLI
30+
- name: Test Brownfield CLI (version)
3431
run: |
3532
yarn workspace @callstack/react-native-brownfield brownfield --version
3633
3734
android:
38-
name: 'Android: integrated tester & integration workflow with CLI'
35+
name: Android road tests
3936
runs-on: ubuntu-latest
4037
needs: build-lint
4138

4239
steps:
43-
- name: Checkout
44-
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6
45-
46-
- name: Validate Gradle Wrapper
47-
uses: gradle/actions/wrapper-validation@6f229686ee4375cc4a86b2514c89bac4930e82c4 # v5
48-
49-
- name: Setup Java
50-
uses: actions/setup-java@5d7b2146334bacf88728daaa70414a99f5164e0f # v5
51-
with:
52-
distribution: 'zulu'
53-
java-version: '17'
54-
55-
- name: Free Disk Space (Ubuntu)
56-
uses: jlumbroso/free-disk-space@54081f138730dfa15788a46383842cd2f914a1be # v1.3.1
57-
with:
58-
tool-cache: false
59-
60-
android: false
61-
dotnet: true
62-
haskell: true
63-
large-packages: true
64-
docker-images: true
65-
swap-storage: true
66-
67-
- name: Setup Node.js
68-
uses: actions/setup-node@65d868f8d4d85d7d4abb7de0875cde3fcc8798f5 # v6
69-
with:
70-
node-version: 'lts/*'
71-
cache: 'yarn'
72-
73-
- name: Install dependencies
74-
run: yarn install
40+
- name: Setup
41+
uses: ./.github/actions/setup
7542

76-
- name: Build packages
77-
run: yarn build
43+
- name: Prepare Android environment
44+
uses: ./.github/actions/prepare-android
7845

79-
- name: Restore android build cache
46+
- name: Restore Android build cache
8047
uses: actions/cache@9255dc7a253b0ccc959486e2bca901246202afeb # v5
8148
with:
8249
path: |
8350
apps/TesterIntegrated/kotlin/build
8451
apps/TesterIntegrated/kotlin/app/.cxx
8552
apps/TesterIntegrated/kotlin/app/build
86-
key: ${{ runner.os }}-tester-android-build-${{ github.sha }}
53+
apps/RNApp/android/build
54+
apps/RNApp/android/app/.cxx
55+
apps/RNApp/android/app/build
56+
apps/AndroidApp/build
57+
apps/AndroidApp/app/build
58+
apps/AndroidApp/app/.cxx
59+
key: ${{ runner.os }}-android-build-road-tests-${{ github.sha }}
8760
restore-keys: |
88-
${{ runner.os }}-tester-android-build-
61+
${{ runner.os }}-android-build-road-tests-
8962
9063
- name: Restore Gradle cache
9164
uses: actions/cache@9255dc7a253b0ccc959486e2bca901246202afeb # v5
9265
with:
9366
path: |
9467
~/.gradle/caches
9568
~/.gradle/wrapper
96-
key: ${{ runner.os }}-tester-integrated-android-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
69+
key: ${{ runner.os }}-android-ci-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
9770
restore-keys: |
98-
${{ runner.os }}-tester-integrated-android-gradle-
71+
${{ runner.os }}-android-ci-gradle-
9972
100-
# == IntegratedTester ==
73+
# == TesterIntegrated ==
10174

10275
- name: Generate Brownie stores
10376
run: yarn run brownfield:codegen
@@ -130,59 +103,77 @@ jobs:
130103
yarn run build:example:android-consumer
131104
132105
ios:
133-
name: Integrated tester iOS App
134-
runs-on: macos-latest
106+
name: iOS road tests
107+
runs-on: macos-26
135108
needs: build-lint
136109

110+
env:
111+
USE_CCACHE: 1
112+
CCACHE_DIR: ${{ github.workspace }}/.ios_ccache
113+
CCACHE_BASEDIR: ${{ github.workspace }}
114+
CCACHE_COMPRESS: '1'
115+
137116
steps:
138-
- name: Checkout
139-
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6
117+
- name: Setup
118+
uses: ./.github/actions/setup
140119

141-
- name: Use appropriate Xcode version
142-
uses: maxim-lobanov/setup-xcode@60606e260d2fc5762a71e64e74b2174e8ea3c8bd # v1.6.0
143-
with:
144-
xcode-version: '16'
120+
- name: Prepare iOS environment
121+
uses: ./.github/actions/prepare-ios
145122

146-
- name: Setup Node.js
147-
uses: actions/setup-node@65d868f8d4d85d7d4abb7de0875cde3fcc8798f5 # v6
148-
with:
149-
node-version: 'lts/*'
150-
cache: 'yarn'
123+
- name: Install ccache
124+
run: brew install ccache
151125

152-
- name: Setup Ruby
153-
uses: ruby/setup-ruby@5dd816ae0186f20dfa905997a64104db9a8221c7 # v1.280.0
154-
with:
155-
ruby-version: '3.2'
156-
bundler-cache: true
126+
- name: Enable ccache
127+
run: echo "$(brew --prefix)/opt/ccache/libexec" >> $GITHUB_PATH
157128

158-
- name: Install dependencies
159-
run: yarn install
129+
- name: Restore TesterIntegrated ccache
130+
uses: actions/cache@9255dc7a253b0ccc959486e2bca901246202afeb # v5
131+
with:
132+
path: |
133+
.ios_ccache
134+
key: ${{ runner.os }}-tester-integrated-ios-ccache-${{ hashFiles('apps/TesterIntegrated/swift/Podfile.lock', 'apps/TesterIntegrated/swift/SwiftExample.xcodeproj/project.pbxproj') }}
135+
restore-keys: |
136+
${{ runner.os }}-tester-integrated-ios-ccache-
160137
161-
- name: Build packages
162-
run: yarn build
138+
# == TesterIntegrated ==
163139

164-
- name: Restore Pods cache
140+
- name: Restore Pods cache (TesterIntegrated)
165141
uses: actions/cache@9255dc7a253b0ccc959486e2bca901246202afeb # v5
166142
with:
167143
path: |
168144
apps/TesterIntegrated/swift/Pods
169-
key: ${{ runner.os }}-tester-ios-pods-${{ hashFiles('apps/TesterIntegrated/swift/Podfile.lock') }}
145+
key: ${{ runner.os }}-tester-integrated-ios-pods-${{ hashFiles('apps/TesterIntegrated/swift/Podfile.lock') }}
170146
restore-keys: |
171-
${{ runner.os }}-tester-ios-pods-
147+
${{ runner.os }}-tester-integrated-ios-pods-
172148
173-
- name: Install pods
149+
- name: Install pods (TesterIntegrated)
174150
run: |
175151
cd apps/TesterIntegrated/swift
176152
pod install
177153
178-
# == IntegratedTester ==
154+
- name: Restore DerivedData cache
155+
uses: actions/cache@v5
156+
with:
157+
path: apps/TesterIntegrated/swift/build
158+
key: ${{ runner.os }}-ios-tester-integrated-derived-data-${{ hashFiles('**/Podfile.lock', '**/Gemfile.lock', '**/package.json', '**/bun.lockb') }}
159+
restore-keys: |
160+
${{ runner.os }}-ios-tester-integrated-derived-data-
179161
180162
- name: Build integrated iOS tester app
181163
run: |
182164
yarn run build:tester-integrated:ios
183165
184166
# == RNApp ==
185167

168+
- name: Restore Pods cache (RNApp)
169+
uses: actions/cache@9255dc7a253b0ccc959486e2bca901246202afeb # v5
170+
with:
171+
path: |
172+
apps/RNApp/ios/Pods
173+
key: ${{ runner.os }}-rnapp-ios-pods-${{ hashFiles('apps/RNApp/ios/Podfile.lock') }}
174+
restore-keys: |
175+
${{ runner.os }}-rnapp-ios-pods-
176+
186177
- name: Install pods (RNApp)
187178
run: |
188179
cd apps/RNApp/ios
@@ -198,3 +189,8 @@ jobs:
198189
- name: Build Brownfield iOS native app
199190
run: |
200191
yarn run build:example:ios-consumer
192+
193+
# ==============
194+
195+
- name: Report ccache usage
196+
run: ccache -s

.github/workflows/deploy-docs.yml

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -20,20 +20,12 @@ jobs:
2020
build:
2121
runs-on: ubuntu-latest
2222
steps:
23-
- name: Checkout
24-
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6
25-
with:
26-
fetch-depth: 0 # Not needed if lastUpdated is not enabled
2723
- name: Setup
2824
uses: ./.github/actions/setup
2925

3026
- name: Setup Pages
3127
uses: actions/configure-pages@d5606572c479bee637007364c6b4800ac4fc8573 # v5
3228

33-
- name: Install dependencies
34-
working-directory: docs
35-
run: yarn install
36-
3729
- name: Build with Rspress
3830
working-directory: docs
3931
run: |

.github/workflows/gradle-plugin-lint.yml

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -15,14 +15,11 @@ jobs:
1515
- name: Checkout repository
1616
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6
1717

18-
- name: Validate Gradle Wrapper
19-
uses: gradle/actions/wrapper-validation@6f229686ee4375cc4a86b2514c89bac4930e82c4 # v5
20-
21-
- name: Set up JDK
22-
uses: actions/setup-java@5d7b2146334bacf88728daaa70414a99f5164e0f # v5
18+
- name: Prepare Android environment
19+
uses: ./.github/actions/prepare-android
2320
with:
24-
distribution: temurin
25-
java-version: 17
21+
free-disk-space: 'false'
22+
run-yarn-build: 'false'
2623

2724
- name: Restore Gradle cache
2825
uses: actions/cache@9255dc7a253b0ccc959486e2bca901246202afeb # v5

0 commit comments

Comments
 (0)