.gitlab-ci.yml 6.32 KB
Newer Older
1
2
3


before_script:
Mathieu Giraud's avatar
Mathieu Giraud committed
4
  - make demo
5
6
  - make data
  - make germline
7
  - make -C browser sha1
8
  - cp -p doc/analysis-example.vidjil browser/
9
10

stages:
11
  - test_tools
12
  - test_quality
13
  - test_unit
14
  - deploy_review
15
  - test_germlines
16
  - test_functional
17
  - test_functional_external
18
  - test_shouldvdj
19
  - coverage
20
  - prepare_release
21
  - release
Mathieu Giraud's avatar
Mathieu Giraud committed
22
23
  - valgrind_unit
  - valgrind_functional
24
  - prepare_deploy
25
  - deploy_prod
26

27
28
29
30
31
32
33
# Anchors

.coverage_dependency: &lcov_artifact
  artifacts:
    paths:
      - algo/lcov_test_*.filtered
    expire_in: 6hrs
34

35
36
37
38
39
40
# Tools

test_tools:
  stage: test_tools
  script: make -C tools/tests

41
42
43
44
45
46
47

# Germlines

test_germlines:
  stage: test_germlines
  script:
    - make -C germline get-all-data
48
    - make -C germline tests
49
  only:
50
    - /^feature-.*g.*\/.*$/
51
52


Mathieu Giraud's avatar
Mathieu Giraud committed
53
# Algorithm
54
55
56

test_algo_unit:
  stage: test_unit
57
58
  script: make -C algo unit_coverage
  <<: *lcov_artifact
59
  only:
60
    - /^feature-.*a.*\/.*$/
61

62
63
test_algo_should:
  stage: test_functional
64
  script: make -C algo should_coverage
65
  only:
66
    - /^feature-.*a.*\/.*$/
67
  <<: *lcov_artifact
68
69
70

test_algo_shouldvdj:
  stage: test_shouldvdj
71
72
  script: make -C algo shouldvdj_coverage
  <<: *lcov_artifact
73
74
75
76
77
  only:
    - /^feature-.*a.*\/.*$/

algo_coverage:
  stage: coverage
78
  coverage: /^\s*lines\.*:\s+([0-9.]+\%)/
79
80
81
  script:
    - make -C algo lcov_reports
    - mv algo/reports/ coverage
82
83
  artifacts:
    paths:
84
      - coverage/
85
  only:
86
    - /^feature-.*a.*\/.*$/
87

Mathieu Giraud's avatar
Mathieu Giraud committed
88
89
algo_valgrind_unit:
  stage: valgrind_unit
90
  script: make -C algo valgrind_unit
Mathieu Giraud's avatar
Mathieu Giraud committed
91
  only:
92
    - /^feature-.*a.*\/.*$/
93
94
  tags:
    - valgrind
Mathieu Giraud's avatar
Mathieu Giraud committed
95
96
97

algo_valgrind_functional:
  stage: valgrind_functional
98
  script: make -C algo valgrind_should
Mathieu Giraud's avatar
Mathieu Giraud committed
99
100
  when: manual
  only:
101
    - /^feature-.*a.*\/.*$/
102
103
  tags:
    - valgrind
Mathieu Giraud's avatar
Mathieu Giraud committed
104

105
106
107
108
109
prepare_release:
  stage: prepare_release
  script: make -C algo release RELEASE_TAG='rc'
  when: manual
  only:
110
    - /^feature-.*a.*\/.*$/
111

112
113
114
115
116
release:
  stage: release
  script: make -C algo release RELEASE_TAG=`cat algo/release`
  when: manual
  only:
117
    - /^feature-.*a.*\/release$/
118
  artifacts:
119
    paths:
120
121
    - algo/releases/vidjil-algo-`cat algo/release`.tar.gz
    - algo/releases/vidjil-algo-`cat algo/release`/vidjil-algo-`cat algo/release`_`uname -m`
122
  allow_failure: false
123
124
  tags:
    - ubuntu-16.04-amd64
125

126
127
128
129
130
131
132
133
134
135
copy_release:
  stage: prepare_deploy
  script:
    - |
      for repo in $ALGO_REPOSITORIES; do
        echo "Copying release to $repo"
        scp algo/releases/vidjil-algo*.tar.gz algo/releases/vidjil-algo*/vidjil-algo-*_* $repo
      done
      release_name=$(cat algo/release)
      ssh $VIDJIL_WWW "cd /var/www/html/releases; ln -sf vidjil-algo-${release_name}.tar.gz vidjil-latest.tgz; ln -sf vidjil-algo-${release_name}_x86_64 vidjil-latest_x86_64"
Mikaël Salson's avatar
Mikaël Salson committed
136
      ssh $VIDJIL_BONSAI "cd /bio1/www/html/vidjil; scp vidjil-algo-${release_name}* $VIDJIL_BONSAI_PROD:/bio1/www/html/vidjil"
137
138
139
  only:
    - /^feature-.*a.*\/release$/

140
141
142
143
144
145
146
deploy_release_prod:
  stage: deploy_prod
  only:
    - /^feature-.*a.*\/release$/
  script:
    - |
      release_name=$(cat algo/release)
147
      ssh $DEPLOY_SERVER "cd releases/vidjil;\
148
          tar xvzf vidjil-algo-${release_name}.tar.gz;\
149
150
          make -C vidjil-algo-${release_name};\
          ln -sfT vidjil-algo-${release_name} next"
