Skip to content

Commit a199227

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

7 files changed

Lines changed: 164 additions & 94 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: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,12 @@
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:
@@ -10,7 +16,12 @@ runs:
1016
node-version: 'lts/*'
1117
cache: 'yarn'
1218

13-
- name: Restore turbo cache
19+
- name: Install dependencies
20+
run: yarn install
21+
shell: bash
22+
23+
- name: Restore Turbo cache
24+
if: inputs.restore-turbo-cache == 'true'
1425
uses: actions/cache@9255dc7a253b0ccc959486e2bca901246202afeb # v5
1526
with:
1627
path: |
@@ -20,7 +31,4 @@ runs:
2031
key: ${{ runner.os }}-turbo-${{ hashFiles('.turbo', '**/.turbo') }}
2132
restore-keys: |
2233
${{ runner.os }}-turbo-
23-
24-
- name: Install dependencies
25-
run: yarn install
2634
shell: bash

.github/workflows/ci.yml

Lines changed: 69 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -30,74 +30,53 @@ jobs:
3030
- name: Typecheck files
3131
run: yarn typecheck
3232

33-
- name: Test Brownfield CLI
33+
- name: Test Brownfield CLI (version)
3434
run: |
3535
yarn workspace @callstack/react-native-brownfield brownfield --version
3636
3737
android:
38-
name: 'Android: integrated tester & integration workflow with CLI'
38+
name: Android road tests
3939
runs-on: ubuntu-latest
4040
needs: build-lint
4141

4242
steps:
4343
- name: Checkout
4444
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6
4545

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

76-
- name: Build packages
77-
run: yarn build
49+
- name: Prepare Android environment
50+
uses: ./.github/actions/prepare-android
7851

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,80 @@ 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:
117+
USE_CCACHE: 1
118+
CCACHE_DIR: ${{ github.workspace }}/.ios_ccache
119+
CCACHE_BASEDIR: ${{ github.workspace }}
120+
CCACHE_COMPRESS: '1'
121+
137122
steps:
138123
- name: Checkout
139124
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6
140125

141-
- name: Use appropriate Xcode version
142-
uses: maxim-lobanov/setup-xcode@60606e260d2fc5762a71e64e74b2174e8ea3c8bd # v1.6.0
143-
with:
144-
xcode-version: '16'
126+
- name: Setup
127+
uses: ./.github/actions/setup
145128

146-
- name: Setup Node.js
147-
uses: actions/setup-node@65d868f8d4d85d7d4abb7de0875cde3fcc8798f5 # v6
148-
with:
149-
node-version: 'lts/*'
150-
cache: 'yarn'
129+
- name: Prepare iOS environment
130+
uses: ./.github/actions/prepare-ios
151131

152-
- name: Setup Ruby
153-
uses: ruby/setup-ruby@5dd816ae0186f20dfa905997a64104db9a8221c7 # v1.280.0
154-
with:
155-
ruby-version: '3.2'
156-
bundler-cache: true
132+
- name: Install ccache
133+
run: brew install ccache
157134

158-
- name: Install dependencies
159-
run: yarn install
135+
- name: Enable ccache
136+
run: echo "$(brew --prefix)/opt/ccache/libexec" >> $GITHUB_PATH
160137

