add example test to CI #119
Workflow file for this run
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: CI | |
on: | |
pull_request: | |
branches: | |
- "**" | |
push: | |
branches: | |
- main | |
env: | |
MIX_ENV: test | |
jobs: | |
elixir_compatibility: | |
name: "Check elixir+otp versions" | |
strategy: | |
matrix: | |
runtime: [ | |
# https://hexdocs.pm/elixir/compatibility-and-deprecations.html | |
# running latest ubuntu, OTP >= 24 only | |
# 1.13.x | |
{ elixir: 1.13.x, otp: 24.3.x }, | |
{ elixir: 1.13.x, otp: 25.3.x }, | |
# 1.14.x | |
{ elixir: 1.14.x, otp: 24.3.x }, | |
{ elixir: 1.14.x, otp: 25.3.x }, | |
# 1.15.x | |
{ elixir: 1.15.x, otp: 24.3.x }, | |
{ elixir: 1.15.x, otp: 25.3.x }, | |
{ elixir: 1.15.x, otp: 26.2.x }, | |
# 1.16.x | |
{ elixir: 1.16.x, otp: 24.3.x }, | |
{ elixir: 1.16.x, otp: 25.3.x }, | |
{ elixir: 1.16.x, otp: 26.2.x }, | |
# 1.17.x | |
{ elixir: 1.17.x, otp: 25.3.x }, | |
{ elixir: 1.17.x, otp: 26.2.x }, | |
{ elixir: 1.17.x, otp: 27.2.x }, | |
# 1.18.x | |
{ elixir: 1.18.x, otp: 25.3.x }, | |
{ elixir: 1.18.x, otp: 26.2.x }, | |
{ elixir: 1.18.x, otp: 27.2.x }, | |
] | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Set up Elixir | |
id: beam | |
uses: erlef/setup-beam@v1 | |
with: | |
otp-version: ${{ matrix.runtime.otp }} | |
elixir-version: ${{ matrix.runtime.elixir }} | |
- name: Restore dependencies cache | |
id: mix_cache | |
uses: actions/cache@v4 | |
with: | |
path: | | |
deps | |
_build | |
key: mix-${{ runner.os }}-${{ steps.beam.outputs.otp-version }}-${{ steps.beam.outputs.elixir-version }}-${{ hashFiles('**/mix.lock') }} | |
restore-keys: mix-${{ runner.os }}-${{ steps.beam.outputs.otp-version }}-${{ steps.beam.outputs.elixir-version }}- | |
- name: Install Dependencies | |
run: | | |
mix deps.get | |
mix deps.compile | |
- name: Run test | |
run: mix test | |
# run extra steps on latest supported | |
Linting: | |
name: Linting on latest runtime | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Set up Elixir | |
id: beam | |
uses: erlef/setup-beam@v1 | |
with: | |
otp-version: 27.2.x | |
elixir-version: 1.18.x | |
- name: Restore dependencies cache | |
id: mix_cache | |
uses: actions/cache@v4 | |
with: | |
path: | | |
deps | |
_build | |
key: mix-${{ runner.os }}-${{ steps.beam.outputs.otp-version }}-${{ steps.beam.outputs.elixir-version }}-${{ hashFiles('**/mix.lock') }} | |
restore-keys: mix-${{ runner.os }}-${{ steps.beam.outputs.otp-version }}-${{ steps.beam.outputs.elixir-version }}- | |
- name: Install Dependencies | |
run: | | |
mix deps.get | |
mix deps.compile | |
- name: Restore PLT cache | |
id: plt_cache | |
uses: actions/cache/restore@v4 | |
with: | |
path: priv/plts | |
key: plt-${{ runner.os }}-${{ steps.beam.outputs.otp-version }}-${{ steps.beam.outputs.elixir-version }}-${{ hashFiles('**/mix.lock') }} | |
restore-keys: plt-${{ runner.os }}-${{ steps.beam.outputs.otp-version }}-${{ steps.beam.outputs.elixir-version }}- | |
- name: Create PLTs | |
if: steps.plt_cache.outputs.cache-hit != 'true' | |
run: mix dialyzer --plt | |
# By default, the GitHub Cache action will only save the cache if all | |
# steps pass, so we manually save after PLT building to keep the cache | |
- name: Save PLT cache | |
id: plt_cache_save | |
uses: actions/cache/save@v4 | |
if: steps.plt_cache.outputs.cache-hit != 'true' | |
with: | |
key: plt-${{ runner.os }}-${{ steps.beam.outputs.otp-version }}-${{ steps.beam.outputs.elixir-version }}-${{ hashFiles('**/mix.lock') }} | |
path: priv/plts | |
- name: Run format | |
run: mix format --check-formatted | |
- name: Run credo | |
run: mix credo | |
# dialyzer takes longer to run, let others fail faster. | |
- name: Run dialyzer | |
run: mix dialyzer --format github | |
validate_unlocked: | |
name: Run with deps-unlocked | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Set up Elixir | |
id: beam | |
uses: erlef/setup-beam@v1 | |
with: | |
otp-version: 27.2.x | |
elixir-version: 1.18.x | |
- name: Restore dependencies cache | |
id: mix_cache | |
uses: actions/cache@v4 | |
with: | |
path: | | |
deps | |
_build | |
key: mix-${{ runner.os }}-${{ steps.beam.outputs.otp-version }}-${{ steps.beam.outputs.elixir-version }}-${{ hashFiles('**/mix.lock') }} | |
restore-keys: mix-${{ runner.os }}-${{ steps.beam.outputs.otp-version }}-${{ steps.beam.outputs.elixir-version }}- | |
- name: Install Dependencies | |
run: | | |
mix deps.unlock --all | |
mix deps.get | |
mix deps.compile | |
- name: Run test | |
run: mix test | |
check_example: | |
name: Run example helloworld tests | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Set up Elixir | |
id: beam | |
uses: erlef/setup-beam@v1 | |
with: | |
otp-version: 27.2.x | |
elixir-version: 1.18.x | |
- name: Build and Test | |
working-directory: ./examples/helloworld | |
run: | | |
mix deps.get | |
mix test |