Skip to content

avoid Code.ensure_compiled as it is prone to locking #1464

avoid Code.ensure_compiled as it is prone to locking

avoid Code.ensure_compiled as it is prone to locking #1464

Workflow file for this run

name: CI
on:
pull_request:
branches:
- master
push:
branches:
- master
jobs:
# Quick smoke test with all supported Elixir versions on latest OTP
smoke_test_language_server:
name: Smoke test language server (Elixir ${{matrix.elixir}} | OTP ${{matrix.otp}})
runs-on: ubuntu-22.04
strategy:
fail-fast: false
matrix:
include:
- elixir: 1.14.x
otp: 26.x
tests_may_fail: false
- elixir: 1.15.x
otp: 26.x
tests_may_fail: false
- elixir: 1.16.x
otp: 26.x
tests_may_fail: false
- elixir: 1.17.x
otp: 27.x
tests_may_fail: false
- elixir: 1.18.x
otp: 27.x
steps:
- uses: actions/checkout@v4
- uses: erlef/setup-beam@v1
with:
otp-version: ${{matrix.otp}}
elixir-version: ${{matrix.elixir}}
- name: Cache dependencies
uses: actions/cache@v4
with:
path: |
_build
deps
key: ${{ runner.os }}-mix-${{ matrix.elixir }}-${{ matrix.otp }}-${{ hashFiles('**/mix.lock') }}
restore-keys: |
${{ runner.os }}-mix-${{ matrix.elixir }}-${{ matrix.otp }}-
- name: Install Dependencies
run: |
mix local.hex --force
mix local.rebar --force
mix deps.get --only test
- run: |
cd apps/elixir_ls_utils
mix test
- run: |
cd apps/language_server
mix test
smoke_test_debug_adapter:
name: Smoke test debug adapter (Elixir ${{matrix.elixir}} | OTP ${{matrix.otp}})
runs-on: ubuntu-22.04
strategy:
fail-fast: false
matrix:
include:
- elixir: 1.14.x
otp: 26.x
tests_may_fail: false
- elixir: 1.15.x
otp: 26.x
tests_may_fail: false
- elixir: 1.16.x
otp: 26.x
tests_may_fail: false
- elixir: 1.17.x
otp: 27.x
tests_may_fail: false
- elixir: 1.18.x
otp: 27.x
steps:
- uses: actions/checkout@v4
- uses: erlef/setup-beam@v1
with:
otp-version: ${{matrix.otp}}
elixir-version: ${{matrix.elixir}}
- name: Cache dependencies
uses: actions/cache@v4
with:
path: |
_build
deps
key: ${{ runner.os }}-mix-${{ matrix.elixir }}-${{ matrix.otp }}-${{ hashFiles('**/mix.lock') }}
restore-keys: |
${{ runner.os }}-mix-${{ matrix.elixir }}-${{ matrix.otp }}-
- name: Install Dependencies
run: |
mix local.hex --force
mix local.rebar --force
mix deps.get --only test
- run: |
cd apps/elixir_ls_utils
mix test
- run: |
cd apps/debug_adapter
mix test
# Test on lowest supported OTP versions
compatibility_test:
name: Compatibility test (Elixir ${{matrix.elixir}} | OTP ${{matrix.otp}} | ${{matrix.os}})
runs-on: ${{matrix.os}}
needs: [smoke_test_language_server, smoke_test_debug_adapter] # Only run if smoke test passes
strategy:
fail-fast: false
matrix:
include:
# Minimum supported versions
# No installer available for OTP 23.x on Ubuntu 22.04
- elixir: 1.14.x
otp: 24.x
os: ubuntu-22.04
- elixir: 1.14.x
otp: 23.x
os: windows-2022
- elixir: 1.15.x
otp: 24.x
os: ubuntu-22.04
- elixir: 1.15.x
otp: 24.x
os: windows-2022
- elixir: 1.16.x
otp: 24.x
os: ubuntu-22.04
- elixir: 1.16.x
otp: 24.x
os: windows-2022
- elixir: 1.17.x
otp: 25.x
os: ubuntu-22.04
- elixir: 1.17.x
otp: 25.x
os: windows-2022
- elixir: 1.18.x
otp: 25.x
os: ubuntu-22.04
- elixir: 1.18.x
otp: 25.x
os: windows-2022
# Latest versions
# covered by smoke_test
# - elixir: 1.18.x
# otp: 27.x
# os: ubuntu-22.04
- elixir: 1.18.x
otp: 27.x
os: windows-2022
env:
MIX_ENV: test
steps:
- name: Set git to use original line ending (Windows)
if: runner.os == 'Windows'
run: git config --global core.autocrlf false
- uses: actions/checkout@v4
- uses: erlef/setup-beam@v1
with:
otp-version: ${{matrix.otp}}
elixir-version: ${{matrix.elixir}}
- name: Cache dependencies
uses: actions/cache@v4
with:
path: |
_build
deps
key: ${{ runner.os }}-mix-${{ matrix.elixir }}-${{ matrix.otp }}-${{ hashFiles('**/mix.lock') }}
restore-keys: |
${{ runner.os }}-mix-${{ matrix.elixir }}-${{ matrix.otp }}-
- name: Install Dependencies
run: |
mix local.hex --force
mix local.rebar --force
mix deps.get --only test
- run: mix test
static_analysis:
name: Static analysis
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v4
- uses: erlef/setup-beam@v1
with:
otp-version: 27.x
elixir-version: 1.18.x
- name: Cache build artifacts
uses: actions/cache@v4
with:
path: |
~/.hex
~/.mix
_build
deps
key: static-analysis-${{ hashFiles('**/mix.lock') }}
restore-keys: |
static-analysis-
- name: Install Dependencies
run: |
mix local.hex --force
mix local.rebar --force
mix deps.get
- name: Restore timestamps to prevent unnecessary recompilation
run: IFS=$'\n'; for f in $(git ls-files); do touch -d "$(git log -n 1 --pretty='%cI' -- $f)" "$f"; done
- run: MIX_ENV=test mix format --check-formatted
- run: cd apps/language_server && MIX_ENV=test mix format --check-formatted
# TODO reenable
# - run: mix dialyzer_vendored