From 50effa52a4597441bdeaf822b894bf9ecdf772d3 Mon Sep 17 00:00:00 2001 From: Enzo Date: Fri, 4 Oct 2024 17:52:30 +0200 Subject: [PATCH] chore(tools): add CI through GHA --- .github/workflows/elixir.yml | 85 ++++++++++++++++++++++++++++++++++++ 1 file changed, 85 insertions(+) create mode 100644 .github/workflows/elixir.yml diff --git a/.github/workflows/elixir.yml b/.github/workflows/elixir.yml new file mode 100644 index 0000000..723f30d --- /dev/null +++ b/.github/workflows/elixir.yml @@ -0,0 +1,85 @@ +# This workflow uses actions that are not certified by GitHub. +# They are provided by a third-party and are governed by +# separate terms of service, privacy policy, and support +# documentation. + +name: Elixir CI + +on: + push: + branches: [ "main" ] + pull_request: + branches: [ "main" ] + +permissions: + contents: read + +env: + MIX_ENV: test + +jobs: + test: + name: Test (Elixir ${{ matrix.elixir }}, OTP ${{ matrix.otp }}) + runs-on: ubuntu-latest + + strategy: + fail-fast: false + matrix: + # https://hexdocs.pm/elixir/compatibility-and-deprecations.html#compatibility-between-elixir-and-erlang-otp + include: + # Newest supported Elixir/Erlang pair. + - elixir: '1.17' + otp: '27.1' + lint: true + dialyzer: true + + # One version before the last supported one. + - elixir: '1.16' + otp: '26.2' + + - elixir: '1.15' + otp: '25.3' + + steps: + - uses: actions/checkout@v4 + - name: Set up Elixir and Erlang + uses: erlef/setup-beam@61e01a43a562a89bfc54c7f9a378ff67b03e4a21 # v1.16.0 + with: + elixir-version: ${{ matrix.elixir }} + otp-version: ${{ matrix.otp }} + + # Manually restore and then save, so that we can save the "_build" directory + # *without* the Elixir compiled code in it. + - name: Restore Mix dependencies cache + uses: actions/cache/restore@v4 + id: mix-deps-cache + with: + path: | + _build + deps + key: ${{ runner.os }}-${{ matrix.otp}}-${{ matrix.elixir }}-mix-${{ hashFiles('**/mix.lock') }} + restore-keys: ${{ runner.os }}-${{ matrix.otp}}-${{ matrix.elixir }}-mix- + + - name: Install and compile Mix dependencies + if: steps.mix-deps-cache.outputs.cache-hit != 'true' + run: mix do deps.get --check-locked, deps.compile + + - name: Save Mix dependencies cache + uses: actions/cache/save@v4 + if: steps.mix-deps-cache.outputs.cache-hit != 'true' + with: + path: | + _build + deps + key: ${{ steps.mix-deps-cache.outputs.cache-primary-key }} + + - name: Check formatting + if: matrix.lint + run: mix format --check-formatted + + - name: Check compiler warnings + if: matrix.lint + run: mix compile --warnings-as-errors + + - name: Run tests + run: mix test