From 0e5e537f5fd0f0a75c419eaebb2e165d1041da65 Mon Sep 17 00:00:00 2001 From: Carlo Gilmar Date: Fri, 19 Apr 2024 11:11:04 -0600 Subject: [PATCH] Adding GitHub Action for CI --- .github/workflows/ci.yml | 124 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 124 insertions(+) create mode 100644 .github/workflows/ci.yml diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..f7d0291 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,124 @@ +name: CI +on: + pull_request: + branches: + - main + push: + branches: + - main + +env: + MIX_ENV: test + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: ${{ github.ref != 'refs/heads/main' }} + +jobs: + setup: + name: Setup + runs-on: ubuntu-latest + outputs: + SHORT_SHA: ${{ steps.short-sha.outputs.short_sha }} + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Setup BEAM + uses: erlef/setup-beam@v1 + with: + elixir-version: 1.16.0-otp-26 + otp-version: 26.2.1 + + - name: Cache + uses: actions/cache@v4 + with: + path: | + _build + deps + key: | + explain-versions-${{ hashFiles('.tool-versions') }}-${{ hashFiles('mix.lock') }}-${{ hashFiles('yarn.lock') }}-2023-03-09 + restore-keys: | + explain-versions-${{ hashFiles('.tool-versions') }}-${{ hashFiles('mix.lock') }}-${{ hashFiles('yarn.lock') }}-2023-03-09 + + - name: Install Elixir dependencies + run: mix do deps.get, compile --warnings-as-errors + + test: + name: Test + needs: setup + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Setup BEAM + uses: erlef/setup-beam@v1 + with: + elixir-version: 1.16.0-otp-26 + otp-version: 26.2.1 + + - name: Cache + uses: actions/cache@v4 + with: + path: | + _build + deps + key: | + explain-versions-${{ hashFiles('.tool-versions') }}-${{ hashFiles('mix.lock') }}-2024-19-04 + restore-keys: | + explain-versions-${{ hashFiles('.tool-versions') }}-${{ hashFiles('mix.lock') }}-2024-19-04 + + - name: Run tests + run: mix test --warnings-as-errors + + analysis: + name: Static Analysis + needs: setup + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Setup BEAM + id: beam + uses: erlef/setup-beam@v1 + with: + elixir-version: 1.16.0-otp-26 + otp-version: 26.2.1 + + - name: Cache + uses: actions/cache@v4 + with: + path: | + _build + deps + key: | + explain-versions-${{ hashFiles('.tool-versions') }}-${{ hashFiles('mix.lock') }}-2024-19-04 + restore-keys: | + explain-versions-${{ hashFiles('.tool-versions') }}-${{ hashFiles('mix.lock') }}-2024-19-04 + + - name: Credo + run: mix credo + + - name: Formatted + run: mix format --check-formatted + + - name: Restore PLT cache + uses: actions/cache@v4 + id: plt_cache + with: + key: plt-${{ runner.os }}-${{ steps.beam.outputs.otp-version }}-${{ steps.beam.outputs.elixir-version }}-${{ hashFiles('**/mix.lock') }}-${{ hashFiles('**/*.ex') }} + restore-keys: | + plt-${{ runner.os }}-${{ steps.beam.outputs.otp-version }}-${{ steps.beam.outputs.elixir-version }}-${{ hashFiles('**/mix.lock') }}-${{ hashFiles('**/*.ex') }} + plt-${{ runner.os }}-${{ steps.beam.outputs.otp-version }}-${{ steps.beam.outputs.elixir-version }}-${{ hashFiles('**/mix.lock') }}- + plt-${{ runner.os }}-${{ steps.beam.outputs.otp-version }}-${{ steps.beam.outputs.elixir-version }}- + plt-${{ runner.os }}-${{ steps.beam.outputs.otp-version }}- + path: priv/plts + + - name: Create PLTs + if: steps.plt_cache.outputs.cache-hit != 'true' || github.run_attempt != '1' + run: mix dialyzer --plt + + - name: Run Dialyzer + run: mix dialyzer --format github