forked from getsentry/sentry-elixir
-
Notifications
You must be signed in to change notification settings - Fork 0
130 lines (109 loc) · 3.43 KB
/
main.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
name: Continuous Integration
on:
push:
branches:
- master
- release/**
pull_request:
env:
MIX_ENV: test
jobs:
test:
name: Test (Elixir ${{ matrix.elixir }}, OTP ${{ matrix.otp }})
runs-on: ubuntu-20.04
timeout-minutes: 10
strategy:
fail-fast: false
matrix:
# https://hexdocs.pm/elixir/compatibility-and-deprecations.html#compatibility-between-elixir-and-erlang-otp
include:
# Newest supported Elixir/Erlang pair.
- elixir: '1.17'
otp: '27.1'
lint: true
dialyzer: true
- elixir: '1.17'
otp: '27.1'
blend: phoenix_live_view_0_20
lint: true
dialyzer: true
steps:
- name: Check out this repository
uses: actions/checkout@v4
- name: Setup Elixir and Erlang
uses: erlef/setup-beam@v1
with:
elixir-version: ${{ matrix.elixir }}
otp-version: ${{ matrix.otp }}
- name: Set lock file from blend
run: cp blend/${{matrix.blend}}.mix.lock mix.lock
if: matrix.blend
- name: Cache downloaded dependencies
uses: actions/cache@v4
id: mix-downloaded-deps-cache
with:
path: |
deps
test_integrations/phoenix_app/deps
key: |
${{ runner.os }}-${{ matrix.otp }}-${{ matrix.elixir }}-mix-deps-${{ hashFiles('**/mix.lock') }}
- name: Download Mix dependencies
if: steps.mix-downloaded-deps-cache.outputs.cache-hit != 'true'
run: |
if [ ${{ matrix.elixir }} != '1.13.4-otp-22' ]; then
mix deps.get --check-locked
else
mix deps.get
fi
if [ ${{ matrix.elixir }} != '1.13.4-otp-22' ]; then
cd test_integrations/phoenix_app
if [ ${{ matrix.lint }} == 'true' ]; then
mix deps.get --check-locked
else
mix deps.get
fi
fi
# We need to manually restore and then save, so that we can save the "_build" directory
# *without* the Elixir compiled code in it.
- name: Cache compiled Elixir code
uses: actions/cache@v4
id: mix-cache
with:
path: |
_build
test_integrations/phoenix_app/_build
key: |
${{ runner.os }}-${{ matrix.otp }}-${{ matrix.elixir }}-mix-${{ hashFiles('**/mix.lock') }}
restore-keys: |
${{ runner.os }}-${{ matrix.otp }}-${{ matrix.elixir }}-mix-
- name: Compile Elixir code (with --warnings-as-errors)
if: matrix.lint
run: |
mix compile --warnings-as-errors
cd test_integrations/phoenix_app
mix compile --warnings-as-errors
- name: Check formatting
if: matrix.lint
run: mix format --check-formatted
- name: Run tests
run: mix test
- name: Run integration tests
run: mix test.integrations
- name: Cache Dialyzer PLT
uses: actions/cache@v4
if: matrix.dialyzer
id: plt-cache
with:
path: plts
key: |
${{ runner.os }}-${{ matrix.otp }}-${{ matrix.elixir }}-plts-${{ hashFiles(format('**/mix.lock')) }}
restore-keys: |
${{ runner.os }}-${{ matrix.otp }}-${{ matrix.elixir }}-plts-
- name: Create PLTs
if: steps.plt-cache.outputs.cache-hit != 'true' && matrix.dialyzer
run: |
mkdir -p plts
mix dialyzer --plt
- name: Run dialyzer
if: matrix.dialyzer
run: mix dialyzer --no-check