diff --git a/.github/actions/setup/action.yml b/.github/actions/setup/action.yml new file mode 100644 index 0000000..2e8868f --- /dev/null +++ b/.github/actions/setup/action.yml @@ -0,0 +1,18 @@ +name: Setup +description: Setup BEAM and compile cache +runs: + using: composite + steps: + - uses: erlef/setup-beam@v1 + with: + otp-version: "26" + elixir-version: "1.17" + + - name: Retrieve compile cache + uses: actions/cache@v4 + id: mix-cache + with: + path: | + deps + _build + key: ${{ hashFiles('mix.lock', '.tool-versions') }} diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..0755699 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,73 @@ +name: CI + +on: + push: + branches: + - main + pull_request: + workflow_dispatch: + +jobs: + setup: + name: Setup + runs-on: ubuntu-latest + + steps: + - name: Checkout commit + uses: actions/checkout@v4 + + - name: Setup Elixir and compile cache + uses: ./.github/actions/setup + + - name: Compile project + if: steps.mix-cache.outputs.cache-hit != 'true' + run: | + mix deps.get + mix deps.compile + mix compile — warnings-as-errors + + lint: + name: Lint + needs: setup + runs-on: ubuntu-latest + + steps: + - name: Checkout commit + uses: actions/checkout@v4 + + - name: Setup Elixir and compile cache + uses: ./.github/actions/setup + + - name: Check format + run: mix format --check-formatted + + test: + name: Test + runs-on: ubuntu-latest + env: + MIX_ENV: test + services: + rabbitmq: + image: rabbitmq:latest + env: + RABBITMQ_DEFAULT_USER: guest + RABBITMQ_DEFAULT_PASS: guest + ports: + - 5672:5672 + + steps: + - name: Checkout commit + uses: actions/checkout@v4 + + - name: Setup Elixir and compile cache + uses: ./.github/actions/setup + + - name: Retrieve test cache + uses: actions/cache@v4 + id: mix-cache-test + with: + path: _build/test + key: test-${{ hashFiles('mix.lock') }} + + - name: Run test + run: mix test diff --git a/.github/workflows/doc.yml b/.github/workflows/doc.yml index 67f408c..8d2d27a 100644 --- a/.github/workflows/doc.yml +++ b/.github/workflows/doc.yml @@ -14,19 +14,8 @@ jobs: - name: Checkout commit uses: actions/checkout@v4 - - uses: erlef/setup-beam@v1 - with: - otp-version: "26" - elixir-version: "1.17" - - - name: Retrieve compile cache - uses: actions/cache@v4 - id: mix-cache - with: - path: | - deps - _build - key: ${{ hashFiles('mix.lock') }} + - name: Setup Elixir and compile cache + uses: ./.github/actions/setup - name: Compile project if: steps.mix-cache.outputs.cache-hit != 'true'