Skip to content

Commit 771c2d9

Browse files
committed
ci: improve GitHub Actions workflows with job separation and caching
- Split CI workflow into separate jobs (compile, format, credo, dialyzer) - Add format check job to verify code formatting - Improve caching strategy for dependencies and Dialyzer PLT - Add MailHog service to test workflow for email testing - Update test workflow to run on develop branch pushes - Add bun setup to test workflow - Simplify dependency installation in test workflow
1 parent f2a0c71 commit 771c2d9

File tree

2 files changed

+104
-15
lines changed

2 files changed

+104
-15
lines changed

.github/workflows/ci.yml

Lines changed: 88 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@ on:
55
branches: [ '*' ]
66

77
jobs:
8-
test:
9-
name: Build and test
8+
compile:
9+
name: Compile
1010
runs-on: ubuntu-latest
1111

1212
steps:
@@ -31,19 +31,99 @@ jobs:
3131
- name: Install dependencies
3232
run: mix deps.get
3333

34-
- name: Compile
34+
- name: Compile with warnings as errors
3535
run: mix compile --warnings-as-errors
3636

37-
- name: Run Credo
37+
format:
38+
name: Format Check
39+
runs-on: ubuntu-latest
40+
41+
steps:
42+
- name: Checkout code
43+
uses: actions/checkout@v4
44+
45+
- name: Set up Elixir
46+
uses: erlef/setup-beam@v1
47+
with:
48+
elixir-version: '1.18'
49+
otp-version: '28'
50+
51+
- name: Restore dependencies cache
52+
uses: actions/cache@v4
53+
with:
54+
path: |
55+
deps
56+
_build
57+
key: ${{ runner.os }}-mix-${{ hashFiles('**/mix.lock') }}
58+
restore-keys: ${{ runner.os }}-mix-
59+
60+
- name: Install dependencies
61+
run: mix deps.get
62+
63+
- name: Check code formatting
64+
run: mix format --check-formatted
65+
66+
credo:
67+
name: Credo
68+
runs-on: ubuntu-latest
69+
70+
steps:
71+
- name: Checkout code
72+
uses: actions/checkout@v4
73+
74+
- name: Set up Elixir
75+
uses: erlef/setup-beam@v1
76+
with:
77+
elixir-version: '1.18'
78+
otp-version: '28'
79+
80+
- name: Restore dependencies cache
81+
uses: actions/cache@v4
82+
with:
83+
path: |
84+
deps
85+
_build
86+
key: ${{ runner.os }}-mix-${{ hashFiles('**/mix.lock') }}
87+
restore-keys: ${{ runner.os }}-mix-
88+
89+
- name: Install dependencies
90+
run: mix deps.get
91+
92+
- name: Run Credo strict
3893
run: mix credo --strict
3994

40-
- name: Build Dialyzer PLT (cached)
41-
id: plt
95+
dialyzer:
96+
name: Dialyzer
97+
runs-on: ubuntu-latest
98+
99+
steps:
100+
- name: Checkout code
101+
uses: actions/checkout@v4
102+
103+
- name: Set up Elixir
104+
uses: erlef/setup-beam@v1
105+
with:
106+
elixir-version: '1.18'
107+
otp-version: '28'
108+
109+
- name: Restore dependencies cache
110+
uses: actions/cache@v4
111+
with:
112+
path: |
113+
deps
114+
_build
115+
key: ${{ runner.os }}-mix-${{ hashFiles('**/mix.lock') }}
116+
restore-keys: ${{ runner.os }}-mix-
117+
118+
- name: Install dependencies
119+
run: mix deps.get
120+
121+
- name: Restore Dialyzer PLT cache
42122
uses: actions/cache@v4
43123
with:
44124
path: priv/plts
45-
key: dialyzer-${{ hashFiles('mix.lock') }}
125+
key: ${{ runner.os }}-dialyzer-${{ hashFiles('**/mix.lock') }}
126+
restore-keys: ${{ runner.os }}-dialyzer-
46127

47128
- name: Run Dialyzer
48129
run: mix dialyzer --halt-exit-status
49-

.github/workflows/test.yml

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,22 @@ name: Test
22

33
on:
44
push:
5-
branches: [ main ]
6-
pull_request:
75
branches: [ main, develop ]
6+
pull_request:
7+
branches: [ main ]
88

99
jobs:
1010
test:
11+
name: Test
1112
runs-on: ubuntu-latest
1213

14+
services:
15+
mailhog:
16+
image: mailhog/mailhog:latest
17+
ports:
18+
- 1025:1025
19+
- 8025:8025
20+
1321
steps:
1422
- name: Checkout code
1523
uses: actions/checkout@v5
@@ -20,7 +28,11 @@ jobs:
2028
elixir-version: '1.18'
2129
otp-version: '28'
2230

23-
- name: Cache dependencies
31+
- uses: oven-sh/setup-bun@v2
32+
with:
33+
bun-version: latest
34+
35+
- name: Restore dependencies cache
2436
uses: actions/cache@v4
2537
with:
2638
path: |
@@ -31,10 +43,7 @@ jobs:
3143
${{ runner.os }}-mix-
3244
3345
- name: Install dependencies
34-
run: |
35-
mix local.hex --force
36-
mix local.rebar --force
37-
mix deps.get
46+
run: mix deps.get
3847

3948
- name: Run tests
4049
run: mix test

0 commit comments

Comments
 (0)