@@ -27,14 +27,19 @@ jobs:
2727 include :
2828 - os : macos-13 # x64
2929 rust-target : x86_64-apple-darwin
30+ node-target : darwin-x64
3031 - os : macos-14 # ARM
3132 rust-target : aarch64-apple-darwin
33+ node-target : darwin-arm64
3234 - os : ubuntu-24.04 # x64
3335 rust-target : x86_64-unknown-linux-musl
36+ node-target : linux-x64
3437 - os : ubuntu-24.04-arm # ARM
3538 rust-target : aarch64-unknown-linux-musl
39+ node-target : linux-arm64
3640 - os : windows-latest
3741 rust-target : x86_64-pc-windows-gnu
42+ node-target : win32-x64
3843
3944 runs-on : ${{matrix.os}}
4045
@@ -66,25 +71,24 @@ jobs:
6671 uses : dtolnay/rust-toolchain@master
6772 with :
6873 toolchain : stable
69- targets : ${{matrix.rust-target}}
74+ targets : ${{ matrix.rust-target }}
7075
7176 - name : Build rewatch
7277 if : steps.build-cache.outputs.cache-hit != 'true'
73- run : cargo build --manifest-path rewatch/Cargo.toml --target ${{matrix.rust-target}} --release
74-
75- - name : Copy rewatch exe to platform bin dir
7678 run : |
77- cp rewatch/target/${{matrix.rust-target}}/release/rewatch${{ runner.os == 'Windows' && '.exe' || '' }} rewatch
78- node ./scripts/copyExes.js -rewatch
79+ cargo build --manifest-path rewatch/Cargo.toml --target ${{ matrix.rust-target }} --release
7980
80- - name : Get artifact dir name
81- run : node .github/workflows/get_artifact_dir_name.js
81+ - name : Copy rewatch binary
82+ run : |
83+ cp rewatch/target/${{ matrix.rust-target }}/release/rewatch${{ runner.os == 'Windows' && '.exe' || '' }} rewatch.exe
84+ shell : bash
8285
8386 - name : " Upload artifact: rewatch binary"
8487 uses : actions/upload-artifact@v4
8588 with :
86- name : rewatch-${{env.artifact_dir_name}}
87- path : ${{ env.artifact_dir_name }}
89+ name : rewatch-${{ matrix.node-target }}
90+ path : rewatch.exe
91+ if-no-files-found : error
8892
8993 build-compiler :
9094 strategy :
@@ -95,21 +99,26 @@ jobs:
9599 ocaml_compiler : ocaml-variants.5.3.0+options,ocaml-option-static
96100 upload_binaries : true
97101 upload_libs : true
102+ node-target : linux-x64
98103 - os : ubuntu-24.04-arm # ARM
99104 ocaml_compiler : ocaml-variants.5.3.0+options,ocaml-option-static
100105 upload_binaries : true
101106 # Build the playground compiler and run the benchmarks on the fastest runner
102107 build_playground : true
103108 benchmarks : true
109+ node-target : linux-arm64
104110 - os : macos-13 # x64
105111 ocaml_compiler : 5.3.0
106112 upload_binaries : true
113+ node-target : darwin-x64
107114 - os : macos-14 # ARM
108115 ocaml_compiler : 5.3.0
109116 upload_binaries : true
117+ node-target : darwin-arm64
110118 - os : windows-latest
111119 ocaml_compiler : 5.3.0
112120 upload_binaries : true
121+ node-target : win32-x64
113122
114123 # Verify that the compiler still builds with older OCaml versions
115124 - os : ubuntu-24.04
@@ -144,9 +153,6 @@ jobs:
144153 cache : yarn
145154 node-version-file : .nvmrc
146155
147- - name : Get artifact dir name
148- run : node .github/workflows/get_artifact_dir_name.js
149-
150156 - name : Install dependencies (Linux)
151157 if : runner.os == 'Linux'
152158@@ -303,13 +309,13 @@ jobs:
303309 run : yarn install
304310
305311 - name : Copy compiler exes to platform bin dir
306- run : node ./ scripts/copyExes.js -compiler
312+ run : node scripts/copyExes.js - -compiler
307313
308314 - name : Restore ninja build cache
309315 id : ninja-build-cache
310316 uses : actions/cache@v4
311317 with :
312- path : ${{ env.artifact_dir_name }}/ninja.exe
318+ path : packages/@rescript/ ${{ matrix.node-target }}/bin /ninja.exe
313319 key : ninja-build-v1-${{ matrix.os }}-${{ hashFiles('ninja/src/**') }}
314320
315321 - name : Setup Python for ninja build
@@ -336,7 +342,7 @@ jobs:
336342
337343 - name : Copy ninja exe to platform bin dir
338344 if : steps.ninja-build-cache.outputs.cache-hit != 'true'
339- run : node ./ scripts/copyExes.js -ninja
345+ run : node scripts/copyExes.js - -ninja
340346
341347 - name : " Syntax: Run roundtrip tests"
342348 if : ${{ runner.os != 'Windows' }}
@@ -423,8 +429,8 @@ jobs:
423429 if : matrix.upload_binaries
424430 uses : actions/upload-artifact@v4
425431 with :
426- name : binaries-${{ env.artifact_dir_name }}
427- path : ${{ env.artifact_dir_name }}
432+ name : binaries-${{ matrix.node-target }}
433+ path : packages/@rescript/ ${{ matrix.node-target }}/bin
428434
429435 - name : " Upload artifacts: lib/ocaml"
430436 if : matrix.upload_libs
@@ -438,7 +444,7 @@ jobs:
438444 - build-compiler
439445 - build-rewatch
440446
441- runs-on : ubuntu-24.04
447+ runs-on : ubuntu-24.04-arm
442448
443449 steps :
444450 - name : Checkout
@@ -447,29 +453,22 @@ jobs:
447453 - name : Use Node.js
448454 uses : actions/setup-node@v4
449455 with :
450- cache : yarn
451456 node-version-file : .nvmrc
452457
453- - name : NPM install
454- run : yarn install
455-
456458 - name : Download artifacts
457459 uses : actions/download-artifact@v4
458460 with :
459461 pattern : " @(binaries-*|rewatch-*|lib-ocaml)"
460462
461- - name : Move artifacts
462- run : ./scripts/moveArtifacts.sh
463+ - name : Move artifacts into packages
464+ run : .github/workflows/moveArtifacts.sh
465+ shell : bash
463466
464- - name : npm pack (rescript) + check artifact list
467+ - name : Check artifact list
465468 run : node ./scripts/npmPack.js
466469
467- - name : Copy JS files to stdlib package
468- run : mkdir -p packages/std/lib && cp -R lib/es6 lib/js packages/std/lib
469-
470- - name : npm pack (@rescript/std)
471- run : npm pack
472- working-directory : packages/std
470+ - name : yarn pack @rescript/* subpackages
471+ run : yarn workspaces foreach -W --no-private --exclude rescript pack
473472
474473 - name : Prepare package upload
475474 # For pull requests, pass the correct commit SHA explicitly as GITHUB_SHA points to the wrong commit.
@@ -482,6 +481,11 @@ jobs:
482481 path : |
483482 rescript-${{ env.rescript_version }}.tgz
484483 rescript-std-${{ env.rescript_version }}.tgz
484+ rescript-linux-x64-${{ env.rescript_version }}.tgz
485+ rescript-linux-arm64-${{ env.rescript_version }}.tgz
486+ rescript-darwin-x64-${{ env.rescript_version }}.tgz
487+ rescript-darwin-arm64-${{ env.rescript_version }}.tgz
488+ rescript-win32-x64-${{ env.rescript_version }}.tgz
485489
486490 outputs :
487491 rescript_version : ${{ env.rescript_version }}
@@ -491,15 +495,19 @@ jobs:
491495 strategy :
492496 fail-fast : false
493497 matrix :
494- os : [
495- macos-13, # x64
496- macos-14, # ARM
497- ubuntu-24.04,
498- ubuntu-24.04-arm,
499- windows-latest,
500- ]
498+ include :
499+ - os : macos-13
500+ node-target : darwin-x64
501+ - os : macos-14
502+ node-target : darwin-arm64
503+ - os : ubuntu-24.04
504+ node-target : linux-x64
505+ - os : ubuntu-24.04-arm
506+ node-target : linux-arm64
507+ - os : windows-latest
508+ node-target : win32-x64
501509
502- runs-on : ${{matrix.os}}
510+ runs-on : ${{ matrix.os }}
503511
504512 steps :
505513 - name : Checkout
@@ -532,7 +540,8 @@ jobs:
532540 - name : Install ReScript package
533541 run : |
534542 npm i --ignore-scripts --no-audit \
535- rescript-${{ needs.package.outputs.rescript_version }}.tgz
543+ rescript-${{ needs.package.outputs.rescript_version }}.tgz \
544+ rescript-${{ matrix.node-target }}-${{ needs.package.outputs.rescript_version }}.tgz
536545 shell : bash
537546 working-directory : ${{ steps.tmp-dir.outputs.path }}
538547
@@ -546,7 +555,7 @@ jobs:
546555
547556 if : startsWith(github.ref, 'refs/tags/v')
548557
549- runs-on : ubuntu-24.04
558+ runs-on : ubuntu-24.04-arm
550559
551560 steps :
552561 - name : Checkout
@@ -568,8 +577,13 @@ jobs:
568577 env :
569578 NODE_AUTH_TOKEN : ${{ secrets.NPM_ACCESS_TOKEN }}
570579 run : |
571- npm publish rescript-${{ needs.package.outputs.rescript_version }}.tgz --tag ci
572- npm publish rescript-std-${{ needs.package.outputs.rescript_version }}.tgz --tag ci
580+ npm publish --tag ci rescript-${{ needs.package.outputs.rescript_version }}.tgz
581+ npm publish --tag ci rescript-std-${{ needs.package.outputs.rescript_version }}.tgz
582+ npm publish --tag ci rescript-linux-x64-${{ needs.package.outputs.rescript_version }}.tgz
583+ npm publish --tag ci rescript-linux-arm64-${{ needs.package.outputs.rescript_version }}.tgz
584+ npm publish --tag ci rescript-darwin-x64-${{ needs.package.outputs.rescript_version }}.tgz
585+ npm publish --tag ci rescript-darwin-arm64-{{ needs.package.outputs.rescript_version }}.tgz
586+ npm publish --tag ci rescript-win32-x64-${{ needs.package.outputs.rescript_version }}.tgz
573587
574588 - name : Update Website Playground
575589 env :
0 commit comments