Elixir CI #2348
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: Elixir CI | |
on: | |
schedule: | |
- cron: '0 5 * * *' | |
push: | |
branches: master | |
pull_request: | |
workflow_dispatch: | |
concurrency: | |
group: ci-${{ github.ref }} | |
cancel-in-progress: true | |
jobs: | |
asdf: | |
name: ASDF | |
runs-on: ubuntu-22.04 | |
steps: | |
- uses: actions/checkout@v3 | |
# cache the ASDF directory, using the values from .tool-versions | |
- name: ASDF cache | |
uses: actions/cache@v3 | |
with: | |
path: ~/.asdf | |
key: ${{ runner.os }}-asdf-v3-${{ hashFiles('.tool-versions') }} | |
id: asdf-cache | |
# only run `asdf install` if we didn't hit the cache | |
- uses: asdf-vm/actions/install@v1 | |
if: steps.asdf-cache.outputs.cache-hit != 'true' | |
- run: | | |
mix local.rebar --force | |
mix local.hex --force | |
if: steps.asdf-cache.outputs.cache-hit != 'true' | |
deps: | |
name: Get Dependencies | |
runs-on: ubuntu-22.04 | |
needs: asdf | |
steps: | |
- uses: actions/checkout@v3 | |
- name: Restore dependencies cache | |
id: deps-cache | |
uses: actions/cache@v3 | |
with: | |
path: deps | |
key: ${{ runner.os }}-mix-v2-${{ hashFiles('**/mix.lock') }} | |
- name: ASDF cache | |
uses: actions/cache@v3 | |
with: | |
path: ~/.asdf | |
key: ${{ runner.os }}-asdf-v3-${{ hashFiles('.tool-versions') }} | |
if: steps.deps-cache.outputs.cache-hit != 'true' | |
- uses: mbta/actions/reshim-asdf@v1 | |
if: steps.deps-cache.outputs.cache-hit != 'true' | |
- name: Install dependencies | |
run: mix deps.get | |
if: steps.deps-cache.outputs.cache-hit != 'true' | |
dev: | |
name: Dev Tasks | |
runs-on: ubuntu-22.04 | |
needs: deps | |
steps: | |
- uses: actions/checkout@v3 | |
- name: ASDF cache | |
uses: actions/cache@v3 | |
with: | |
path: ~/.asdf | |
key: ${{ runner.os }}-asdf-v3-${{ hashFiles('.tool-versions') }} | |
- uses: mbta/actions/reshim-asdf@v1 | |
- name: Restore dependencies cache | |
id: deps-cache | |
uses: actions/cache@v3 | |
with: | |
path: deps | |
key: ${{ runner.os }}-mix-v2-${{ hashFiles('**/mix.lock') }} | |
- name: Restore dev build cache | |
uses: actions/cache@v3 | |
with: | |
path: _build/dev | |
key: ${{ runner.os }}-mix-dev-${{ hashFiles('**/mix.lock') }} | |
- name: Check formatting | |
run: mix format --check-formatted | |
- name: Compile (warnings as errors) | |
run: mix compile --force --warnings-as-errors | |
- name: Package Audits | |
run: | | |
mix hex.audit | |
mix deps.audit | |
- name: Credo | |
run: mix credo --strict | |
- name: Sobelow (Security) | |
run: | | |
cd apps/api_web | |
mix sobelow --skip --exit | |
dialyzer: | |
name: Dialyzer | |
runs-on: ubuntu-22.04 | |
needs: deps | |
steps: | |
- uses: actions/checkout@v3 | |
- name: ASDF cache | |
uses: actions/cache@v3 | |
with: | |
path: ~/.asdf | |
key: ${{ runner.os }}-asdf-v3-${{ hashFiles('.tool-versions') }} | |
- uses: mbta/actions/reshim-asdf@v1 | |
- name: Restore dependencies cache | |
id: deps-cache | |
uses: actions/cache@v3 | |
with: | |
path: deps | |
key: ${{ runner.os }}-mix-v2-${{ hashFiles('**/mix.lock') }} | |
- uses: mbta/actions/dialyzer@v1 | |
test: | |
name: Test Tasks | |
runs-on: ubuntu-22.04 | |
needs: deps | |
services: | |
dynamodb: | |
image: amazon/dynamodb-local:2.0.0 | |
ports: | |
- 8000:8000 | |
mosquitto: | |
image: eclipse-mosquitto:2.0 | |
ports: | |
- 1883:1883 | |
volumes: | |
- ./mosquitto:/mosquitto/config/ | |
options: --name mqtt | |
steps: | |
- uses: actions/checkout@v3 | |
- name: Restart MQTT to load mosquitto/mosquitto.conf from checkout | |
run: docker restart mqtt | |
- name: ASDF cache | |
uses: actions/cache@v3 | |
with: | |
path: ~/.asdf | |
key: ${{ runner.os }}-asdf-v3-${{ hashFiles('.tool-versions') }} | |
- uses: mbta/actions/reshim-asdf@v1 | |
- name: Restore dependencies cache | |
id: deps-cache | |
uses: actions/cache@v3 | |
with: | |
path: deps | |
key: ${{ runner.os }}-mix-v2-${{ hashFiles('**/mix.lock') }} | |
- name: Restore test build cache | |
uses: actions/cache@v3 | |
with: | |
path: _build/test | |
key: ${{ runner.os }}-mix-test-${{ hashFiles('**/mix.lock') }} | |
- name: Run lcov and tests | |
run: mix lcov --exit | |
- name: Run integration tests | |
working-directory: apps/state_mediator | |
run: mix test --only integration | |
- name: Save PR information | |
run: | | |
mkdir -p cover | |
echo "${{ github.event.pull_request.number }}" > cover/PR_NUMBER | |
echo "${{ github.event.pull_request.head.sha }}" > cover/PR_SHA | |
if: github.event.pull_request | |
- name: Upload coverage artifact | |
uses: actions/upload-artifact@v3 | |
with: | |
name: elixir-lcov | |
path: cover/ |