Custom type checking of maps:intersect #878
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: ELP CI | |
on: | |
push: {} | |
release: | |
types: [published] | |
env: | |
EQWALIZER_DIR: ${{ github.workspace }}/eqwalizer/eqwalizer | |
ELP_EQWALIZER_PATH: ${{ github.workspace }}/eqwalizer/eqwalizer/eqwalizer | |
jobs: | |
ci: | |
strategy: | |
matrix: | |
platform-arch: [ubuntu-20.04-x64, ubuntu-20.04-arm, macos-13-x64, macos-latest-arm] | |
otp-version: [25.3, 26.2] | |
include: | |
- otp-version: 25.3 | |
brew-otp-version: 25 | |
vscode-publish: true | |
- otp-version: 26.2 | |
brew-otp-version: 26 | |
vscode-publish: false | |
- platform-arch: ubuntu-20.04-x64 | |
platform: ubuntu-20.04 | |
os: linux | |
target: x86_64-unknown-linux-gnu | |
vscode-target: linux-x64 | |
- platform-arch: ubuntu-20.04-arm | |
platform: ubuntu-20.04 | |
os: linux | |
target: aarch64-unknown-linux-gnu | |
vscode-target: linux-arm64 | |
- platform-arch: macos-13-x64 | |
platform: macos-13 | |
os: macos | |
target: x86_64-apple-darwin | |
vscode-target: darwin-x64 | |
- platform-arch: macos-latest-arm | |
platform: macos-latest | |
os: macos | |
target: aarch64-apple-darwin | |
vscode-target: darwin-arm64 | |
runs-on: ${{ matrix.platform }} | |
steps: | |
- name: Checkout erlang-language-platform | |
uses: "actions/checkout@v3" | |
- name: Checkout eqwalizer | |
uses: "actions/checkout@v3" | |
with: | |
repository: WhatsApp/eqwalizer | |
path: eqwalizer | |
ref: main | |
- name: Set up GraalVM | |
if: matrix.platform-arch != 'ubuntu-20.04-arm' | |
uses: graalvm/setup-graalvm@v1 | |
with: | |
java-version: '17' | |
distribution: 'graalvm' | |
github-token: ${{ secrets.GITHUB_TOKEN }} | |
- name: Set up SBT | |
uses: olafurpg/setup-scala@v11 | |
with: | |
java-version: '17' | |
- name: Set up rust toolchain | |
uses: dtolnay/rust-toolchain@stable | |
with: | |
target: ${{ matrix.target }} | |
- name: Set up cross-compiler | |
if: matrix.platform-arch == 'ubuntu-20.04-arm' | |
run: | | |
sudo apt-get update | |
sudo apt-get install -y crossbuild-essential-arm64 | |
- name: Install Erlang/OTP (Linux Only) | |
if: matrix.os == 'linux' | |
uses: erlef/setup-beam@v1 | |
with: | |
otp-version: ${{ matrix.otp-version }} | |
install-rebar: false | |
install-hex: false | |
- name: Install Erlang/OTP (MacOS Only) | |
if: matrix.os == 'macos' | |
run: brew install erlang@${{ matrix.brew-otp-version }} | |
- name: Add erl to path (MacOS Only) | |
if: matrix.os == 'macos' | |
run: | | |
echo '/opt/homebrew/opt/erlang@${{ matrix.brew-otp-version }}/bin' >> $GITHUB_PATH | |
echo '/usr/local/opt/erlang@${{ matrix.brew-otp-version }}/bin' >> $GITHUB_PATH | |
- name: Verify Erlang version | |
run: erl -eval 'erlang:display(erlang:system_info(otp_release)), halt().' -noshell | |
- name: Install rebar3 | |
run: "mkdir rebar3 && curl https://s3.amazonaws.com/rebar3/rebar3 -o rebar3/rebar3 && chmod +x rebar3/rebar3" | |
- name: Add rebar3 to path | |
run: 'echo "$GITHUB_WORKSPACE/rebar3" >> $GITHUB_PATH' | |
- name: Verify rebar3 version | |
run: rebar3 version | |
- name: Assemble eqwalizer.jar | |
working-directory: eqwalizer/eqwalizer | |
run: "sbt assembly" | |
- name: Assemble eqwalizer binary | |
if: matrix.platform-arch != 'ubuntu-20.04-arm' | |
working-directory: eqwalizer/eqwalizer | |
run: 'native-image -H:IncludeResources=application.conf --no-server --no-fallback -jar target/scala-2.13/eqwalizer.jar eqwalizer' | |
- name: Assemble eqwalizer binary (qemu) | |
if: matrix.platform-arch == 'ubuntu-20.04-arm' | |
uses: uraimo/run-on-arch-action@v2 | |
with: | |
arch: aarch64 | |
distro: ubuntu20.04 | |
dockerRunArgs: | | |
--volume "${PWD}/eqwalizer/eqwalizer:/eqwalizer" | |
install: | | |
apt-get -q update | |
apt-get -q install -y curl gcc zlib1g-dev | |
GRAALVM_URL=https://download.oracle.com/graalvm/21/latest/graalvm-jdk-21_linux-aarch64_bin.tar.gz | |
GRAALVM_SHA256=$(curl -s "${GRAALVM_URL}.sha256") | |
curl --output graalvm.tar.gz "${GRAALVM_URL}" | |
echo "$GRAALVM_SHA256 graalvm.tar.gz" | sha256sum -c | |
mkdir /opt/graalvm | |
tar -xzf graalvm.tar.gz -C /opt/graalvm --strip-components=1 | |
run: | | |
/opt/graalvm/bin/native-image \ | |
-H:IncludeResources=application.conf \ | |
-H:+ReportExceptionStackTraces \ | |
--no-server \ | |
--no-fallback \ | |
-jar /eqwalizer/target/scala-2.13/eqwalizer.jar \ | |
/eqwalizer/eqwalizer | |
- name: Test elp | |
# Do not run the tests in case of cross-compilation | |
if: (matrix.platform-arch != 'ubuntu-20.04-arm') && (matrix.platform-arch != 'macos-latest-arm') | |
run: 'cargo test --no-default-features --workspace --target ${{ matrix.target }}' | |
- name: Build elp | |
run: 'cargo build --release --target ${{ matrix.target }} --config target.aarch64-unknown-linux-gnu.linker=\"aarch64-linux-gnu-gcc\"' | |
- name: Add elp to path | |
run: 'echo "$GITHUB_WORKSPACE/target/${{ matrix.target}}/release" >> $GITHUB_PATH' | |
- name: Upload elp binary | |
uses: "actions/upload-artifact@v3" | |
with: | |
name: elp-${{ matrix.os }}-${{ matrix.target }}-otp-${{ matrix.otp-version }} | |
path: target/${{ matrix.target}}/release/elp | |
- name: Upload eqwalizer native binary | |
uses: "actions/upload-artifact@v3" | |
with: | |
name: eqwalizer-${{ matrix.os }}-${{ matrix.target }}-otp-${{ matrix.otp-version }} | |
path: ./eqwalizer/eqwalizer/eqwalizer | |
- name: Make elp-${{ matrix.os }}-otp-${{ matrix.otp-version }}.tar.gz | |
run: 'tar -zcvf elp-${{ matrix.os }}-otp-${{ matrix.otp-version }}.tar.gz -C target/${{ matrix.target}}/release/ elp' | |
- env: | |
GITHUB_TOKEN: "${{ secrets.GITHUB_TOKEN }}" | |
id: get_release_url | |
name: Get release url | |
if: ${{ github.event_name == 'release' }} | |
uses: "bruceadams/get-release@v1.3.2" | |
- env: | |
GITHUB_TOKEN: "${{ secrets.GITHUB_TOKEN }}" | |
name: Upload release elp-${{ matrix.os }}-otp-${{ matrix.otp-version }}.tar.gz | |
if: ${{ github.event_name == 'release' }} | |
uses: "actions/upload-release-asset@v1.0.2" | |
with: | |
asset_content_type: application/octet-stream | |
asset_name: elp-${{ matrix.os }}-${{ matrix.target }}-otp-${{ matrix.otp-version }}.tar.gz | |
asset_path: elp-${{ matrix.os }}-otp-${{ matrix.otp-version }}.tar.gz | |
upload_url: "${{ steps.get_release_url.outputs.upload_url }}" | |
- name: Setup Node | |
uses: actions/setup-node@v3 | |
with: | |
node-version: 18 | |
- name: Install VSCE | |
run: npm install -g vsce | |
- name: Prepare VS Code Extension to host binaries | |
run: mkdir -p editors/code/bin | |
- name: Package eqWAlizer binary into VS Code Extension | |
run: cp eqwalizer/eqwalizer/eqwalizer editors/code/bin | |
- name: Package ELP binary into VS Code Extension | |
run: cp target/${{ matrix.target}}/release/elp editors/code/bin | |
- name: Ensure binaries are executable | |
run: chmod +x editors/code/bin/* | |
- name: npm install | |
working-directory: editors/code | |
run: npm install | |
- name: npm run compile | |
working-directory: editors/code | |
run: npm run compile | |
- name: Package Extension | |
working-directory: editors/code | |
run: vsce package --target ${{ matrix.vscode-target }} | |
- name: Rename Package | |
working-directory: editors/code | |
run: mv erlang-language-platform-*.vsix erlang-language-platform.vsix | |
- name: Upload Extension | |
uses: "actions/upload-artifact@v3" | |
with: | |
name: elp-${{ matrix.os}}-${{ matrix.target }}-otp-${{ matrix.otp-version }}.vsix | |
path: editors/code/erlang-language-platform.vsix | |
- env: | |
GITHUB_TOKEN: "${{ secrets.GITHUB_TOKEN }}" | |
name: Upload Extension Package | |
if: ${{ github.event_name == 'release' }} | |
uses: "actions/upload-release-asset@v1.0.2" | |
with: | |
asset_content_type: application/octet-stream | |
asset_name: elp-${{ matrix.os }}-${{ matrix.target }}-otp-${{ matrix.otp-version }}.vsix | |
asset_path: editors/code/erlang-language-platform.vsix | |
upload_url: "${{ steps.get_release_url.outputs.upload_url }}" | |
- name: Publish extension to marketplace | |
working-directory: editors/code | |
if: ${{ github.event_name == 'release' && matrix.vscode-publish }} | |
run: vsce publish -p ${{ secrets.VSCE_PAT }} --packagePath erlang-language-platform.vsix |