Skip to content

Support bool untagged variants #2791

Support bool untagged variants

Support bool untagged variants #2791

Workflow file for this run

name: CI
on:
push:
branches: [master]
# See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#filter-pattern-cheat-sheet
tags:
- "v[0-9]+.[0-9]+.[0-9]+"
- "v[0-9]+.[0-9]+.[0-9]+-*"
pull_request:
branches: [master]
concurrency:
group: ci-${{ github.ref }}-1
# Cancel previous builds for pull requests only.
cancel-in-progress: ${{ github.event_name == 'pull_request' }}
env:
OCAMLRUNPARAM: b
jobs:
# Build statically linked Linux binaries in an Alpine-based Docker container
# See https://ocamlpro.com/blog/2021_09_02_generating_static_and_portable_executables_with_ocaml
# for more info.
# The container already comes with all required tools pre-installed
# (see https://github.com/rescript-lang/docker-rescript-ci-build/blob/main/Dockerfile).
static-binaries-linux:
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, buildjet-2vcpu-ubuntu-2204-arm]
runs-on: ${{matrix.os}}
container:
image: ghcr.io/rescript-lang/rescript-ci-build:v1.1.0
steps:
# See https://github.com/actions/runner/issues/801#issuecomment-1374967227.
- name: Workaround for Github actions runner on Alpine arm64
if: runner.arch == 'ARM64'
run: sed -i "s:ID=alpine:ID=NotpineForGHA:" /etc/os-release
- name: Checkout
uses: actions/checkout@v3
- name: Build compiler binaries
run: opam exec -- dune build --display quiet --profile static
- name: Build ninja binary
working-directory: ninja
env:
LDFLAGS: -static
run: python3 configure.py --bootstrap --verbose
- name: "Upload artifacts"
uses: actions/upload-artifact@v3
with:
name: static-binaries-linux-${{runner.arch}}
path: |
_build/install/default/bin
ninja/ninja
# The full build including tests does not work on Linux ARM because setup-ocaml fails.
# Therefore, only upload the binaries from the static build
upload-linux-arm64-binaries:
needs:
- static-binaries-linux
runs-on: buildjet-2vcpu-ubuntu-2204-arm
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Download static linux binaries
if: runner.os == 'Linux'
uses: actions/download-artifact@v3
with:
name: static-binaries-linux-${{ runner.arch }}
- name: Make static linux binaries executable
if: runner.os == 'Linux'
run: |
chmod +x ninja/ninja
chmod +x _build/install/default/bin/*
- name: Use Node.js
uses: actions/setup-node@v3
with:
node-version: 16
- name: Copy exes to platform bin dirs
run: node ./scripts/copyExes.js
- name: Prepare artifact upload
run: node .github/workflows/get_artifact_info.js
- name: "Upload artifacts: binaries"
uses: actions/upload-artifact@v3
with:
name: ${{ env.artifact_name }}
path: ${{ env.artifact_path }}
build:
needs: static-binaries-linux
strategy:
fail-fast: false
matrix:
os: [macos-latest, ubuntu-latest, windows-latest, macos-arm]
ocaml_compiler: [4.14.0]
runs-on: ${{matrix.os}}
env:
DUNE_PROFILE: release
steps:
- name: "Windows: Set git to use LF"
if: runner.os == 'Windows'
run: |
git config --global core.autocrlf false
git config --global core.eol lf
- name: Checkout
uses: actions/checkout@v3
with:
fetch-depth: 2 # to be able to check for changes in subfolder jscomp/syntax later
- name: Download static linux binaries
if: runner.os == 'Linux'
uses: actions/download-artifact@v3
with:
name: static-binaries-linux-${{ runner.arch }}
- name: Make static linux binaries executable
if: runner.os == 'Linux'
run: |
chmod +x ninja/ninja
chmod +x _build/install/default/bin/*
- name: Use OCaml ${{matrix.ocaml_compiler}}
uses: ocaml/setup-ocaml@v2
with:
ocaml-compiler: ${{matrix.ocaml_compiler}}
opam-pin: false
opam-depext: false
- name: "Install OPAM dependencies"
run: opam install . --deps-only
- name: "Build compiler"
if: runner.os != 'Linux'
run: opam exec -- dune build --display quiet --profile release
- name: Use Node.js
uses: actions/setup-node@v3
with:
node-version: 16
- name: Install npm packages
run: npm ci --ignore-scripts
- name: "Windows: Use MSVC for ninja build"
if: runner.os == 'Windows'
uses: TheMrMilchmann/setup-msvc-dev@v2
with:
arch: x64
- name: Build ninja
if: runner.os != 'Linux'
run: node scripts/buildNinjaBinary.js
- name: Copy exes to platform bin dirs
run: node ./scripts/copyExes.js
- name: "Check if syntax subfolder has changed"
id: syntax-diff
shell: bash
run: |
if git diff --name-only --exit-code HEAD^ HEAD -- jscomp/syntax; then
echo "syntax_status=unchanged" >> $GITHUB_ENV
else
echo "syntax_status=changed" >> $GITHUB_ENV
fi
- name: "Syntax: Run roundtrip tests"
if: ${{ env.syntax_status == 'changed' && runner.os != 'Windows' }}
run: opam exec -- make test-syntax-roundtrip
- name: "Syntax: Run tests (Windows)"
if: ${{ env.syntax_status == 'changed' && runner.os == 'Windows' }}
run: opam exec -- make test-syntax
- name: Build runtime/stdlib
if: runner.os != 'Windows'
run: |
opam exec -- node ./scripts/ninja.js config
opam exec -- node ./scripts/ninja.js build
- name: Check for changes in lib folder
run: git diff --exit-code lib/js lib/es6
- name: Populate lib/ocaml
run: ./scripts/prebuilt.js
- name: Run tests
if: runner.os != 'Windows'
run: node scripts/ciTest.js -all
- name: Run tests (Windows)
if: runner.os == 'Windows'
run: node scripts/ciTest.js -mocha -theme -format
# Build the playground compiler on our fastest runner (macOS ARM)
- name: Install JSOO
if: matrix.os == 'macos-arm'
run: opam install js_of_ocaml.4.0.0
- name: Build playground compiler
if: matrix.os == 'macos-arm'
run: |
opam exec -- node packages/playground-bundling/scripts/generate_cmijs.js
opam exec -- dune build --profile browser
cp ./_build/default/jscomp/jsoo/jsoo_playground_main.bc.js playground/compiler.js
- name: Test playground compiler
if: matrix.os == 'macos-arm'
run: node playground/playground_test.js
- name: Upload playground compiler to CDN
if: ${{ matrix.os == 'macos-arm' && startsWith(github.ref, 'refs/tags/v') }}
env:
KEYCDN_USER: ${{ secrets.KEYCDN_USER }}
KEYCDN_PASSWORD: ${{ secrets.KEYCDN_PASSWORD }}
run: sh playground/upload_bundle.sh
- name: Prepare artifact upload
run: node .github/workflows/get_artifact_info.js
- name: "Upload artifacts: binaries"
uses: actions/upload-artifact@v3
with:
name: ${{ env.artifact_name }}
path: ${{ env.artifact_path }}
- name: "Upload artifacts: lib/ocaml"
if: runner.os == 'Linux'
uses: actions/upload-artifact@v3
with:
name: lib-ocaml
path: lib/ocaml
package:
needs: build
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
with:
submodules: true
- name: Use Node.js
uses: actions/setup-node@v3
with:
node-version: 16
- name: NPM install
run: npm ci --ignore-scripts
- name: Download artifacts
uses: actions/download-artifact@v3
- name: Move artifacts
run: ./scripts/moveArtifacts.sh
- name: Check artifact list
run: node ./scripts/makeArtifactList.js -check
- name: npm pack (rescript)
run: npm pack
- name: Copy JS files to stdlib package
run: mkdir -p packages/std/lib && cp -R lib/es6 lib/js packages/std/lib
- name: npm pack (@rescript/std)
run: npm pack
working-directory: packages/std
- name: Prepare package upload
# For pull requests, pass the correct commit SHA explicitly as GITHUB_SHA points to the wrong commit.
run: node .github/workflows/prepare_package_upload.js ${{ github.event.pull_request.head.sha }}
- name: "Upload artifact: npm packages"
uses: actions/upload-artifact@v3
with:
name: npm-packages
path: |
rescript-${{ env.rescript_version }}.tgz
rescript-std-${{ env.rescript_version }}.tgz
outputs:
rescript_version: ${{ env.rescript_version }}
installationTest:
needs: package
strategy:
fail-fast: false
matrix:
os:
[
macos-latest,
macos-arm,
ubuntu-latest,
buildjet-2vcpu-ubuntu-2204-arm,
windows-latest,
]
runs-on: ${{matrix.os}}
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Use Node.js
uses: actions/setup-node@v3
with:
node-version: 16
- name: Download artifacts
uses: actions/download-artifact@v3
with:
name: npm-packages
path: packages/test
- name: Install ReScript package
run: npm i rescript-${{ needs.package.outputs.rescript_version }}.tgz
shell: bash
working-directory: packages/test
- name: Test installation
run: npx rescript -h && npx rescript build && cat src/Test.bs.js
shell: bash
working-directory: packages/test
publish:
needs: [package, installationTest]
if: startsWith(github.ref, 'refs/tags/v')
runs-on: ubuntu-latest
steps:
- name: Use Node.js
uses: actions/setup-node@v3
with:
node-version: 16
registry-url: https://registry.npmjs.org # Needed to make auth work for publishing
- name: Download artifacts
uses: actions/download-artifact@v3
with:
name: npm-packages
- name: Publish packages on npm with tag "ci"
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_ACCESS_TOKEN }}
run: |
npm publish rescript-${{ needs.package.outputs.rescript_version }}.tgz --tag ci
npm publish rescript-std-${{ needs.package.outputs.rescript_version }}.tgz --tag ci