Skip to content

Fix JSX V4 build error when component props have the default value with same name #2707

Fix JSX V4 build error when component props have the default value with same name

Fix JSX V4 build error when component props have the default value with same name #2707

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