-
-
Notifications
You must be signed in to change notification settings - Fork 20
221 lines (213 loc) · 9.48 KB
/
Copy pathbuild-native.yml
File metadata and controls
221 lines (213 loc) · 9.48 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
# Reusable workflow that builds every native artifact the npm packages ship:
#
# artifact name contents destination in the repo
# --------------------- ------------------------------------ ---------------------------------------------
# canvas-android canvas-release.aar packages/canvas/platforms/android/
# canvas-ios CanvasNative.xcframework (tar.gz) packages/canvas/platforms/ios/
# canvas-svg-android canvassvg-release.aar packages/canvas-svg/platforms/android/
# canvas-svg-ios CanvasSVG.xcframework (tar.gz) packages/canvas-svg/platforms/ios/
# audio-context-android audiocontext-release.aar packages/audio-context/platforms/android/
# audio-context-ios AudioContextNative.xcframework packages/audio-context/platforms/ios/
# (tar.gz)
#
# xcframeworks are tarred before upload because upload-artifact does not
# preserve file permissions.
#
# The canvas build mirrors the local flow:
# iOS: make ios && make visionos, then tools/scripts/canvas-build.sh
# (what `npm run build.canvas.ios.framework.release` runs, minus nx)
# Android: make android, then gradle :canvas:assembleRelease and copy the aar
#
# canvas-svg and audio-context change rarely, so their jobs cache the final
# artifact keyed on a hash of their sources and skip the whole build on a hit.
name: Build Native
on:
workflow_call:
inputs:
ref:
description: Git ref to build. Empty means the ref that triggered the caller.
required: false
type: string
default: ''
workflow_dispatch:
inputs:
ref:
description: Git ref to build
required: false
type: string
default: ''
env:
# bump to invalidate the canvas-svg / audio-context artifact caches
NATIVE_CACHE_VERSION: v1
jobs:
canvas-android:
name: Canvas Android
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v4
with:
ref: ${{ inputs.ref }}
- uses: ./.github/actions/setup-android-native
- name: Build Rust libraries
run: make android
- name: Build canvas AAR
working-directory: packages/canvas/src-native/canvas-android
run: ./gradlew :canvas:assembleRelease
- name: Copy AAR into platforms/android
run: cp packages/canvas/src-native/canvas-android/canvas/build/outputs/aar/canvas-release.aar packages/canvas/platforms/android/canvas-release.aar
- uses: actions/upload-artifact@v4
with:
name: canvas-android
path: packages/canvas/platforms/android/canvas-release.aar
if-no-files-found: error
canvas-ios:
name: Canvas iOS + visionOS
runs-on: macos-15
steps:
- uses: actions/checkout@v4
with:
ref: ${{ inputs.ref }}
- uses: ./.github/actions/setup-apple-native
- name: Build Rust libraries (iOS)
run: make ios
- name: Build Rust libraries (visionOS)
run: make visionos
# same as `npm run build.canvas.ios.framework.release`, without needing node_modules
- name: Build CanvasNative.xcframework
working-directory: tools/scripts
run: sh canvas-build.sh
- name: Pack xcframework
run: tar -czf canvas-ios.tar.gz -C packages/canvas/platforms/ios CanvasNative.xcframework
- uses: actions/upload-artifact@v4
with:
name: canvas-ios
path: canvas-ios.tar.gz
if-no-files-found: error
canvas-svg-android:
name: Canvas SVG Android
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v4
with:
ref: ${{ inputs.ref }}
- name: Restore cached AAR
id: svg-aar
uses: actions/cache@v4
with:
path: packages/canvas-svg/platforms/android/canvassvg-release.aar
key: ${{ env.NATIVE_CACHE_VERSION }}-canvas-svg-android-${{ hashFiles('crates/canvas-svg/**', 'crates/canvas-svg-android/**', 'packages/canvas-svg/src-native/android/**', '!packages/canvas-svg/src-native/android/**/build/**', '!packages/canvas-svg/src-native/android/**/jniLibs/**', 'Cargo.lock', 'tools/scripts/build-svg-android.sh', 'tools/scripts/copy-svg-android.sh', 'Makefile') }}
- uses: ./.github/actions/setup-android-native
if: steps.svg-aar.outputs.cache-hit != 'true'
- name: Build Rust libraries
if: steps.svg-aar.outputs.cache-hit != 'true'
run: make android-svg
- name: Copy .so files into jniLibs
if: steps.svg-aar.outputs.cache-hit != 'true'
run: sh tools/scripts/copy-svg-android.sh
- name: Build canvassvg AAR
if: steps.svg-aar.outputs.cache-hit != 'true'
working-directory: packages/canvas-svg/src-native/android
run: ./gradlew :canvassvg:assembleRelease
- name: Copy AAR into platforms/android
if: steps.svg-aar.outputs.cache-hit != 'true'
run: cp packages/canvas-svg/src-native/android/canvassvg/build/outputs/aar/canvassvg-release.aar packages/canvas-svg/platforms/android/canvassvg-release.aar
- uses: actions/upload-artifact@v4
with:
name: canvas-svg-android
path: packages/canvas-svg/platforms/android/canvassvg-release.aar
if-no-files-found: error
canvas-svg-ios:
name: Canvas SVG iOS + visionOS
runs-on: macos-15
steps:
- uses: actions/checkout@v4
with:
ref: ${{ inputs.ref }}
- name: Restore cached xcframework
id: svg-xcframework
uses: actions/cache@v4
with:
path: canvas-svg-ios.tar.gz
key: ${{ env.NATIVE_CACHE_VERSION }}-canvas-svg-ios-${{ hashFiles('crates/canvas-svg/**', 'crates/canvas-svg-ios/**', 'packages/canvas-svg/src-native/ios/**', '!packages/canvas-svg/src-native/ios/dist/**', 'Cargo.lock', 'tools/scripts/canvas-svg-build.sh', 'Makefile') }}
- uses: ./.github/actions/setup-apple-native
if: steps.svg-xcframework.outputs.cache-hit != 'true'
- name: Build Rust libraries (iOS + visionOS)
if: steps.svg-xcframework.outputs.cache-hit != 'true'
run: make svg
# same as `npm run build.canvas.svg.ios.framework.release`
- name: Build CanvasSVG.xcframework
if: steps.svg-xcframework.outputs.cache-hit != 'true'
working-directory: tools/scripts
run: sh canvas-svg-build.sh
- name: Pack xcframework
if: steps.svg-xcframework.outputs.cache-hit != 'true'
run: tar -czf canvas-svg-ios.tar.gz -C packages/canvas-svg/platforms/ios CanvasSVG.xcframework
- uses: actions/upload-artifact@v4
with:
name: canvas-svg-ios
path: canvas-svg-ios.tar.gz
if-no-files-found: error
audio-context-android:
name: AudioContext Android
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v4
with:
ref: ${{ inputs.ref }}
- name: Restore cached AAR
id: audio-aar
uses: actions/cache@v4
with:
path: packages/audio-context/platforms/android/audiocontext-release.aar
key: ${{ env.NATIVE_CACHE_VERSION }}-audio-context-android-${{ hashFiles('packages/audio-context/src-native/android/**', '!packages/audio-context/src-native/android/**/build/**') }}
- uses: actions/setup-java@v4
if: steps.audio-aar.outputs.cache-hit != 'true'
with:
distribution: temurin
java-version: '17'
cache: gradle
- name: Setup Android SDK
if: steps.audio-aar.outputs.cache-hit != 'true'
uses: android-actions/setup-android@v3
- name: Build audiocontext AAR
if: steps.audio-aar.outputs.cache-hit != 'true'
working-directory: packages/audio-context/src-native/android
run: ./gradlew :audiocontext:assembleRelease
- name: Copy AAR into platforms/android
if: steps.audio-aar.outputs.cache-hit != 'true'
run: cp packages/audio-context/src-native/android/audiocontext/build/outputs/aar/audiocontext-release.aar packages/audio-context/platforms/android/audiocontext-release.aar
- uses: actions/upload-artifact@v4
with:
name: audio-context-android
path: packages/audio-context/platforms/android/audiocontext-release.aar
if-no-files-found: error
audio-context-ios:
name: AudioContext iOS + visionOS
runs-on: macos-15
steps:
- uses: actions/checkout@v4
with:
ref: ${{ inputs.ref }}
- name: Restore cached xcframework
id: audio-xcframework
uses: actions/cache@v4
with:
path: audio-context-ios.tar.gz
key: ${{ env.NATIVE_CACHE_VERSION }}-audio-context-ios-${{ hashFiles('packages/audio-context/src-native/ios/**', 'tools/scripts/audio-context-build.sh') }}
- uses: ./.github/actions/setup-apple-native
if: steps.audio-xcframework.outputs.cache-hit != 'true'
with:
install-rust: 'false'
# same as `npm run build.audiocontext.ios.framework.release`
- name: Build AudioContextNative.xcframework
if: steps.audio-xcframework.outputs.cache-hit != 'true'
working-directory: tools/scripts
run: sh audio-context-build.sh
- name: Pack xcframework
if: steps.audio-xcframework.outputs.cache-hit != 'true'
run: tar -czf audio-context-ios.tar.gz -C packages/audio-context/platforms/ios AudioContextNative.xcframework
- uses: actions/upload-artifact@v4
with:
name: audio-context-ios
path: audio-context-ios.tar.gz
if-no-files-found: error