151

152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
test_various_compilers:
  stage: test_functional
  only:
    - feature-a/test-compilers
  tags:
    - several-compilers
  script:
    - |
      for CXX in $COMPILERS; do
        echo "**** Using $CXX for compilation ****"
        make -C algo clean
        make -C algo CXX=$CXX unit
        make -C algo CXX=$CXX should
        make -C algo CXX=$CXX valgrind_unit
      done


Mathieu Giraud's avatar
Mathieu Giraud committed
169
# Client
170

171
test_browser_unit:
172
  stage: test_unit
Mathieu Giraud's avatar
Mathieu Giraud committed
173
  script: make unit_browser
174
175
176
  artifacts:
    paths:
    - browser/
177
  only:
178
179
    - /^feature-.*c.*\/.*$/
    - /^hotfix-.*c.*\/.*$/
Mathieu Giraud's avatar
Mathieu Giraud committed
180
    - prod-client
181
    - dev
182
183
  tags:
    - web
184

185
186
test_browser-functional:
  stage: test_functional
187
188
189
190
  script:
    - make -C browser
    - source /etc/profile.d/rvm.sh
    - rvm use 2.1.1
191
192
193
194
195
    - HEADLESS=1 make -C browser/test functional
  artifacts:
    paths:
    - browser/
  only:
196
197
    - /^feature-.*c.*\/.*$/
    - /^hotfix-.*c.*\/.*$/
198
    - prod-client
199
200
  tags:
    - web
201
202
203

test_browser-functional-external:
  stage: test_functional_external
204
  retry: 2
205
206
207
208
209
  script:
    - make -C browser
    - source /etc/profile.d/rvm.sh
    - rvm use 2.1.1
    - HEADLESS=1 make -C browser/test external
210
211
212
  artifacts:
    paths:
    - browser/
213
  only:
214
215
    - /^feature-.*c.*\/.*$/
    - /^hotfix-.*c.*\/.*$/
Mathieu Giraud's avatar
Mathieu Giraud committed
216
    - prod-client
217
218
  tags:
    - web
219

220
221
code_quality:
  stage: test_quality
222
  script: make -C browser quality
223
  only:
224
225
    - /^feature-.*c.*\/.*$/
    - /^hotfix-.*c.*\/.*$/
226
    - prod-client
227
    - dev
228
229
  tags:
    - web
230

Ryan Herbert's avatar
Ryan Herbert committed
231
232
233
234
235
# Server

test_server_unit:
    stage: test_unit
    script:
236
237
      - virtualenv $CI_BUILD_REF_SLUG
      - source $CI_BUILD_REF_SLUG/bin/activate
238
      - pip install -r requirements.txt
Ryan Herbert's avatar
Ryan Herbert committed
239
      - make -C server install_web2py_standalone
240
      - make -C server launch_fuse_server
241
      - make unit_server || (make -C server kill_fuse_server; deactivate; false)
Ryan Herbert's avatar
Ryan Herbert committed
242
      - make -C server kill_fuse_server
243
      - deactivate
Ryan Herbert's avatar
Ryan Herbert committed
244
    only:
245
246
      - /^feature-.*s.*\/.*$/
      - /^hotfix-.*s.*\/.*$/
Ryan Herbert's avatar
Ryan Herbert committed
247
248
249
250
251
252
253
      - prod-server
      - dev
    tags:
      - web

# Deployment

254
255
deploy_review:
  stage: deploy_review
256
  script:
257
    - make -C browser icons
258
    - echo "$REVIEW_CONFIG_JS" > browser/js/conf.js
259
    - rsync -av --delete browser $DEPLOY_SERVER:$DEPLOY_SERVER_PATH$CI_BUILD_REF_SLUG
260
  environment:
261
    name: review/$CI_BUILD_REF_NAME
Mikaël Salson's avatar
Mikaël Salson committed
262
    url: http://$CI_BUILD_REF_SLUG.ci.vidjil.org/?data=analysis-example.vidjil
Mathieu Giraud's avatar
Mathieu Giraud committed
263
    on_stop: stop_deploy_review
264
  only:
265
266
    - /^feature-.*c.*\/.*$/
    - /^hotfix-.*c.*\/.*$/
267
268
  tags:
    - web
269

270
deploy_prod:
271
  stage: deploy_prod
272
  script:
273
274
275
276
277
278
279
    - ssh $PROD_CLIENT_SERVER "
         cd $PROD_CLIENT_PATH;
         git fetch
         && git reset --hard origin/prod-client
         && make -C browser
         && make -C browser sha1
         && cp doc/analysis-example.vidjil browser/"
280
281
  environment:
    name: production
282
    url: http://$PROD_CLIENT_SERVER/?data=analysis-example.vidjil
283
284
  only:
    - prod-client
285
286
  tags:
    - web
287

288
289
stop_deploy_review:
  stage: deploy_review
290
291
292
293
294
295
  variables:
    GIT_STRATEGY: none
  script:
    - ssh $DEPLOY_SERVER "rm -rf $DEPLOY_SERVER_PATH$CI_BUILD_REF_SLUG"
  when: manual
  environment:
296
    name: review/$CI_BUILD_REF_NAME
297
    action: stop
298
  only:
299
300
    - /^feature-.*c.*\/.*$/
    - /^hotfix-.*c.*\/.*$/
301
  tags:
302
    - web