diff --git a/.github/workflows/elixir.yml b/.github/workflows/elixir.yml new file mode 100644 index 0000000..db68ac5 --- /dev/null +++ b/.github/workflows/elixir.yml @@ -0,0 +1,136 @@ +name: Elixir CI + +on: [push, pull_request] +env: + MIX_ENV: test + # NOTE: make sure these versions match in Containerfile and .tool-versions + ELIXIR_VERSION_SPEC: "1.15.7" + OTP_VERSION_SPEC: "26.0.2" + +jobs: + compile: + name: Compile + runs-on: ubuntu-latest + defaults: + run: + working-directory: ./backend + + steps: + - name: Checkout + uses: actions/checkout@v3 + - name: Set up Elixir + uses: erlef/setup-beam@v1.16 + with: + elixir-version: ${{ env.ELIXIR_VERSION_SPEC }} + otp-version: ${{ env.OTP_VERSION_SPEC }} + - name: Install dependencies + run: mix deps.get + - name: Compile dependencies + run: mix deps.compile + - name: Compile + run: mix compile --warnings-as-errors + + test: + name: Test + runs-on: ubuntu-22.04 + defaults: + run: + working-directory: ./backend + + + services: + invoices_control_db_test: + image: postgres:latest + ports: ['5432:5432'] + env: + POSTGRES_USER: postgres + POSTGRES_PASSWORD: postgres + POSTGRES_HOST_AUTH_METHOD: 'trust' + POSTGRES_DB: invoices_control_test + options: >- + --health-cmd pg_isready + --health-interval 10s + --health-timeout 5s + --health-retries 5 + + env: + MIX_ENV: test + + steps: + - name: Checkout + uses: actions/checkout@v3 + - name: Set up Elixir + uses: erlef/setup-beam@v1.16 + with: + elixir-version: ${{ env.ELIXIR_VERSION_SPEC }} + otp-version: ${{ env.OTP_VERSION_SPEC }} + - name: Install dependencies + run: mix deps.get + - name: Compile dependencies + run: mix deps.compile + - name: Setup database + env: + MIX_ENV: test + PGHOST: localhost + POSTGRES_PORT: 5432 + POSTGRES_USER: postgres + POSTGRES_PASSWORD: postgres + run: + mix ecto.drop + mix ecto.create + mix ecto.migrate + - name: Run tests + env: + MIX_ENV: test + PGHOST: localhost + POSTGRES_PORT: 5432 + POSTGRES_USER: postgres + POSTGRES_PASSWORD: postgres + run: + mix test + + check-formatted: + name: Check Formatted + runs-on: ubuntu-latest + defaults: + run: + working-directory: ./backend + + + steps: + - name: Checkout + uses: actions/checkout@v3 + - name: Set up Elixir + uses: erlef/setup-beam@v1.16 + with: + elixir-version: ${{ env.ELIXIR_VERSION_SPEC }} + otp-version: ${{ env.OTP_VERSION_SPEC }} + - name: Install dependencies + run: mix deps.get + - name: Compile dependencies + run: mix deps.compile + - name: Check formatted + run: mix format --check-formatted + + credo: + name: Credo + runs-on: ubuntu-latest + defaults: + run: + working-directory: ./backend + + + steps: + - name: Checkout + uses: actions/checkout@v3 + - name: Set up Elixir + uses: erlef/setup-beam@v1.16 + with: + elixir-version: ${{ env.ELIXIR_VERSION_SPEC }} + otp-version: ${{ env.OTP_VERSION_SPEC }} + - name: Install dependencies + run: mix deps.get + - name: Compile dependencies + run: mix deps.compile + - name: Run credo + run: mix credo --strict