|
1 | 1 | name: CI |
2 | | - |
3 | | -on: |
4 | | - pull_request: |
5 | | - push: |
6 | | - branches: |
7 | | - - main |
8 | | - |
9 | 2 | 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 |
14 | 7 | 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 }}) |
17 | 10 | 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 }} |
24 | 11 | strategy: |
25 | | - fail-fast: false |
26 | 12 | 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" |
166 | 20 | 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 |
171 | 25 | 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 |
184 | 30 | 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 |
193 | 35 | 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') }} |
0 commit comments