Skip to content

[ELP] Add OTP 27 Pipeline #901

[ELP] Add OTP 27 Pipeline

[ELP] Add OTP 27 Pipeline #901

Workflow file for this run

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, 27.1]
include:
- otp-version: 25.3
brew-otp-version: 25
vscode-publish: true
- otp-version: 26.2
brew-otp-version: 26
vscode-publish: false
- otp-version: 27.1
brew-otp-version: 27
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/[email protected]"
- 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/[email protected]"
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/[email protected]"
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