Skip to content

Commit 0c8a4f9

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

7 files changed

Lines changed: 164 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: 70 additions & 72 deletions
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,17 @@ concurrency:
1010
group: pr-${{ github.event.pull_request.number }}
1111
cancel-in-progress: true
1212

13+
ios_env: &ios_env
14+
USE_CCACHE: 1
15+
CCACHE_DIR: ${{ github.workspace }}/.ios_ccache
16+
CCACHE_BASEDIR: ${{ github.workspace }}
17+
CCACHE_COMPRESS: '1'
18+
1319
jobs:
1420
build-lint:
1521
name: Build & static code analysis
1622
runs-on: ubuntu-latest
1723
steps:
18-
- name: Checkout
19-
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6
20-
2124
- name: Setup
2225
uses: ./.github/actions/setup
2326

@@ -30,74 +33,50 @@ jobs:
3033
- name: Typecheck files
3134
run: yarn typecheck
3235

33-
- name: Test Brownfield CLI
36+
- name: Test Brownfield CLI (version)
3437
run: |
3538
yarn workspace @callstack/react-native-brownfield brownfield --version
3639
3740
android:
38-
name: 'Android: integrated tester & integration workflow with CLI'
41+
name: Android road tests
3942
runs-on: ubuntu-latest
4043
needs: build-lint
4144

4245
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'
46+
- name: Setup
47+
uses: ./.github/actions/setup
7248

73-
- name: Install dependencies
74-
run: yarn install
49+
- name: Prepare Android environment
50+
uses: ./.github/actions/prepare-android
7551

76-
- name: Build packages
77-
run: yarn build
78-
79-
- name: Restore android build cache
52+
- name: Restore Android build cache
8053
uses: actions/cache@9255dc7a253b0ccc959486e2bca901246202afeb # v5
8154
with:
8255
path: |
8356
apps/TesterIntegrated/kotlin/build
8457
apps/TesterIntegrated/kotlin/app/.cxx
8558
apps/TesterIntegrated/kotlin/app/build
86-
key: ${{ runner.os }}-tester-android-build-${{ github.sha }}
59+
apps/RNApp/android/build
60+
apps/RNApp/android/app/.cxx
61+
apps/RNApp/android/app/build
62+
apps/AndroidApp/build
63+
apps/AndroidApp/app/build
64+
apps/AndroidApp/app/.cxx
65+
key: ${{ runner.os }}-android-build-road-tests-${{ github.sha }}
8766
restore-keys: |
88-
${{ runner.os }}-tester-android-build-
67+
${{ runner.os }}-android-build-road-tests-
8968
9069
- name: Restore Gradle cache
9170
uses: actions/cache@9255dc7a253b0ccc959486e2bca901246202afeb # v5
9271
with:
9372
path: |
9473
~/.gradle/caches
9574
~/.gradle/wrapper
96-
key: ${{ runner.os }}-tester-integrated-android-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
75+
key: ${{ runner.os }}-android-ci-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
9776
restore-keys: |
98-
${{ runner.os }}-tester-integrated-android-gradle-
77+
${{ runner.os }}-android-ci-gradle-
9978
100-
# == IntegratedTester ==
79+
# == TesterIntegrated ==
10180

10281
- name: Generate Brownie stores
10382
run: yarn run brownfield:codegen
@@ -130,59 +109,73 @@ jobs:
130109
yarn run build:example:android-consumer
131110
132111
ios:
133-
name: Integrated tester iOS App
134-
runs-on: macos-latest
112+
name: iOS road tests
113+
runs-on: macos-26
135114
needs: build-lint
136115

116+
env: *ios_env
117+
137118
steps:
138-
- name: Checkout
139-
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6
119+
- name: Setup
120+
uses: ./.github/actions/setup
140121

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

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

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

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

164-
- name: Restore Pods cache
142+
- name: Restore Pods cache (TesterIntegrated)
165143
uses: actions/cache@9255dc7a253b0ccc959486e2bca901246202afeb # v5
166144
with:
167145
path: |
168146
apps/TesterIntegrated/swift/Pods
169-
key: ${{ runner.os }}-tester-ios-pods-${{ hashFiles('apps/TesterIntegrated/swift/Podfile.lock') }}
147+
key: ${{ runner.os }}-tester-integrated-ios-pods-${{ hashFiles('apps/TesterIntegrated/swift/Podfile.lock') }}
170148
restore-keys: |
171-
${{ runner.os }}-tester-ios-pods-
149+
${{ runner.os }}-tester-integrated-ios-pods-
172150
173-
- name: Install pods
151+
- name: Install pods (TesterIntegrated)
174152
run: |
175153
cd apps/TesterIntegrated/swift
176154
pod install
177155
178-
# == IntegratedTester ==
156+
- name: Restore DerivedData cache
157+
uses: actions/cache@v5
158+
with:
159+
path: apps/TesterIntegrated/swift/build
160+
key: ${{ runner.os }}-ios-tester-integrated-derived-data-${{ hashFiles('**/Podfile.lock', '**/Gemfile.lock', '**/package.json', '**/bun.lockb') }}
161+
restore-keys: |
162+
${{ runner.os }}-ios-tester-integrated-derived-data-
179163
180164
- name: Build integrated iOS tester app
181165
run: |
182166
yarn run build:tester-integrated:ios
183167
184168
# == RNApp ==
185169

170+
- name: Restore Pods cache (RNApp)
171+
uses: actions/cache@9255dc7a253b0ccc959486e2bca901246202afeb # v5
172+
with:
173+
path: |
174+
apps/RNApp/ios/Pods
175+
key: ${{ runner.os }}-rnapp-ios-pods-${{ hashFiles('apps/RNApp/ios/Podfile.lock') }}
176+
restore-keys: |
177+
${{ runner.os }}-rnapp-ios-pods-
178+
186179
- name: Install pods (RNApp)
187180
run: |
188181
cd apps/RNApp/ios
@@ -198,3 +191,8 @@ jobs:
198191
- name: Build Brownfield iOS native app
199192
run: |
200193
yarn run build:example:ios-consumer
194+
195+
# ==============
196+
197+
- name: Report ccache usage
198+
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)