Skip to content

Commit a4b46b0

Browse files
committed
Merge branch 'master' into group-jsx-modules
2 parents e035b54 + 9a8f133 commit a4b46b0

File tree

154 files changed

+1884
-1345
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

154 files changed

+1884
-1345
lines changed

.github/workflows/ci.yml

Lines changed: 65 additions & 81 deletions
Original file line numberDiff line numberDiff line change
@@ -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
uses: awalsh128/[email protected]
@@ -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
@@ -433,13 +439,11 @@ jobs:
433439
name: lib-ocaml
434440
path: lib/ocaml
435441

436-
package:
437-
needs:
438-
- build-compiler
442+
pkg-pr-new:
443+
needs:
439444
- build-rewatch
440-
441-
runs-on: ubuntu-24.04
442-
445+
- build-compiler
446+
runs-on: ubuntu-24.04-arm
443447
steps:
444448
- name: Checkout
445449
uses: actions/checkout@v4
@@ -450,59 +454,40 @@ jobs:
450454
cache: yarn
451455
node-version-file: .nvmrc
452456

453-
- name: NPM install
454-
run: yarn install
455-
456457
- name: Download artifacts
457458
uses: actions/download-artifact@v4
458459
with:
459460
pattern: "@(binaries-*|rewatch-*|lib-ocaml)"
460461

461-
- name: Move artifacts
462-
run: ./scripts/moveArtifacts.sh
463-
464-
- name: npm pack (rescript) + check artifact list
465-
run: node ./scripts/npmPack.js
466-
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
473-
474-
- name: Prepare package upload
475-
# For pull requests, pass the correct commit SHA explicitly as GITHUB_SHA points to the wrong commit.
476-
run: node .github/workflows/prepare_package_upload.js ${{ github.event.pull_request.head.sha }}
477-
478-
- name: "Upload artifact: npm packages"
479-
uses: actions/upload-artifact@v4
480-
with:
481-
name: npm-packages
482-
path: |
483-
rescript-${{ env.rescript_version }}.tgz
484-
rescript-std-${{ env.rescript_version }}.tgz
462+
- name: Move artifacts into packages
463+
run: .github/workflows/moveArtifacts.sh
464+
shell: bash
485465

486-
outputs:
487-
rescript_version: ${{ env.rescript_version }}
466+
- name: Publish packages to pkg.pr.new
467+
run: |
468+
yarn dlx pkg-pr-new publish "." "./packages/@rescript/*"
488469
489470
installationTest:
490-
needs: package
471+
needs:
472+
- pkg-pr-new
491473
strategy:
492474
fail-fast: false
493475
matrix:
494-
os: [
495-
macos-13, # x64
496-
macos-14, # ARM
497-
ubuntu-24.04,
498-
ubuntu-24.04-arm,
499-
windows-latest,
500-
]
501-
502-
runs-on: ${{matrix.os}}
503-
476+
include:
477+
- os: macos-13
478+
node-target: darwin-x64
479+
- os: macos-14
480+
node-target: darwin-arm64
481+
- os: ubuntu-24.04
482+
node-target: linux-x64
483+
- os: ubuntu-24.04-arm
484+
node-target: linux-arm64
485+
- os: windows-latest
486+
node-target: win32-x64
487+
runs-on: ${{ matrix.os }}
504488
steps:
505489
- name: Checkout
490+
id: checkout
506491
uses: actions/checkout@v4
507492

