-
Notifications
You must be signed in to change notification settings - Fork 3
/
Jenkinsfile
105 lines (83 loc) · 1.95 KB
/
Jenkinsfile
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
#!/usr/bin/env groovy
node('elixir') {
stage('Pre-build') {
step([$class: 'WsCleanup'])
checkout scm
sh 'mix local.hex --force'
sh 'mix local.rebar --force'
sh 'mix clean'
sh 'mix deps.get'
stash name: 'source', useDefaultExcludes: false
}
}
parallel (
'Build [test]': {
node('elixir') {
stage('Build [test]') {
step([$class: 'WsCleanup'])
unstash 'source'
withEnv (['MIX_ENV=test']) {
sh 'mix compile'
}
stash 'build-test'
}
}
},
'Build [prod]': {
node('elixir') {
stage('Build [prod]') {
step([$class: 'WsCleanup'])
unstash 'source'
withEnv (['MIX_ENV=prod']) {
sh 'mix compile'
}
stash 'build-prod'
}
}
}
)
parallel (
// 'Lint': {
// node('elixir') {
// stage('Lint') {
// step([$class: 'WsCleanup'])
// unstash 'source'
// unstash 'build-test'
// withEnv (['MIX_ENV=test']) {
// sh "mix credo --strict"
// }
// }
// }
// },
'Type validation': {
node('elixir') {
stage('Type validation') {
step([$class: 'WsCleanup'])
unstash 'build-prod'
// HACK: mix complains if I don't run deps.get again, not sure why
sh "mix deps.get"
// Reuse existing plt
sh "cp ~/.mix/helf/*prod*.plt* _build/prod || :"
withEnv (['MIX_ENV=prod']) {
sh "mix dialyzer --halt-exit-status"
}
// Store newly generated plt
// Do it on two commands because we want it failing if .plt is not found
sh "cp _build/prod/*.plt ~/.mix/helf/"
sh "cp _build/prod/*.plt.hash ~/.mix/helf/"
}
}
},
'Tests': {
node('elixir') {
stage('Tests') {
step([$class: 'WsCleanup'])
unstash 'source'
unstash 'build-test'
withEnv (['MIX_ENV=test']) {
sh 'mix test'
}
}
}
}
)