-
Notifications
You must be signed in to change notification settings - Fork 643
612 lines (612 loc) · 22.8 KB
/
build.yml
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
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
name: facebook/hermes/build
on:
push:
pull_request:
branches:
- main
jobs:
android:
runs-on: ubuntu-latest
env:
HERMES_WS_DIR: ${{ github.workspace }}
steps:
- name: Set up workspace and install dependencies
run: |-
yes | sdkmanager "cmake;3.22.1" &
sudo apt update && sudo apt install -y libicu-dev
- uses: actions/checkout@v4.1.0
with:
path: hermes
- name: Build Hermes Compiler
run: |-
cmake -S hermes -B build
# Build the Hermes compiler so that the cross compiler build can
# access it to build the VM
cmake --build ./build --target hermesc -j 4
- name: Build Hermes for Android
run: |-
cd hermes/android
./gradlew githubRelease
- name: Copy artifacts
run: |-
mkdir output
cp build_android/distributions/hermes-runtime-android-*.tar.gz output
- name: Checksum artifacts
run: |-
cd output
for file in *
do
sha256sum "$file" > "$file.sha256"
done
- uses: actions/upload-artifact@v4.3.1
with:
name: android-hermes
path: output
linux:
runs-on: ubuntu-22.04
steps:
- name: Install dependencies
run: |-
sudo apt update
sudo apt install -y git openssh-client cmake build-essential \
libreadline-dev libicu-dev zip python3
- uses: actions/checkout@v4.1.0
with:
path: hermes
- name: Build linux CLI
run: |-
cmake -S hermes -B build_hdb -DHERMES_STATIC_LINK=ON -DCMAKE_BUILD_TYPE=Release \
-DCMAKE_CXX_FLAGS=-s -DCMAKE_C_FLAGS=-s \
-DCMAKE_EXE_LINKER_FLAGS="-Wl,--whole-archive -lpthread -Wl,--no-whole-archive"
cmake -S hermes -B build -DHERMES_STATIC_LINK=ON -DCMAKE_BUILD_TYPE=Release \
-DCMAKE_CXX_FLAGS=-s -DCMAKE_C_FLAGS=-s \
-DCMAKE_EXE_LINKER_FLAGS="-Wl,--whole-archive -lpthread -Wl,--no-whole-archive" \
-DHERMES_ENABLE_DEBUGGER=False
cmake --build build_hdb --target hdb
cmake --build build --target check-hermes hermes hvm hbcdump hermesc
- name: Create CLI tarball
run: |-
mkdir output staging
cp build/bin/hermes build/bin/hvm build/bin/hbcdump \
build/bin/hermesc build_hdb/bin/hdb staging
tar -C staging -czvf output/${TAR_NAME} .
shasum -a 256 output/${TAR_NAME} > output/${TAR_NAME}.sha256
env:
TAR_NAME: hermes-cli-linux.tar.gz
- uses: actions/upload-artifact@v4.3.1
with:
name: linux-hermes
path: output
macos:
runs-on: macos-latest
steps:
- uses: maxim-lobanov/setup-xcode@v1
with:
xcode-version: 15.4
- uses: actions/checkout@v4.1.0
with:
path: hermes
- name: Install dependencies
run: brew install cmake ninja
- name: Build macOS CLI
run: |-
cmake -S hermes -B build -G Ninja ${RELEASE_FLAGS} -DHERMES_ENABLE_DEBUGGER=False
cmake --build ./build --target hermes hvm hbcdump hermesc check-hermes
cmake -S hermes -B build_hdb -G Ninja ${RELEASE_FLAGS}
cmake --build ./build_hdb --target hdb check-hermes
env:
RELEASE_FLAGS: "-DCMAKE_BUILD_TYPE=Release -DCMAKE_INTERPROCEDURAL_OPTIMIZATION=True -DCMAKE_OSX_ARCHITECTURES=x86_64;arm64 \\ -DBUILD_SHARED_LIBS=OFF -DHERMES_BUILD_SHARED_JSI=OFF"
- name: Create CLI tarball
run: |-
mkdir output staging
cp build/bin/hermes build/bin/hvm build/bin/hbcdump \
build/bin/hermesc build_hdb/bin/hdb staging
tar -C staging -czvf output/${TAR_NAME} .
shasum -a 256 output/${TAR_NAME} > output/${TAR_NAME}.sha256
env:
TAR_NAME: hermes-cli-darwin.tar.gz
- uses: actions/upload-artifact@v4.3.1
with:
name: macos-hermes
path: output
build-apple-runtime:
runs-on: macos-latest
env:
TERM: dumb
HERMES_WS_DIR: "/tmp/hermes"
HOMEBREW_NO_AUTO_UPDATE: 1
steps:
- uses: maxim-lobanov/setup-xcode@v1
with:
xcode-version: 15.4
- uses: actions/checkout@v4.1.0
- name: Cache setup
uses: actions/cache@v4.0.0
with:
key: v4-repo-${{ github.sha }}
path: |-
build_iphoneos
build_catalyst
build_iphonesimulator
build_macosx
destroot
- name: Set up workspace
run: mkdir -p /tmp/hermes/output
- name: Install dependencies
run: |-
brew install cmake ninja
sudo gem install cocoapods
- name: Build the iOS frameworks
run: "./utils/build-ios-framework.sh"
- name: Build the Mac frameworks
run: "./utils/build-mac-framework.sh"
test-macos:
runs-on: macos-latest
steps:
- uses: maxim-lobanov/setup-xcode@v1
with:
xcode-version: 15.4
- uses: actions/checkout@v4.1.0
with:
path: hermes
- name: Install dependencies
run: brew install cmake
- name: Run MacOS regression tests in debug mode
run: |-
cmake -S hermes -B build -GXcode
cmake --build ./build
cmake --build ./build --target check-hermes
test-apple-runtime:
runs-on: macos-latest
needs: build-apple-runtime
env:
TERM: dumb
HERMES_WS_DIR: "/tmp/hermes"
HOMEBREW_NO_AUTO_UPDATE: 1
steps:
- uses: maxim-lobanov/setup-xcode@v1
with:
xcode-version: 15.4
- uses: actions/checkout@v4.1.0
- name: Cache setup
uses: actions/cache@v4.0.0
with:
key: v4-repo-${{ github.sha }}
path: |-
build_iphoneos
build_catalyst
build_iphonesimulator
build_macosx
destroot
- name: Install dependencies
run: brew install cmake ninja && xcodebuild -downloadPlatform visionOS && xcodebuild -downloadPlatform tvOS
- name: Build the test application
run: pod install
working-directory: test/ApplePlatformsIntegrationTestApp
- name: Test MacOS application
run: |-
xcodebuild test \
-workspace ApplePlatformsIntegrationTests.xcworkspace \
-configuration Debug \
-destination 'platform=macOS' \
-scheme ApplePlatformsIntegrationMacTests
working-directory: test/ApplePlatformsIntegrationTestApp
- name: Test iPhone application
run: |-
# Xcode 15 uses iOS 17 for simulator, and only iPhone 14/15 can work by
# default, so use the oldest working model here.
xcodebuild test \
-workspace ApplePlatformsIntegrationTests.xcworkspace \
-configuration Debug \
-destination 'platform=iOS Simulator,name=iPhone 14' \
-scheme ApplePlatformsIntegrationMobileTests
working-directory: test/ApplePlatformsIntegrationTestApp
- name: Test Apple Vision application
run: |-
xcodebuild test \
-workspace ApplePlatformsIntegrationTests.xcworkspace \
-configuration Debug \
-destination 'platform=visionOS Simulator,name=Apple Vision Pro' \
-scheme ApplePlatformsIntegrationVisionOSTests
working-directory: test/ApplePlatformsIntegrationTestApp
- name: Test Apple TV application
run: |-
xcodebuild test \
-workspace ApplePlatformsIntegrationTests.xcworkspace \
-configuration Debug \
-destination 'platform=tvOS Simulator,name=Apple TV' \
-scheme ApplePlatformsIntegrationTVOSTests
working-directory: test/ApplePlatformsIntegrationTestApp
package-apple-runtime:
runs-on: macos-latest
needs:
- test-macos
- test-apple-runtime
env:
TERM: dumb
HERMES_WS_DIR: "/tmp/hermes"
HOMEBREW_NO_AUTO_UPDATE: 1
steps:
- uses: maxim-lobanov/setup-xcode@v1
with:
xcode-version: 15.4
- uses: actions/checkout@v4.1.0
- name: Cache setup
uses: actions/cache@v4.0.0
with:
key: v4-repo-${{ github.sha }}
path: |-
build_iphoneos
build_catalyst
build_iphonesimulator
build_macosx
destroot
- name: Set up workspace
run: mkdir -p /tmp/hermes/output
- name: Install dependencies
run: |-
brew install cmake ninja
sudo gem install cocoapods
- name: Package the framework
run: |-
. ./utils/build-apple-framework.sh
mkdir -p /tmp/cocoapods-package-root/destroot
cp -R ./destroot /tmp/cocoapods-package-root
cp hermes-engine.podspec LICENSE /tmp/cocoapods-package-root
tar -C /tmp/cocoapods-package-root/ -czvf /tmp/hermes/output/hermes-runtime-darwin-v$(get_release_version).tar.gz .
- name: Checksum artifacts
run: |-
cd /tmp/hermes/output
for file in *
do
shasum -a 256 "$file" > "$file.sha256"
done
- uses: actions/upload-artifact@v4.3.1
with:
name: apple-runtime
path: /tmp/hermes/output/
windows:
runs-on: windows-2019
env:
HERMES_WS_DIR: C:\tmp\hermes
ICU_URL: https://github.com/unicode-org/icu/releases/download/release-64-2/icu4c-64_2-Win64-MSVC2017.zip
MSBUILD_DIR: C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\MSBuild\Current\Bin
CMAKE_DIR: C:\Program Files\CMake\bin
RELEASE_FLAGS: "-DCMAKE_BUILD_TYPE=Release -DCMAKE_INTERPROCEDURAL_OPTIMIZATION=True -DHERMES_ENABLE_WIN10_ICU_FALLBACK=OFF"
TAR_NAME: hermes-cli-windows.tar.gz
steps:
- uses: actions/checkout@v4.1.0
- name: Set up workspace
run: |-
New-Item -ItemType Directory $Env:HERMES_WS_DIR
New-Item -ItemType Directory $Env:HERMES_WS_DIR\icu
New-Item -ItemType Directory $Env:HERMES_WS_DIR\staging
New-Item -ItemType Directory $Env:HERMES_WS_DIR\output
New-Item -ItemType SymbolicLink -Target $Env:GITHUB_WORKSPACE -Path $Env:HERMES_WS_DIR -Name hermes
- name: Download ICU
run: |-
cd $Env:HERMES_WS_DIR\icu
# If Invoke-WebRequest shows a progress bar, it will fail with
# Win32 internal error "Access is denied" 0x5 occurred [...]
$progressPreference = 'silentlyContinue'
Invoke-WebRequest -Uri "$Env:ICU_URL" -OutFile "icu.zip"
Expand-Archive -Path "icu.zip" -DestinationPath "."
- name: Setup cmake
uses: jwlawson/actions-setup-cmake@v2.0.0
with:
cmake-version: 3.14.7
- name: Setup python
uses: actions/setup-python@v5.0.0
with:
python-version: 3.12.1
- name: Assemble Windows runtime dependencies
run: |-
cd $Env:HERMES_WS_DIR
Copy-Item -Path "icu\bin64\icu*.dll" -Destination "staging"
# Include MSVC++ 2015 redistributables
Copy-Item -Path "c:\windows\system32\msvcp140.dll" -Destination "staging"
Copy-Item -Path "c:\windows\system32\vcruntime140.dll" -Destination "staging"
Copy-Item -Path "c:\windows\system32\vcruntime140_1.dll" -Destination "staging"
- name: Build Windows CLI
run: |-
$Env:PATH += ";$Env:MSBUILD_DIR"
$Env:ICU_ROOT = "$Env:HERMES_WS_DIR\icu"
cd $Env:HERMES_WS_DIR
cmake -S hermes -B build -G 'Visual Studio 16 2019' -Ax64 -DHERMES_ENABLE_DEBUGGER=False $Env:RELEASE_FLAGS
if (-not $?) { throw "Failed to configure Hermes" }
cmake -S hermes -B build_hdb -G 'Visual Studio 16 2019' -Ax64 $Env:RELEASE_FLAGS
if (-not $?) { throw "Failed to configure Hermes" }
cmake --build ./build --config Release -- -m /p:UseMultiToolTask=true -m /p:EnforceProcessCountAcrossBuilds=true
if (-not $?) { throw "Failed to build Hermes" }
cmake --build ./build_hdb --config Release --target hdb -- -m /p:UseMultiToolTask=true -m /p:EnforceProcessCountAcrossBuilds=true
if (-not $?) { throw "Failed to build Hermes" }
- name: Create CLI tarball
run: |-
cd $Env:HERMES_WS_DIR
Copy-Item -Path "build\bin\Release\hermes.exe" -Destination "staging"
Copy-Item -Path "build\bin\Release\hvm.exe" -Destination "staging"
Copy-Item -Path "build\bin\Release\hbcdump.exe" -Destination "staging"
Copy-Item -Path "build\bin\Release\hermesc.exe" -Destination "staging"
Copy-Item -Path "build_hdb\bin\Release\hdb.exe" -Destination "staging"
cd staging
cmake -E tar zcf ..\output\$Env:TAR_NAME .
- name: Checksum artifacts
run: |-
cd $Env:HERMES_WS_DIR\output
$hash = Get-FileHash -Path $Env:TAR_NAME -Algorithm SHA256
Write-Output ($hash.Hash + " " + $Env:TAR_NAME) |
Out-File -Encoding ASCII -FilePath ($Env:TAR_NAME +".sha256")
- uses: actions/upload-artifact@v4.3.1
with:
name: windows-hermes
path: c:\tmp\hermes\output
npm:
runs-on: ubuntu-20.04
needs:
- android
- linux
- package-apple-runtime
- windows
- macos
env:
YARN: yarnpkg
TERM: dumb
DEBIAN_FRONTEND: noninteractive
steps:
- uses: actions/setup-node@v4.0.2
- name: Print versions
run: |-
node --version
yarn --version
- name: Install dependencies and set up
run: mkdir -p /tmp/hermes/output
- uses: actions/checkout@v4.1.0
- uses: actions/download-artifact@v4.1.2
- name: Build NPM
run: |-
ls -lR
cd npm
cp ../macos-hermes/* .
cp ../windows-hermes/* .
cp ../android-hermes/* .
cp ../apple-runtime/* .
cp ../emscripten-hermes/* .
cp ../linux-hermes/* .
yarn install
yarn unpack-builds
yarn create-npms
- name: Copy artifacts
run: |-
cd npm
cp *.tgz /tmp/hermes/output
- name: Checksum artifacts
run: |-
cd /tmp/hermes/output
for file in *
do
sha256sum "$file" > "$file.sha256"
done
- uses: actions/upload-artifact@v4.3.1
with:
name: npm-hermes
path: /tmp/hermes/output
emscripten:
runs-on: ubuntu-20.04
container:
image: emscripten/emsdk:2.0.9
steps:
- name: Install dependencies
run: |-
apt update
apt install -y libicu-dev
- uses: actions/checkout@v4.1.0
with:
path: hermes
- name: Build Hermes Compiler
run: |-
cmake -S hermes -B build_host_hermesc
cmake --build ./build_host_hermesc --target hermesc -j 4
- name: Build Hermes with Emscripten for Website Playground
run: |-
echo LINKER_FLAGS: $LINKER_FLAGS
cmake -S hermes -B playground \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_EXE_LINKER_FLAGS="$LINKER_FLAGS" \
-DCMAKE_TOOLCHAIN_FILE="$EMSDK/upstream/emscripten/cmake/Modules/Platform/Emscripten.cmake" \
-DIMPORT_HERMESC="$PWD/build_host_hermesc/ImportHermesc.cmake"
cmake --build ./playground --target hermes -j 4
cmake --build ./playground --target hermesc -j 4
cmake --build ./playground --target emhermesc -j 4
EMHERMESC="$PWD/playground/bin/emhermesc.js" node ./hermes/tools/emhermesc/test.js
env:
LINKER_FLAGS: "-s WASM=1 \\ -s ALLOW_MEMORY_GROWTH=0 \\ -s TOTAL_MEMORY=33554432 \\ -s MODULARIZE=1 \\ -s EXPORT_NAME=createHermes \\ -s INVOKE_RUN=0 \\ -s EXIT_RUNTIME=1 \\ -s NODERAWFS=0 \\ -s EXTRA_EXPORTED_RUNTIME_METHODS=[callMain,FS]"
- name: Create Playground tarball
run: |-
mkdir output staging
cp ./playground/bin/hermes.js ./playground/bin/hermes.wasm staging
tar -C staging -czvf output/${TAR_NAME} .
shasum -a 256 output/${TAR_NAME} > output/${TAR_NAME}.sha256
env:
TAR_NAME: hermes-cli-emscripten.tar.gz
- uses: actions/upload-artifact@v4.3.1
with:
name: emscripten-hermes
path: output
sandbox:
runs-on: ubuntu-20.04
container:
image: emscripten/emsdk:3.1.39
env:
DEBIAN_FRONTEND: noninteractive
steps:
- name: Install dependencies
run: |-
apt update
apt install -y libicu-dev tzdata
wget https://github.com/WebAssembly/wabt/releases/download/1.0.33/wabt-1.0.33-ubuntu.tar.gz
tar -xvf ./wabt-1.0.33-ubuntu.tar.gz
- uses: actions/checkout@v4.1.0
with:
path: hermes
- name: Build Hermes with Emscripten
run: |-
# Generate the host compiler.
cmake -S hermes -B build_host
cmake --build ./build_host --target hermesc -j 4
# Generate and build the debug artefact.
cmake -S hermes -B build_wasm_dbg \
-DCMAKE_TOOLCHAIN_FILE=$EMSDK/upstream/emscripten/cmake/Modules/Platform/Emscripten.cmake \
-DIMPORT_HERMESC=build_host/ImportHermesc.cmake \
-DCMAKE_BUILD_TYPE=Debug -DHERMES_UNICODE_LITE=ON \
-DCMAKE_CXX_FLAGS=-O2 -DCMAKE_C_FLAGS=-O2 \
-DCMAKE_EXE_LINKER_FLAGS="-sALLOW_MEMORY_GROWTH=1 -sSTACK_SIZE=256KB" \
-DHERMES_ENABLE_DEBUGGER=OFF -DHERMES_SLOW_DEBUG=OFF
cmake --build build_wasm_dbg --target hermesSandboxImpl -j 4
./wabt-1.0.33/bin/wasm2c build_wasm_dbg/API/hermes_sandbox/hermesSandboxImpl.wasm -n hermes \
-o hermes/API/hermes_sandbox/external/hermes_sandbox_impl_dbg_compiled.c --num-outputs 8
# Generate and build the release artefact.
cmake -S hermes -B build_wasm_opt \
-DCMAKE_TOOLCHAIN_FILE=$EMSDK/upstream/emscripten/cmake/Modules/Platform/Emscripten.cmake \
-DIMPORT_HERMESC=build_host/ImportHermesc.cmake \
-DCMAKE_BUILD_TYPE=Release -DHERMES_UNICODE_LITE=ON \
-DCMAKE_EXE_LINKER_FLAGS="-sALLOW_MEMORY_GROWTH=1 -sSTACK_SIZE=256KB -g2" \
-DHERMES_ENABLE_DEBUGGER=OFF
cmake --build build_wasm_opt --target hermesSandboxImpl -j 4
./wabt-1.0.33/bin/wasm2c build_wasm_opt/API/hermes_sandbox/hermesSandboxImpl.wasm -n hermes \
-o hermes/API/hermes_sandbox/external/hermes_sandbox_impl_opt_compiled.c --num-outputs 8
- name: Build and test with the newly generated sandbox
run: |-
cmake -S hermes -B build_dbg -DCMAKE_BUILD_TYPE=Debug
cmake --build build_dbg -j 4
cmake --build build_dbg --target check-hermes -j 4
cmake -S hermes -B build_opt -DCMAKE_BUILD_TYPE=Release
cmake --build build_opt -j 4
cmake --build build_opt --target check-hermes -j 4
test-linux:
runs-on: ubuntu-20.04
steps:
- name: Install dependencies
run: |-
sudo apt update
sudo apt install -y git openssh-client cmake build-essential \
libicu-dev zip python3
- uses: actions/checkout@v4.1.0
with:
path: hermes
- name: Run Hermes regression tests
run: |-
cmake -S hermes -B build
cmake --build build --target check-hermes all -j 4
test-windows:
runs-on: windows-2019
steps:
- uses: actions/checkout@v4.1.0
with:
path: hermes
- name: Run Hermes regression tests
run: |-
cmake -S hermes -B build -G 'Visual Studio 16 2019'
cmake --build build --target check-hermes -- -m /p:UseMultiToolTask=true -m /p:EnforceProcessCountAcrossBuilds=true
test-e2e:
runs-on: ubuntu-22.04
env:
ANDROID_NDK: /usr/local/lib/android/sdk/ndk/27.1.12297006
HERMES_WS_DIR: /home/runner/work/hermes
REACT_NATIVE_OVERRIDE_HERMES_DIR: /home/runner/work/hermes/hermes
steps:
- name: Install Node
uses: actions/setup-node@v4.0.2
- name: Install JDK
uses: actions/setup-java@v3
with:
distribution: "temurin"
java-version: "17"
- name: Checkout Hermes
uses: actions/checkout@v4.1.0
- name: Checkout React Native
run: |-
cd "$HERMES_WS_DIR"
git clone --depth=1 https://github.com/facebook/react-native
cd react-native
yarn install
echo "console.log('Using Hermes: ' + (global.HermesInternal != null));" >> packages/rn-tester/js/RNTesterApp.android.js
- name: Run RNTester
uses: ReactiveCircus/android-emulator-runner@v2.30.1
with:
api-level: 29
ndk: 27.1.12297006
cmake: 3.22.1
script: |
cd ../react-native && ./gradlew -PreactNativeArchitectures=x86 :packages:rn-tester:android:app:installHermesRelease
adb shell am start com.facebook.react.uiapp/.RNTesterActivity
timeout 30s adb logcat -e "Using Hermes: true" -m 1
test-e2e-intl:
runs-on: ubuntu-22.04
env:
HERMES_WS_DIR: /home/runner/work/hermes
ANDROID_NDK: /usr/local/lib/android/sdk/ndk/27.1.12297006
steps:
- name: Checkout Hermes
uses: actions/checkout@v4.1.0
- name: Checkout Test262
run: |-
cd "$HERMES_WS_DIR"
git clone https://github.com/tc39/test262
cd test262
git checkout 62626e083bd506124aac6c799464d76c2c42851b
- name: Build Hermes Compiler
run: |-
cd "$HERMES_WS_DIR"
cmake -S hermes -B ./build -DCMAKE_BUILD_TYPE=Release
cmake --build ./build -j 4 --target hermesc
- name: Run android tests
uses: ReactiveCircus/android-emulator-runner@v2.30.1
with:
api-level: 29
emulator-options: -timezone Europe/Paris -no-snapshot-save -no-window -gpu swiftshader_indirect -noaudio -no-boot-anim -camera-back none
script: cd android && ./gradlew :intltest:prepareTests && ./gradlew -Pabis=x86 :intltest:connectedAndroidTest
test-macos-test262:
runs-on: macos-latest
steps:
- uses: maxim-lobanov/setup-xcode@v1
with:
xcode-version: 15.4
- uses: actions/checkout@v4.1.0
with:
path: hermes
- name: Setup dependencies
run: |-
brew install cmake ninja
# Check out test262 at a pinned revision to reduce flakiness
git clone https://github.com/tc39/test262
cd test262
git checkout 62626e083bd506124aac6c799464d76c2c42851b
- name: Run Hermes tests and test262 with Intl
run: |-
cmake -S hermes -B build -GNinja -DHERMES_ENABLE_INTL=ON
cmake --build ./build
cmake --build ./build --target check-hermes
python3 hermes/utils/testsuite/run_testsuite.py --test-intl test262/test -b build/bin
test-linux-test262:
runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@v4.1.0
with:
path: hermes
- name: Setup dependencies
run: |-
sudo apt update
sudo apt install -y git openssh-client cmake build-essential \
libreadline-dev libicu-dev zip python3
# Check out test262 at a pinned revision to reduce flakiness
git clone https://github.com/tc39/test262
cd test262
git checkout 62626e083bd506124aac6c799464d76c2c42851b
- name: Run test262 with Intl
run: |-
cmake -S hermes -B build -DHERMES_ENABLE_INTL=ON -DCMAKE_CXX_FLAGS=-O2 -DCMAKE_C_FLAGS=-O2
cmake --build ./build -j 4
# Not running Hermes test until more of Intl is built out:
# toLocaleLowerCase and toLocaleUpperCase are the two main ones.
# cmake --build ./build --target check-hermes -j 4
python3 hermes/utils/testsuite/run_testsuite.py --test-intl test262/test -b build/bin