161-
- name: Build packages
162-
run: yarn build
138+
- name: Restore TesterIntegrated ccache
139+
uses: actions/cache@9255dc7a253b0ccc959486e2bca901246202afeb # v5
140+
with:
141+
path: |
142+
.ios_ccache
143+
key: ${{ runner.os }}-tester-integrated-ios-ccache-${{ hashFiles('apps/TesterIntegrated/swift/Podfile.lock', 'apps/TesterIntegrated/swift/SwiftExample.xcodeproj/project.pbxproj') }}
144+
restore-keys: |
145+
${{ runner.os }}-tester-integrated-ios-ccache-
163146
164-
- name: Restore Pods cache
147+
# == TesterIntegrated ==
148+
149+
- name: Restore Pods cache (TesterIntegrated)
165150
uses: actions/cache@9255dc7a253b0ccc959486e2bca901246202afeb # v5
166151
with:
167152
path: |
168153
apps/TesterIntegrated/swift/Pods
169-
key: ${{ runner.os }}-tester-ios-pods-${{ hashFiles('apps/TesterIntegrated/swift/Podfile.lock') }}
154+
key: ${{ runner.os }}-tester-integrated-ios-pods-${{ hashFiles('apps/TesterIntegrated/swift/Podfile.lock') }}
170155
restore-keys: |
171-
${{ runner.os }}-tester-ios-pods-
156+
${{ runner.os }}-tester-integrated-ios-pods-
172157
173-
- name: Install pods
158+
- name: Install pods (TesterIntegrated)
174159
run: |
175160
cd apps/TesterIntegrated/swift
176161
pod install
177162
178-
# == IntegratedTester ==
163+
- name: Restore DerivedData cache
164+
uses: actions/cache@v5
165+
with:
166+
path: apps/TesterIntegrated/swift/build
167+
key: ${{ runner.os }}-ios-tester-integrated-derived-data-${{ hashFiles('**/Podfile.lock', '**/Gemfile.lock', '**/package.json', '**/bun.lockb') }}
168+
restore-keys: |
169+
${{ runner.os }}-ios-tester-integrated-derived-data-
179170
180171
- name: Build integrated iOS tester app
181172
run: |
182173
yarn run build:tester-integrated:ios
183174
184175
# == RNApp ==
185176

177+
- name: Restore Pods cache (RNApp)
178+
uses: actions/cache@9255dc7a253b0ccc959486e2bca901246202afeb # v5
179+
with:
180+
path: |
181+
apps/RNApp/ios/Pods
182+
key: ${{ runner.os }}-rnapp-ios-pods-${{ hashFiles('apps/RNApp/ios/Podfile.lock') }}
183+
restore-keys: |
184+
${{ runner.os }}-rnapp-ios-pods-
185+
186186
- name: Install pods (RNApp)
187187
run: |
188188
cd apps/RNApp/ios
@@ -198,3 +198,8 @@ jobs:
198198
- name: Build Brownfield iOS native app
199199
run: |
200200
yarn run build:example:ios-consumer
201+
202+
# ==============
203+
204+
- name: Report ccache usage
205+
run: ccache -s

.github/workflows/deploy-docs.yml

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -22,18 +22,13 @@ jobs:
2222
steps:
2323
- name: Checkout
2424
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6
25-
with:
26-
fetch-depth: 0 # Not needed if lastUpdated is not enabled
25+
2726
- name: Setup
2827
uses: ./.github/actions/setup
2928

3029
- name: Setup Pages
3130
uses: actions/configure-pages@d5606572c479bee637007364c6b4800ac4fc8573 # v5
3231

33-
- name: Install dependencies
34-
working-directory: docs
35-
run: yarn install
36-
3732
- name: Build with Rspress
3833
working-directory: docs
3934
run: |

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

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -12,17 +12,14 @@ jobs:
1212
runs-on: ubuntu-latest
1313

1414
steps:
15-
- name: Checkout repository
15+
- name: Checkout
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

.github/workflows/release.yml

Lines changed: 7 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -9,23 +9,22 @@ concurrency: ${{ github.workflow }}-${{ github.ref }}
99

1010
jobs:
1111
release:
12+
environment:
13+
name: release
1214
permissions:
1315
contents: write
1416
id-token: write
1517
pull-requests: write
1618
name: Release
1719
runs-on: ubuntu-latest
1820
steps:
19-
- name: Checkout Repo
20-
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
21+
- name: Checkout
22+
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6
2123

22-
- name: Setup Node.js 20
23-
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
24+
- name: Setup
25+
uses: ./.github/actions/setup
2426
with:
25-
node-version: 20
26-
27-
- name: Install Dependencies
28-
run: yarn
27+
restore-turbo-cache: 'false' # in release workflow, build from scratch
2928

3029
- name: Create Release Pull Request or Publish to NPM
3130
uses: changesets/action@e9cc34b540dd3ad1b030c57fd97269e8f6ad905a # v1.4.9
@@ -34,7 +33,3 @@ jobs:
3433
publish: yarn publish-packages
3534
commit: 'chore(release): version packages'
3635
title: 'chore(release): version packages'
37-
env:
38-
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
39-
NPM_CONFIG_PROVENANCE: true
40-
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}

0 commit comments

Comments
 (0)