508493
- name: Use Node.js
@@ -523,16 +508,11 @@ jobs:
523508
echo "path=$dir" >> "$GITHUB_OUTPUT"
524509
cp -r tests/package_tests/installation_test/* "$dir"
525510
526-
- name: Download artifacts
527-
uses: actions/download-artifact@v4
528-
with:
529-
name: npm-packages
530-
path: ${{ steps.tmp-dir.outputs.path }}
531-
532511
- name: Install ReScript package
533512
run: |
534-
npm i --ignore-scripts --no-audit \
535-
rescript-${{ needs.package.outputs.rescript_version }}.tgz
513+
COMMIT_SHA="${{ github.event.pull_request.head.sha || github.sha }}"
514+
npm i --no-audit \
515+
"https://pkg.pr.new/rescript-lang/rescript@${COMMIT_SHA::7}"
536516
shell: bash
537517
working-directory: ${{ steps.tmp-dir.outputs.path }}
538518

@@ -542,12 +522,12 @@ jobs:
542522
working-directory: ${{ steps.tmp-dir.outputs.path }}
543523

544524
publish:
545-
needs: [package, installationTest]
546-
525+
needs:
526+
- build-rewatch
527+
- build-compiler
528+
- installationTest
547529
if: startsWith(github.ref, 'refs/tags/v')
548-
549-
runs-on: ubuntu-24.04
550-
530+
runs-on: ubuntu-24.04-arm
551531
steps:
552532
- name: Checkout
553533
uses: actions/checkout@v4
@@ -562,14 +542,18 @@ jobs:
562542
- name: Download artifacts
563543
uses: actions/download-artifact@v4
564544
with:
565-
name: npm-packages
545+
pattern: "@(binaries-*|rewatch-*|lib-ocaml)"
546+
547+
- name: Move artifacts into packages
548+
run: .github/workflows/moveArtifacts.sh
549+
shell: bash
566550

567551
- name: Publish packages on npm with tag "ci"
568552
env:
569-
NODE_AUTH_TOKEN: ${{ secrets.NPM_ACCESS_TOKEN }}
553+
YARN_NPM_AUTH_TOKEN: ${{ secrets.NPM_ACCESS_TOKEN }}
570554
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
555+
yarn workspaces foreach -W --no-private \
556+
npm publish --tag ci
573557
574558
- name: Update Website Playground
575559
env:

.github/workflows/get_artifact_dir_name.js

Lines changed: 0 additions & 10 deletions
This file was deleted.

scripts/moveArtifacts.sh renamed to .github/workflows/moveArtifacts.sh

Lines changed: 16 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
#!/bin/bash
1+
#!/usr/bin/env bash
2+
23
set -e
34

45
check_statically_linked() {
@@ -24,18 +25,19 @@ check_statically_linked() {
2425
fi
2526
}
2627

27-
chmod +x binaries-*/*.exe rewatch-*/*.exe
28-
29-
mkdir darwin darwinarm64 linux linuxarm64 win32
30-
31-
mv binaries-darwin/* rewatch-darwin/* darwin
32-
mv binaries-darwinarm64/* rewatch-darwinarm64/* darwinarm64
33-
mv binaries-linux/* rewatch-linux/* linux
34-
mv binaries-linuxarm64/* rewatch-linuxarm64/* linuxarm64
35-
mv binaries-win32/* rewatch-win32/* win32
36-
28+
# rescript
3729
mv lib-ocaml lib/ocaml
38-
mv ninja/COPYING ninja.COPYING
3930

40-
check_statically_linked "linux"
41-
check_statically_linked "linuxarm64"
31+
# @rescript/{target}
32+
chmod +x binaries-*/*.exe rewatch-*/*.exe
33+
mv -f binaries-darwin-x64/* rewatch-darwin-x64/* "packages/@rescript/darwin-x64/bin"
34+
mv -f binaries-darwin-arm64/* rewatch-darwin-arm64/* "packages/@rescript/darwin-arm64/bin"
35+
mv -f binaries-linux-x64/* rewatch-linux-x64/* "packages/@rescript/linux-x64/bin"
36+
mv -f binaries-linux-arm64/* rewatch-linux-arm64/* "packages/@rescript/linux-arm64/bin"
37+
mv -f binaries-win32-x64/* rewatch-win32-x64/* "packages/@rescript/win32-x64/bin"
38+
check_statically_linked "packages/@rescript/linux-x64/bin"
39+
check_statically_linked "packages/@rescript/linux-arm64/bin"
40+
41+
# @rescript/std
42+
mkdir -p packages/std/lib
43+
cp -R lib/es6 lib/js packages/std/lib

.github/workflows/prepare_package_upload.js

Lines changed: 27 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,21 +2,43 @@ import * as fs from "node:fs";
22
import * as os from "node:os";
33

44
const packageSpec = JSON.parse(
5-
fs.readFileSync(new URL("../../package.json", import.meta.url), "utf-8")
5+
fs.readFileSync(new URL("../../package.json", import.meta.url), "utf-8"),
66
);
77

88
const { version } = packageSpec;
99

1010
const commitHash = process.argv[2] || process.env.GITHUB_SHA;
1111
const commitHashShort = commitHash.substring(0, 7);
1212

13+
// rescript
14+
fs.renameSync("package.tgz", `rescript-${version}-${commitHashShort}.tgz`);
15+
16+
// @rescript/std
17+
fs.renameSync(
18+
"packages/std/package.tgz",
19+
`rescript-std-${version}-${commitHashShort}.tgz`,
20+
);
21+
22+
// @rescript/{target}
1323
fs.renameSync(
14-
`rescript-${version}.tgz`,
15-
`rescript-${version}-${commitHashShort}.tgz`,
24+
"packages/@rescript/linux-x64/package.tgz",
25+
`rescript-linux-x64-${version}-${commitHashShort}.tgz`,
1626
);
1727
fs.renameSync(
18-
`packages/std/rescript-std-${version}.tgz`,
19-
`rescript-std-${version}-${commitHashShort}.tgz`,
28+
"packages/@rescript/linux-arm64/package.tgz",
29+
`rescript-linux-arm64-${version}-${commitHashShort}.tgz`,
30+
);
31+
fs.renameSync(
32+
"packages/@rescript/darwin-x64/package.tgz",
33+
`rescript-darwin-x64-${version}-${commitHashShort}.tgz`,
34+
);
35+
fs.renameSync(
36+
"packages/@rescript/darwin-arm64/package.tgz",
37+
`rescript-darwin-arm64-${version}-${commitHashShort}.tgz`,
38+
);
39+
fs.renameSync(
40+
"packages/@rescript/win32-x64/package.tgz",
41+
`rescript-win32-x64-${version}-${commitHashShort}.tgz`,
2042
);
2143

2244
// Pass information to subsequent GitHub actions

0 commit comments

Comments
 (0)