Skip to content

[flow] Refine opaque types to null or undefined in nullish refinements #65

[flow] Refine opaque types to null or undefined in nullish refinements

[flow] Refine opaque types to null or undefined in nullish refinements #65

name: facebook/flow/build_and_test
on:
workflow_dispatch:
pull_request:
branches:
- main
push:
branches:
- main
tags:
- v*
env:
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
CLOUDFRONT_ID: ${{ secrets.CLOUDFRONT_ID }}
CLOUDFRONT_ID_NEW_WEBSITE: ${{ secrets.CLOUDFRONT_ID_NEW_WEBSITE }}
DOC_BOT_TOKEN: ${{ secrets.DOC_BOT_TOKEN }}
FLOW_BIN_PRIVATE_KEY_BASE64: ${{ secrets.FLOW_BIN_PRIVATE_KEY_BASE64 }}
FLOW_BOT_EMAIL: ${{ secrets.FLOW_BOT_EMAIL }}
FLOW_BOT_TOKEN: ${{ secrets.FLOW_BOT_TOKEN }}
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
S3_BUCKET: ${{ secrets.S3_BUCKET }}
S3_BUCKET_NEW_WEBSITE: ${{ secrets.S3_BUCKET_NEW_WEBSITE }}
jobs:
build_js:
runs-on: ubuntu-latest
container:
image: flowtype/flow-ci:linux-x86_64
options: --user root
env:
TERM: dumb
OPAMYES: true
steps:
- uses: actions/[email protected]
- name: Create cache breaker
run: .circleci/make_opam_cachebreaker.sh > .circleci/opamcachebreaker
shell: bash
- name: opam cache
uses: actions/[email protected]
with:
path: |-
~/.opam
_opam
key: v1-opam-cache-${{ runner.arch }}-{{ hashfiles('.circleci/opamcachebreaker' }}
- name: Init opam
run: .circleci/opam_init.sh
- name: Install deps from opam
run: make deps
shell: bash
- name: Install extra deps from opam
run: make deps-js
- name: Build flow.js
run: opam exec -- make js
- name: Build flow_parser.js
run: opam exec -- make -C src/parser js
- name: Create artifacts
run: |-
mkdir -p dist
cp src/parser/flow_parser.js dist/flow_parser.js
cp src/parser/flow_parser.js packages/flow-parser/flow_parser.js
- uses: actions/[email protected]
with:
name: build_js_bin
path: bin/flow.js
- uses: actions/[email protected]
with:
name: build_js_dist
path: dist/flow_parser.js
- uses: actions/[email protected]
with:
name: build_js_packages
path: packages/flow-parser/flow_parser.js
build_linux:
runs-on: ubuntu-latest
container:
image: flowtype/flow-ci:linux-x86_64
options: --user root
env:
TERM: dumb
OPAMYES: true
steps:
- uses: actions/[email protected]
- name: Create cache breaker
run: .circleci/make_opam_cachebreaker.sh > .circleci/opamcachebreaker
shell: bash
- name: opam cache
uses: actions/[email protected]
with:
path: |-
~/.opam
_opam
key: v1-opam-cache-${{ runner.arch }}-{{ hashfiles('.circleci/opamcachebreaker' }}
- name: Init opam
run: .circleci/opam_init.sh
- name: Install deps from opam
run: make deps
shell: bash
- name: Install extra deps from opam
run: make deps-js
- name: Build flow
run: |-
opam exec -- make bin/flow dist/flow.zip
mkdir -p bin/linux && cp bin/flow bin/linux/flow
- name: Build libflowparser
run: opam exec -- make -C src/parser dist/libflowparser.zip
- name: Create artifacts
run: |-
cp dist/flow.zip dist/flow-linux64.zip
cp src/parser/dist/libflowparser.zip dist/libflowparser-linux64.zip
- uses: actions/[email protected]
with:
name: build_linux_bin
path: bin/linux/flow
- uses: actions/[email protected]
with:
name: build_linux_dist
path: |
dist/flow-linux64.zip
dist/libflowparser-linux64.zip
build_macos:
runs-on: macos-latest
steps:
- uses: actions/[email protected]
- uses: maxim-lobanov/[email protected]
with:
xcode-version: '13.4'
- name: Update curl cacerts
run: echo "cacert $GITHUB_WORKSPACE/.circleci/cacert.pem" >> ~/.curlrc
- uses: ./.github/actions/install-opam-mac
with:
arch: x86_64
- name: Create cache breaker
run: .circleci/make_opam_cachebreaker.sh > .circleci/opamcachebreaker
shell: bash
- name: opam cache
uses: actions/[email protected]
with:
path: |-
~/.opam
_opam
key: v1-opam-cache-${{ runner.arch }}-{{ hashfiles('.circleci/opamcachebreaker' }}
- name: Init opam
run: .circleci/opam_init.sh
- name: Install deps from opam
run: make deps
shell: bash
- name: Build flow
run: |-
opam exec -- make bin/flow dist/flow.zip
mkdir -p bin/macos && cp bin/flow bin/macos/flow
- name: Build libflowparser
run: opam exec -- make -C src/parser dist/libflowparser.zip
- name: Create artifacts
run: |-
cp dist/flow.zip dist/flow-osx.zip
cp src/parser/dist/libflowparser.zip dist/libflowparser-osx.zip
- uses: actions/[email protected]
with:
name: build_macos_bin
path: bin/macos/flow
- uses: actions/[email protected]
with:
name: build_macos_dist
path: |
dist/flow-osx.zip
dist/libflowparser-osx.zip
build_macos_arm64:
runs-on: macos-13-xlarge
steps:
- uses: actions/[email protected]
- uses: maxim-lobanov/[email protected]
with:
xcode-version: 14.2.0
- name: Update curl cacerts
run: echo "cacert $GITHUB_WORKSPACE/.circleci/cacert.pem" >> ~/.curlrc
- uses: ./.github/actions/install-opam-mac
with:
arch: arm64
- name: Create cache breaker
run: .circleci/make_opam_cachebreaker.sh > .circleci/opamcachebreaker
shell: bash
- name: opam cache
uses: actions/[email protected]
with:
path: |-
~/.opam
_opam
key: v1-opam-cache-${{ runner.arch }}-{{ hashfiles('.circleci/opamcachebreaker' }}
- name: Init opam
run: .circleci/opam_init.sh
- name: Install deps from opam
run: make deps
shell: bash
- name: Build flow
run: |-
opam exec -- make bin/flow dist/flow.zip
mkdir -p bin/macos-arm64 && cp bin/flow bin/macos-arm64/flow
- name: Build libflowparser
run: opam exec -- make -C src/parser dist/libflowparser.zip
- name: Create artifacts
run: |-
cp dist/flow.zip dist/flow-osx-arm64.zip
cp src/parser/dist/libflowparser.zip dist/libflowparser-osx-arm64.zip
- uses: actions/[email protected]
with:
name: build_macos_arm64_bin
path: bin/macos-arm64/flow
- uses: actions/[email protected]
with:
name: build_macos_arm64_dist
path: |
dist/flow-osx-arm64.zip
dist/libflowparser-osx-arm64.zip
build_win:
runs-on: windows-latest
env:
FLOW_TMP_DIR: C:\tmp\flow
OPAMDOWNLOADJOBS: 1
steps:
- uses: actions/[email protected]
- name: Set up workspace
run: mkdir $Env:FLOW_TMP_DIR
- name: Install dependencies
run: |
choco install --no-progress -y --source https://chocolatey.org/api/v2/ 7zip
setx /M PATH $($Env:PATH + ';C:\Program Files\7-Zip')
shell: pwsh
- name: Install cygwin
uses: cygwin/cygwin-install-action@master
with:
packages: >-
rsync
patch
diffutils
curl
make
zip
unzip
git
m4
perl
mingw64-x86_64-gcc-core
mingw64-x86_64-gcc-g++
mingw-w64-x86_64-gcc-libs
coreutils
moreutils
- name: Install opam
run: .\scripts\windows\install_opam.ps1
shell: pwsh
- name: Cache
uses: actions/[email protected]
with:
key: opam-cache-${{ runner.os }}-${{ runner.arch }}-${{ hashfiles('flowtype.opam', 'flow_parser.opam', '.circleci/config.yml') }}
path: |
$Env:HOME/.opam
_opam
- name: Init opam
run: opam init default 'https://github.com/ocaml-opam/opam-repository-mingw.git#opam2' --bare --disable-sandboxing --no-setup
shell: C:\cygwin\bin\bash.exe -leo pipefail '{0}'
- name: Create opam switch
run: |-
make deps
shell: C:\cygwin\bin\bash.exe '{0}'
env:
PATH: /usr/local/bin:/usr/bin:/cygdrive/c/Windows/system32:/cygdrive/c/Windows:/cygdrive/c/Windows/System32/Wbem:/cygdrive/c/Windows/System32/WindowsPowerShell/v1.0
- name: Build flow.exe
run: >-
cd ${GITHUB_WORKSPACE} ;
eval $(opam env) ;
make bin/flow.exe dist/flow.zip ;
mkdir -p bin/win64 && cp bin/flow.exe bin/win64/flow.exe ;
cp dist/flow.zip dist/flow-win64.zip
shell: C:\cygwin\bin\bash.exe -leo pipefail '{0}'
env:
PATH: /usr/local/bin:/usr/bin:/cygdrive/c/Windows/system32:/cygdrive/c/Windows:/cygdrive/c/Windows/System32/Wbem:/cygdrive/c/Windows/System32/WindowsPowerShell/v1.0
- name: Build parser test runner
run: >-
cd ${GITHUB_WORKSPACE} ;
eval $(opam env) ;
dune build src/parser/test/run_tests.exe ;
cp _build/default/src/parser/test/run_tests.exe bin/win64/run_parser_tests.exe
shell: C:\cygwin\bin\bash.exe -leo pipefail '{0}'
env:
PATH: /usr/local/bin:/usr/bin:/cygdrive/c/Windows/system32:/cygdrive/c/Windows:/cygdrive/c/Windows/System32/Wbem:/cygdrive/c/Windows/System32/WindowsPowerShell/v1.0
- uses: actions/[email protected]
with:
name: build_win_bin
path: |
bin/win64/flow.exe
bin/win64/run_parser_tests.exe
- uses: actions/[email protected]
with:
name: build_win_dist
path: |
dist/flow-win64.zip
runtests_linux:
runs-on: ubuntu-latest
container:
image: node:12
needs:
- build_linux
env:
FLOW_RUNTESTS_PARALLELISM: 8
steps:
- uses: actions/[email protected]
- uses: actions/[email protected]
with:
name: build_linux_bin
path: bin/linux
- run: chmod +x bin/linux/flow
- name: Run tests
run: ./runtests.sh bin/linux/flow | cat
runtests_macos:
runs-on: macos-latest
needs:
- build_macos
steps:
- uses: maxim-lobanov/[email protected]
with:
xcode-version: '13.4'
- uses: actions/[email protected]
- uses: actions/[email protected]
with:
name: build_macos_bin
path: bin/macos
- run: chmod +x bin/macos/flow
- name: Run tests
run: ./runtests.sh bin/macos/flow | cat
tool_test_linux:
runs-on: ubuntu-latest
container:
image: node:12
needs:
- build_linux
steps:
- uses: actions/[email protected]
- uses: actions/[email protected]
with:
name: build_linux_bin
path: bin/linux
- run: chmod +x bin/linux/flow
- name: Install tool deps from yarn
run: (cd packages/flow-dev-tools && yarn install | cat)
- name: Run tool tests
run: ./tool test -p 4 --bin bin/linux/flow | cat
tool_test_macos:
runs-on: macos-latest
needs:
- build_macos
steps:
- uses: maxim-lobanov/[email protected]
with:
xcode-version: '13.4'
- uses: actions/[email protected]
- uses: actions/[email protected]
with:
name: build_macos_bin
path: bin/macos
- run: chmod +x bin/macos/flow
- name: Install tool deps from yarn
run: (cd packages/flow-dev-tools && yarn install | cat)
- name: Run tool tests
run: ./tool test --bin bin/macos/flow | cat
# tool_test_win:
# runs-on: windows-latest
# needs:
# - build_win
# steps:
# - uses: actions/[email protected]
# - uses: actions/[email protected]
# with:
# name: build_win_bin
# path: bin/win64
# - name: Install tool deps from yarn
# run: |-
# cd packages/flow-dev-tools
# yarn install --ignore-scripts --pure-lockfile
# - name: Run tool tests
# run: node packages/flow-dev-tools/bin/tool test --bin bin/win64/flow.exe --parallelism 1
# shell: bash
ounit_test_linux:
runs-on: ubuntu-latest
container:
image: flowtype/flow-ci:linux-x86_64
options: --user root
env:
TERM: dumb
OPAMYES: true
steps:
- uses: actions/[email protected]
- name: Create cache breaker
run: .circleci/make_opam_cachebreaker.sh > .circleci/opamcachebreaker
shell: bash
- name: opam cache
uses: actions/[email protected]
with:
path: |-
~/.opam
_opam
key: v1-opam-cache-${{ runner.arch }}-{{ hashfiles('.circleci/opamcachebreaker' }}
- name: Init opam
run: .circleci/opam_init.sh
- name: Install deps from opam
run: make deps
shell: bash
- name: Install extra deps from opam
run: make deps-test | cat
- name: Run ounit tests
run: opam exec -- make ounit-tests-ci
- uses: actions/[email protected]
with:
path: test-results/ounit/
ounit_test_macos:
runs-on: macos-latest
steps:
- uses: actions/[email protected]
- uses: maxim-lobanov/[email protected]
with:
xcode-version: '13.4'
- name: Update curl cacerts
run: echo "cacert $GITHUB_WORKSPACE/.circleci/cacert.pem" >> ~/.curlrc
- uses: ./.github/actions/install-opam-mac
with:
arch: x86_64
- name: Create cache breaker
run: .circleci/make_opam_cachebreaker.sh > .circleci/opamcachebreaker
shell: bash
- name: opam cache
uses: actions/[email protected]
with:
path: |-
~/.opam
_opam
key: v1-opam-cache-${{ runner.arch }}-{{ hashfiles('.circleci/opamcachebreaker' }}
- name: Init opam
run: .circleci/opam_init.sh
- name: Install deps from opam
run: make deps
shell: bash
- name: Install extra deps from opam
run: make deps-test | cat
- name: Run ounit tests
run: opam exec -- make ounit-tests-ci
- uses: actions/[email protected]
with:
path: test-results/ounit/
parser_test_win:
runs-on: windows-latest
needs:
- build_win
steps:
- uses: actions/[email protected]
- uses: actions/[email protected]
with:
name: build_win_bin
path: bin/win64
- name: Test parser
run: |-
.\bin\win64\run_parser_tests.exe .\src\parser\test\flow\
if ($LASTEXITCODE -gt 0) {
Throw "flow parser hardcoded ocaml tests exited with error code: $LASTEXITCODE"
}
.\bin\win64\run_parser_tests.exe .\src\parser\test\esprima\
if ($LASTEXITCODE -gt 0) {
Throw "flow parser esprima ocaml tests exited with error code: $LASTEXITCODE"
}
npm_pack:
runs-on: ubuntu-latest
container:
image: node:12
needs:
- build_js
- build_linux
- build_macos
steps:
- uses: actions/[email protected]
- uses: actions/[email protected]
with:
name: build_js_bin
path: bin
- uses: actions/[email protected]
with:
name: build_js_dist
path: dist
- uses: actions/[email protected]
with:
name: build_js_packages
path: packages/flow-parser
- uses: actions/[email protected]
with:
name: build_linux_bin
path: bin/linux
- uses: actions/[email protected]
with:
name: build_linux_dist
path: dist
- uses: actions/[email protected]
with:
name: build_macos_bin
path: bin/macos
- uses: actions/[email protected]
with:
name: build_macos_dist
path: dist
- uses: actions/[email protected]
with:
name: build_macos_arm64_bin
path: bin/macos-arm64
- uses: actions/[email protected]
with:
name: build_macos_arm64_dist
path: dist
- name: Pack flow-parser
run: |
mkdir -p packages/flow-parser/dist/
pwd
ls -lR .
cp dist/flow_parser.js packages/flow-parser/dist/flow_parser.js
make dist/npm-flow-parser.tgz
- name: Pack flow-parser-bin
run: |
mkdir -p packages/flow-parser-bin/dist/release/
cp dist/libflowparser-linux64.zip packages/flow-parser-bin/dist/release/libflowparser-linux64.zip
cp dist/libflowparser-osx.zip packages/flow-parser-bin/dist/release/libflowparser-osx.zip
make dist/npm-flow-parser-bin.tgz
- name: Pack flow-remove-types and flow-node
run: |
rm -rf packages/flow-node
cp -r packages/flow-remove-types/ packages/flow-node/
sed -i '0,/flow-remove-types/s//flow-node/' packages/flow-node/package.json
make dist/npm-flow-remove-types.tgz
make dist/npm-flow-node.tgz
- uses: actions/[email protected]
with:
name: npm_pack
path: |
dist/npm-flow-parser.tgz
dist/npm-flow-parser-bin.tgz
dist/npm-flow-node.tgz
dist/npm-flow-remove-types.tgz
# website_deploy:
# if: github.ref == 'refs/heads/main'
# runs-on: ubuntu-latest
# container:
# image: ghcr.io/facebook/flow-website:latest
# options: --user root
# needs:
# - build_linux
# - build_js
# steps:
# - uses: actions/[email protected]
# - name: Node cache
# uses: actions/[email protected]
# with:
# key: v2-node-${{ runner.arch }}-${{ github.ref_name }}-${{ hashfiles('/etc/os-release', 'website/yarn.lock') }}
# path: website/node_modules
# - name: Install yarn deps
# run: cd website && yarn install
# - name: Build website
# run: PATH=~/flow/bin/linux:$PATH .circleci/build_website.sh
# - name: Gem cache
# uses: actions/[email protected]
# with:
# key: v2-gem-${{ runner.arch }}-${{ github.ref_name }}-${{ hashfiles('/etc/os-release', 'website/Gemfile.lock') }}
# path: UPDATE_ME
# - name: Publish website to GitHub Pages
# run: |-
# cd website
# yarn add gh-pages
# yarn gh-pages -d build -u "flow-bot <[email protected]>" --repo https://${FLOW_BOT_TOKEN}@github.com/facebook/flow.git --no-history
# Deploy jobs
# npm_deploy:
# if: contains(github.event_name, 'push') && startsWith( github.ref, 'refs/tags/v' )
# runs-on: ubuntu-latest
# container:
# image: node:12
# needs:
# - npm_pack
# steps:
# - uses: actions/[email protected]
# with:
# name: build_js_dist
# path: dist
# - name: Deploy to npm
# run: .circleci/deploy_npm.sh
# github_linux:
# if: contains(github.event_name, 'push') && startsWith( github.ref, 'refs/tags/v' )
# runs-on: ubuntu-latest
# container:
# image: appropriate/curl:latest
# needs:
# - build_linux
# steps:
# - uses: actions/[email protected]
# with:
# name: build_linux_dist
# path: dist
# - name: Upload Linux binary
# run: .circleci/github_upload.sh dist/flow-linux64.zip "flow-linux64-${{ github.ref }}.zip"
# - name: Upload Linux libflowparser
# run: .circleci/github_upload.sh dist/libflowparser-linux64.zip "libflowparser-linux64-${{ github.ref }}.zip"
# github_macos:
# if: contains(github.event_name, 'push') && startsWith( github.ref, 'refs/tags/v' )
# runs-on: ubuntu-latest
# container:
# image: appropriate/curl:latest
# needs:
# - build_macos
# steps:
# - uses: actions/[email protected]
# with:
# name: build_macos_dist
# path: dist
# - name: Upload Mac binary
# run: .circleci/github_upload.sh dist/flow-osx.zip "flow-osx-${{ github.ref }}.zip"
# - name: Upload Mac libflowparser
# run: .circleci/github_upload.sh dist/libflowparser-osx.zip "libflowparser-osx-${{ github.ref }}.zip"
# github_macos_arm64:
# if: contains(github.event_name, 'push') && startsWith( github.ref, 'refs/tags/v' )
# runs-on: ubuntu-latest
# container:
# image: appropriate/curl:latest
# needs:
# - build_macos_arm64
# steps:
# - uses: actions/[email protected]
# with:
# name: build_macos_arm64_dist
# path: /flow
# - name: Upload Mac binary
# run: .circleci/github_upload.sh dist/flow-osx-arm64.zip "flow-osx-arm64-${{ github.ref }}.zip"
# - name: Upload Mac libflowparser
# run: .circleci/github_upload.sh dist/libflowparser-osx-arm64.zip "libflowparser-osx-arm64-${{ github.ref }}.zip"
github_win:
if: contains(github.event_name, 'push') && startsWith( github.ref, 'refs/tags/v' )
runs-on: ubuntu-latest
container:
image: appropriate/curl:latest
needs:
- build_win
steps:
- uses: actions/[email protected]
with:
name: build_win_dist
path: dist
- name: Upload Windows binary
run: .circleci/github_upload.sh dist/flow-win64.zip "flow-win64-${{ github.ref }}.zip"
flow_bin_deploy:
if: contains(github.event_name, 'push') && startsWith( github.ref, 'refs/tags/v' )
runs-on: ubuntu-latest
container:
image: node:12
needs:
# - github_linux
# - github_macos
- github_win
steps:
- uses: actions/[email protected]
with:
name: build_linux_bin
path: ~/flow
- name: Deploy flow-bin
run: .circleci/deploy_flow_bin.sh
# try_flow_deploy:
# if: contains(github.event_name, 'push') && startsWith( github.ref, 'refs/tags/v' )
# runs-on: ubuntu-latest
# container:
# image: node:12
# needs:
# - build_js
# steps:
# - uses: actions/[email protected]
# with:
# name: build_js_bin
# path: ~/flow
# - name: Assemble files
# run: |
# cp bin/flow.js packages/try-flow-website-js/flow.js
# cp -r lib packages/try-flow-website-js/flowlib
# make dist/npm-try-flow-website-js.tgz
# - name: Deploy to NPM
# run: |
# echo "//registry.npmjs.org/:_authToken=${NPM_TOKEN}" > ~/.npmrc
# npm publish ./dist/npm-try-flow-website-js.tgz