refactor build server #517
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: | |
push: | |
branches: [main] | |
pull_request: | |
branches: [main] | |
jobs: | |
build: | |
name: Build and cache dependencies | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v3 | |
- name: Set up Elixir | |
uses: erlef/setup-beam@v1 | |
with: | |
elixir-version: "1.17.1" | |
otp-version: "27.0" | |
- name: Restore dependencies cache | |
uses: actions/cache@v3 | |
with: | |
path: deps | |
key: ${{ runner.os }}-mix-${{ hashFiles('**/mix.lock') }} | |
restore-keys: ${{ runner.os }}-mix- | |
- name: Install dependencies | |
run: mix deps.get | |
- name: Compile | |
run: mix compile | |
- name: Cache build | |
uses: actions/cache@v3 | |
with: | |
path: _build | |
key: ${{ runner.os }}-build-${{ hashFiles('**/mix.lock') }} | |
restore-keys: ${{ runner.os }}-build- | |
credo: | |
name: Run Credo | |
needs: build | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v3 | |
- name: Set up Elixir | |
uses: erlef/setup-beam@v1 | |
with: | |
elixir-version: "1.17.1" | |
otp-version: "27.0" | |
- name: Restore dependencies cache | |
uses: actions/cache@v3 | |
with: | |
path: deps | |
key: ${{ runner.os }}-mix-${{ hashFiles('**/mix.lock') }} | |
- name: Restore build cache | |
uses: actions/cache@v3 | |
with: | |
path: _build | |
key: ${{ runner.os }}-build-${{ hashFiles('**/mix.lock') }} | |
- name: Run Credo | |
run: mix credo | |
unused_deps: | |
name: Check unused dependencies | |
needs: build | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v3 | |
- name: Set up Elixir | |
uses: erlef/setup-beam@v1 | |
with: | |
elixir-version: "1.17.1" | |
otp-version: "27.0" | |
- name: Restore dependencies cache | |
uses: actions/cache@v3 | |
with: | |
path: deps | |
key: ${{ runner.os }}-mix-${{ hashFiles('**/mix.lock') }} | |
- name: Restore build cache | |
uses: actions/cache@v3 | |
with: | |
path: _build | |
key: ${{ runner.os }}-build-${{ hashFiles('**/mix.lock') }} | |
- name: Check for unused dependencies | |
run: mix deps.unlock --check-unused | |
unused_functions: | |
name: Check unused functions | |
needs: build | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v3 | |
- name: Set up Elixir | |
uses: erlef/setup-beam@v1 | |
with: | |
elixir-version: "1.17.1" | |
otp-version: "27.0" | |
- name: Restore dependencies cache | |
uses: actions/cache@v3 | |
with: | |
path: deps | |
key: ${{ runner.os }}-mix-${{ hashFiles('**/mix.lock') }} | |
- name: Restore build cache | |
uses: actions/cache@v3 | |
with: | |
path: _build | |
key: ${{ runner.os }}-build-${{ hashFiles('**/mix.lock') }} | |
- name: Check for unused functions | |
run: mix xref unreachable | |
test: | |
name: Run tests | |
needs: build | |
runs-on: ubuntu-latest | |
services: | |
db: | |
image: postgres:13 | |
ports: ["5432:5432"] | |
env: | |
POSTGRES_PASSWORD: postgres | |
options: >- | |
--health-cmd pg_isready | |
--health-interval 10s | |
--health-timeout 5s | |
--health-retries 5 | |
steps: | |
- uses: actions/checkout@v3 | |
- name: Set up Elixir | |
uses: erlef/setup-beam@v1 | |
with: | |
elixir-version: "1.17.1" | |
otp-version: "27.0" | |
- name: Restore dependencies cache | |
uses: actions/cache@v3 | |
with: | |
path: deps | |
key: ${{ runner.os }}-mix-${{ hashFiles('**/mix.lock') }} | |
- name: Restore build cache | |
uses: actions/cache@v3 | |
with: | |
path: _build | |
key: ${{ runner.os }}-build-${{ hashFiles('**/mix.lock') }} | |
- name: Run tests | |
run: mix test | |
deploy: | |
name: Deploy to Fly.io | |
needs: [build, credo, unused_deps, unused_functions, test] | |
if: github.ref == 'refs/heads/main' && github.event_name == 'push' | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v3 | |
- name: Set up Fly | |
uses: superfly/flyctl-actions/setup-flyctl@master | |
- name: Deploy to Fly.io | |
run: flyctl deploy --remote-only | |
env: | |
FLY_API_TOKEN: ${{ secrets.FLY_API_TOKEN }} |