Skip to content

Commit be950b8

Browse files
committed
update ci.yml
- inspiration alexocode#30
1 parent 5dbf661 commit be950b8

2 files changed

Lines changed: 58 additions & 188 deletions

File tree

.github/workflows/ci.yml

Lines changed: 57 additions & 187 deletions
Original file line numberDiff line numberDiff line change
@@ -1,197 +1,67 @@
11
name: CI
2-
3-
on:
4-
pull_request:
5-
push:
6-
branches:
7-
- main
8-
92
env:
10-
CACHE_PREFIX_DEPS: v1-deps
11-
CACHE_PREFIX_BUILD: v1-_build
12-
CACHE_PREFIX_DIALYZER: v1-dialyzer
13-
3+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
4+
on:
5+
- pull_request
6+
- push
147
jobs:
15-
mix_test:
16-
name: mix test (Erlang/OTP ${{matrix.otp}} | Elixir ${{matrix.elixir}} | Alpine ${{ matrix.alpine }})
8+
linux:
9+
name: Test on Ubuntu (Elixir ${{ matrix.elixir }}, OTP ${{ matrix.otp }})
1710
runs-on: ubuntu-latest
18-
container: hexpm/elixir:${{ matrix.elixir }}-erlang-${{ matrix.otp }}-alpine-${{ matrix.alpine }}
19-
env:
20-
MIX_ENV: test
21-
VERSION_ALPINE: ${{ matrix.alpine }}
22-
VERSION_ELIXIR: ${{ matrix.elixir }}
23-
VERSION_OTP: ${{ matrix.otp }}
2411
strategy:
25-
fail-fast: false
2612
matrix:
27-
include:
28-
- alpine: 3.11.6
29-
elixir: 1.7.4
30-
otp: 20.3.8.19
31-
- alpine: 3.11.6
32-
elixir: 1.8.2
33-
otp: 20.3.8.19
34-
- alpine: 3.11.6
35-
elixir: 1.9.4
36-
otp: 20.3.8.19
37-
- alpine: 3.11.6
38-
elixir: 1.9.4
39-
otp: 21.3.8.16
40-
- alpine: 3.11.6
41-
elixir: 1.10.3
42-
otp: 21.3.8.16
43-
- alpine: 3.11.6
44-
elixir: 1.11.2
45-
otp: 22.3.4.3
46-
- alpine: 3.11.6
47-
elixir: 1.11.2
48-
otp: 23.0.2
49-
- alpine: 3.14.0
50-
elixir: 1.12.3
51-
otp: 24.1.1
52-
steps:
53-
- uses: actions/checkout@v2
54-
55-
- name: Cache - deps/
56-
uses: actions/cache@v1
57-
with:
58-
path: deps/
59-
key: ${{ env.CACHE_PREFIX_DEPS }}-env:${{ env.MIX_ENV }}-alpine:${{ env.VERSION_ALPINE }}-elixir:${{ env.VERSION_ELIXIR }}-otp:${{ env.VERSION_OTP }}-${{ hashFiles('**/mix.lock') }}
60-
restore-keys: ${{ env.CACHE_PREFIX_DEPS }}-env:${{ env.MIX_ENV }}-alpine:${{ env.VERSION_ALPINE }}-elixir:${{ env.VERSION_ELIXIR }}-otp:${{ env.VERSION_OTP }}-
61-
62-
- name: Install Dependencies
63-
run: |
64-
mix local.rebar --force
65-
mix local.hex --force
66-
mix deps.get --only "$MIX_ENV"
67-
68-
- name: Cache - _build/
69-
uses: actions/cache@v1
70-
with:
71-
path: _build/
72-
key: ${{ env.CACHE_PREFIX_BUILD }}-env:${{ env.MIX_ENV }}-alpine:${{ env.VERSION_ALPINE }}-elixir:${{ env.VERSION_ELIXIR }}-otp:${{ env.VERSION_OTP }}-${{ hashFiles('**/mix.lock') }}
73-
restore-keys: ${{ env.CACHE_PREFIX_BUILD }}-env:${{ env.MIX_ENV }}-alpine:${{ env.VERSION_ALPINE }}-elixir:${{ env.VERSION_ELIXIR }}-otp:${{ env.VERSION_OTP }}-
74-
75-
- run: mix compile --warnings-as-errors
76-
- run: mix test
77-
78-
coverage:
79-
name: Collect Test Coverage
80-
runs-on: ubuntu-latest
81-
container: hexpm/elixir:1.11.2-erlang-22.3.4.3-alpine-3.11.6
82-
env:
83-
MIX_ENV: test
84-
VERSION_ALPINE: 3.11.6
85-
VERSION_ELIXIR: 1.11.2
86-
VERSION_OTP: 22.3.4.3
87-
steps:
88-
- name: Install git (required for mix coveralls.github)
89-
run: apk add --no-cache git
90-
91-
# mix coveralls.github uses git to fetch the pr head so we ensure the whole history is available
92-
- uses: actions/checkout@v2
93-
with:
94-
fetch-depth: 0
95-
96-
- name: Cache - deps/
97-
uses: actions/cache@v1
98-
with:
99-
path: deps/
100-
key: ${{ env.CACHE_PREFIX_DEPS }}-env:${{ env.MIX_ENV }}-alpine:${{ env.VERSION_ALPINE }}-elixir:${{ env.VERSION_ELIXIR }}-otp:${{ env.VERSION_OTP}}-${{ hashFiles('**/mix.lock') }}
101-
restore-keys: ${{ env.CACHE_PREFIX_DEPS }}-env:${{ env.MIX_ENV }}-alpine:${{ env.VERSION_ALPINE }}-elixir:${{ env.VERSION_ELIXIR }}-otp:${{ env.VERSION_OTP}}-
102-
103-
- name: Install Dependencies
104-
run: |
105-
mix local.rebar --force
106-
mix local.hex --force
107-
mix deps.get --only "$MIX_ENV"
108-
109-
- name: Cache - _build/
110-
uses: actions/cache@v1
111-
with:
112-
path: _build/
113-
key: ${{ env.CACHE_PREFIX_BUILD }}-env:${{ env.MIX_ENV }}-alpine:${{ env.VERSION_ALPINE }}-elixir:${{ env.VERSION_ELIXIR }}-otp:${{ env.VERSION_OTP }}-${{ hashFiles('**/mix.lock') }}
114-
restore-keys: ${{ env.CACHE_PREFIX_BUILD }}-env:${{ env.MIX_ENV }}-alpine:${{ env.VERSION_ALPINE }}-elixir:${{ env.VERSION_ELIXIR }}-otp:${{ env.VERSION_OTP }}-
115-
116-
- run: mix compile --warnings-as-errors
117-
- run: mix coveralls.github
118-
env:
119-
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
120-
121-
check_style:
122-
name: Check Style
123-
runs-on: ubuntu-latest
124-
container: hexpm/elixir:1.11.2-erlang-22.3.4.3-alpine-3.11.6
125-
env:
126-
MIX_ENV: dev
127-
VERSION_ALPINE: 3.11.6
128-
VERSION_ELIXIR: 1.11.2
129-
VERSION_OTP: 22.3.4.3
130-
steps:
131-
- uses: actions/checkout@v2
132-
133-
- name: Cache - deps/
134-
uses: actions/cache@v1
135-
with:
136-
path: deps/
137-
key: ${{ env.CACHE_PREFIX_DEPS }}-env:${{ env.MIX_ENV }}-alpine:${{ env.VERSION_ALPINE }}-elixir:${{ env.VERSION_ELIXIR }}-otp:${{ env.VERSION_OTP }}-${{ hashFiles('**/mix.lock') }}
138-
restore-keys: ${{ env.CACHE_PREFIX_DEPS }}-env:${{ env.MIX_ENV }}-alpine:${{ env.VERSION_ALPINE }}-elixir:${{ env.VERSION_ELIXIR }}-otp:${{ env.VERSION_OTP }}-
139-
140-
- name: Install Dependencies
141-
run: |
142-
mix local.rebar --force
143-
mix local.hex --force
144-
mix deps.get --only "$MIX_ENV"
145-
146-
- name: Cache - _build/
147-
uses: actions/cache@v1
148-
with:
149-
path: _build/
150-
key: ${{ env.CACHE_PREFIX_BUILD }}-env:${{ env.MIX_ENV }}-alpine:${{ env.VERSION_ALPINE }}-elixir:${{ env.VERSION_ELIXIR }}-otp:${{ env.VERSION_OTP }}-${{ hashFiles('**/mix.lock') }}
151-
restore-keys: ${{ env.CACHE_PREFIX_BUILD }}-env:${{ env.MIX_ENV }}-alpine:${{ env.VERSION_ALPINE }}-elixir:${{ env.VERSION_ELIXIR }}-otp:${{ env.VERSION_OTP }}-
152-
153-
- run: mix compile --warnings-as-errors
154-
- run: mix format --check-formatted
155-
- run: mix credo
156-
157-
check_types:
158-
name: Check Types
159-
runs-on: ubuntu-latest
160-
container: hexpm/elixir:1.11.2-erlang-22.3.4.3-alpine-3.11.6
161-
env:
162-
MIX_ENV: dev
163-
VERSION_ALPINE: 3.11.6
164-
VERSION_ELIXIR: 1.11.2
165-
VERSION_OTP: 22.3.4.3
13+
elixir:
14+
- "1.18.0"
15+
- "1.18.4"
16+
otp:
17+
- "25.3"
18+
- "26.2"
19+
- "27.3"
16620
steps:
167-
- uses: actions/checkout@v2
168-
169-
- name: Cache - deps/
170-
uses: actions/cache@v1
21+
- name: Checkout
22+
uses: actions/checkout@v3
23+
- name: Setup Elixir
24+
uses: erlef/setup-beam@v1
17125
with:
172-
path: deps/
173-
key: ${{ env.CACHE_PREFIX_DEPS }}-env:${{ env.MIX_ENV }}-alpine:${{ env.VERSION_ALPINE }}-elixir:${{ env.VERSION_ELIXIR }}-otp:${{ env.VERSION_OTP }}-${{ hashFiles('**/mix.lock') }}
174-
restore-keys: ${{ env.CACHE_PREFIX_DEPS }}-env:${{ env.MIX_ENV }}-alpine:${{ env.VERSION_ALPINE }}-elixir:${{ env.VERSION_ELIXIR }}-otp:${{ env.VERSION_OTP }}-
175-
176-
- name: Install Dependencies
177-
run: |
178-
mix local.rebar --force
179-
mix local.hex --force
180-
mix deps.get --only "$MIX_ENV"
181-
182-
- name: Cache - _build/
183-
uses: actions/cache@v1
26+
elixir-version: ${{ matrix.elixir }}
27+
otp-version: ${{ matrix.otp }}
28+
- name: Restore deps
29+
uses: actions/cache@v3
18430
with:
185-
path: _build/
186-
key: ${{ env.CACHE_PREFIX_BUILD }}-env:${{ env.MIX_ENV }}-alpine:${{ env.VERSION_ALPINE }}-elixir:${{ env.VERSION_ELIXIR }}-otp:${{ env.VERSION_OTP }}-${{ hashFiles('**/mix.lock') }}
187-
restore-keys: ${{ env.CACHE_PREFIX_BUILD }}-env:${{ env.MIX_ENV }}-alpine:${{ env.VERSION_ALPINE }}-elixir:${{ env.VERSION_ELIXIR }}-otp:${{ env.VERSION_OTP }}-
188-
189-
- run: mix compile --warnings-as-errors
190-
191-
- name: Cache - Dialyzer PLTs
192-
uses: actions/cache@v1
31+
path: deps
32+
key: deps-${{ runner.os }}-${{ matrix.elixir }}-${{ matrix.otp }}-${{ hashFiles(format('{0}{1}', github.workspace, '/mix.lock')) }}
33+
- name: Restore _build
34+
uses: actions/cache@v3
19335
with:
194-
path: .dialyzer/
195-
key: ${{ env.CACHE_PREFIX_DIALYZER }}-env:${{ env.MIX_ENV }}-alpine:${{ env.VERSION_ALPINE }}-elixir:${{ env.VERSION_ELIXIR }}-otp:${{ env.VERSION_OTP }}
196-
197-
- run: mix dialyzer
36+
path: _build
37+
key: _build-${{ runner.os }}-${{ matrix.elixir }}-${{ matrix.otp }}-${{ hashFiles(format('{0}{1}', github.workspace, '/mix.lock')) }}
38+
# - name: Restore .dialyzer
39+
# uses: actions/cache@v3
40+
# with:
41+
# path: .dialyzer
42+
# key: .dialyzer-${{ runner.os }}-${{ matrix.elixir }}-${{ matrix.otp }}-${{ hashFiles(format('{0}{1}', github.workspace, '/mix.lock')) }}
43+
# if: ${{ contains(matrix.elixir, '1.14.1') && contains(matrix.otp, '25.1') }}
44+
- name: Get dependencies
45+
run: mix deps.get
46+
- name: Compile dependencies
47+
run: MIX_ENV=test mix deps.compile
48+
- name: Compile project
49+
run: MIX_ENV=test mix compile --warnings-as-errors
50+
- name: Check unused dependencies
51+
if: ${{ contains(matrix.elixir, '1.14.1') && contains(matrix.otp, '25.1') }}
52+
run: MIX_ENV=test mix deps.unlock --check-unused
53+
- name: Check code format
54+
if: ${{ contains(matrix.elixir, '1.14.1') && contains(matrix.otp, '25.1') }}
55+
run: MIX_ENV=test mix format --check-formatted
56+
- name: Lint code
57+
if: ${{ contains(matrix.elixir, '1.14.1') && contains(matrix.otp, '25.1') }}
58+
run: MIX_ENV=dev mix credo --strict
59+
- name: Run tests
60+
run: MIX_ENV=test mix test
61+
if: ${{ !(contains(matrix.elixir, '1.14.1') && contains(matrix.otp, '25.1')) }}
62+
- name: Run tests with coverage
63+
run: MIX_ENV=test mix coveralls.github
64+
if: ${{ contains(matrix.elixir, '1.14.1') && contains(matrix.otp, '25.1') }}
65+
- name: Static code analysis
66+
run: MIX_ENV=test mix dialyzer
67+
if: ${{ contains(matrix.elixir, '1.14.1') && contains(matrix.otp, '25.1') }}

mix.exs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ defmodule Knigge.MixProject do
77
[
88
app: :knigge,
99
config_path: "config/config.exs",
10-
elixir: ">= 1.7.4 and < 2.0.0",
10+
elixir: ">= 1.18 and < 2.0.0",
1111
elixirc_paths: elixirc_paths(Mix.env()),
1212
preferred_cli_env: [
1313
coveralls: :test,

0 commit comments

Comments
 (0)