23f5d91e14c80a863715cc14e18be72a1dddf42d
[releng.git] / jjb / releng / releng-jobs.yaml
1 ---
2 - scm:
3     name: releng-scm
4     scm:
5       - git:
6           url: 'ssh://fbot@gerrit.opnfv.org:29418/releng'
7           refspec: '+refs/heads/*:refs/remotes/origin/* +refs/changes/*:refs/changes/*'
8           submodule:
9             recursive: true
10           branches:
11             - '{ref}'
12
13 - trigger:
14     name: releng-patchset-created
15     triggers:
16       - gerrit:
17           trigger-on:
18             - patchset-created-event
19             - comment-added-contains-event:
20                 comment-contains-value: 'recheck'
21             - comment-added-contains-event:
22                 comment-contains-value: 'reverify'
23           projects:
24             - project-compare-type: 'ANT'
25               project-pattern: 'releng'
26               branches:
27                 - branch-compare-type: 'ANT'
28                   branch-pattern: 'master'
29
30 - trigger:
31     name: releng-patchset-merged
32     triggers:
33       - gerrit:
34           trigger-on:
35             - change-merged-event
36             - comment-added-contains-event:
37                 comment-contains-value: 'remerge'
38           projects:
39             - project-compare-type: 'ANT'
40               project-pattern: 'releng'
41               branches:
42                 - branch-compare-type: 'ANT'
43                   branch-pattern: 'master'
44
45 - builder:
46     name: releng-jjb-verify
47     builders:
48       - shell: |
49           sudo apt-get -o DPkg::Lock::Timeout=300 update && \
50           sudo DEBIAN_FRONTEND=noninteractive apt-get \
51             -o DPkg::Lock::Timeout=300 dist-upgrade -y
52           sudo DEBIAN_FRONTEND=noninteractive \
53           apt-get -o DPkg::Lock::Timeout=300 install jenkins-job-builder -y
54           jenkins-jobs test --recursive -o tmp jjb
55           rm -rf tmp
56
57 - builder:
58     name: releng-jjb-merge
59     builders:
60       - shell: |
61           sudo apt-get -o DPkg::Lock::Timeout=300 update && \
62           sudo DEBIAN_FRONTEND=noninteractive apt-get \
63             -o DPkg::Lock::Timeout=300 dist-upgrade -y
64           sudo DEBIAN_FRONTEND=noninteractive \
65           apt-get -o DPkg::Lock::Timeout=300 install jenkins-job-builder -y
66           jenkins-jobs update --recursive --delete-old jjb
67
68 - parameter:
69     name: releng-jjb-node
70     parameters:
71       - label:
72           name: node
73           default: '{node}'
74
75 - job-template:
76     name: releng-jjb-verify
77     triggers:
78       - releng-patchset-created
79     scm:
80       - releng-scm:
81           ref: $GERRIT_REFSPEC
82     parameters:
83       - releng-jjb-node:
84           node: opnfv-build
85     builders:
86       - releng-jjb-verify
87
88 - project:
89     name: releng-jjb-verify
90     jobs:
91       - releng-jjb-verify
92
93 - job-template:
94     name: releng-jjb-merge
95     triggers:
96       - releng-patchset-merged
97     scm:
98       - releng-scm:
99           ref: master
100     parameters:
101       - releng-jjb-node:
102           node: opnfv-build
103     builders:
104       - releng-jjb-merge
105
106 - project:
107     name: releng-jjb-merge
108     jobs:
109       - releng-jjb-merge
110
111 - scm:
112     name: opnfv-scm
113     scm:
114       - git:
115           url: 'https://gerrit.opnfv.org/gerrit/{project}'
116           refspec: '+refs/heads/*:refs/remotes/origin/* +refs/changes/*:refs/changes/*'
117           submodule:
118             recursive: true
119           branches:
120             - '{ref}'
121
122 - trigger:
123     name: releng-tox-patchset-created
124     triggers:
125       - gerrit:
126           trigger-on:
127             - patchset-created-event
128             - comment-added-contains-event:
129                 comment-contains-value: recheck
130             - comment-added-contains-event:
131                 comment-contains-value: reverify
132           server-name: gerrit.opnfv.org
133           projects:
134             - project-compare-type: 'REG_EXP'
135               project-pattern: '^(?!functest).*'
136               branches:
137                 - branch-compare-type: 'ANT'
138                   branch-pattern: master
139                 - branch-compare-type: 'ANT'
140                   branch-pattern: stable/nile
141                 - branch-compare-type: 'ANT'
142                   branch-pattern: stable/moselle
143
144 - builder:
145     name: releng-tox
146     builders:
147       - shell: |
148           [ -f tox.ini ] || exit 0
149           sudo apt-get -o DPkg::Lock::Timeout=300 update && \
150           sudo DEBIAN_FRONTEND=noninteractive apt-get \
151             -o DPkg::Lock::Timeout=300 dist-upgrade -y
152           sudo DEBIAN_FRONTEND=noninteractive \
153           apt-get -o DPkg::Lock::Timeout=300 install tox -y
154           tox --recreate
155
156 - parameter:
157     name: releng-tox-node
158     parameters:
159       - label:
160           name: node
161           default: '{node}'
162
163 - job-template:
164     name: releng-tox
165     triggers:
166       - releng-tox-patchset-created
167     scm:
168       - opnfv-scm:
169           ref: $GERRIT_REFSPEC
170           project: $GERRIT_PROJECT
171     parameters:
172       - releng-tox-node:
173           node: opnfv-build
174     builders:
175       - releng-tox
176
177 - project:
178     name: releng-tox
179     jobs:
180       - releng-tox
181
182 - project:
183     name: releng-release-jobs
184     stream:
185       - nile
186       - orinoco
187       - v1.22
188       - v1.23
189       - v1.24
190       - v1.25
191       - v1.26
192       - xena
193       - wallaby
194       - yoga
195       - zed
196       - '2023.1'
197     jobs:
198       - 'releng-release-{stream}-verify'
199       - 'releng-release-{stream}-merge'
200
201 - parameter:
202     name: stream-parameter
203     parameters:
204       - string:
205           name: STREAM
206           default: '{stream}'
207
208 - job-template:
209     name: 'releng-release-{stream}-verify'
210     scm:
211       - releng-scm:
212           ref: $GERRIT_REFSPEC
213     parameters:
214       - releng-jjb-node:
215           node: opnfv-build
216       - stream-parameter:
217           stream: '{stream}'
218       - string:
219           name: GIT_URL
220           default: ssh://fbot@gerrit.opnfv.org:29418/
221     triggers:
222       - gerrit:
223           server-name: 'gerrit.opnfv.org'
224           trigger-on:
225             - patchset-created-event:
226                 exclude-drafts: 'false'
227                 exclude-trivial-rebase: 'false'
228                 exclude-no-code-change: 'false'
229             - comment-added-contains-event:
230                 comment-contains-value: 'recheck'
231             - comment-added-contains-event:
232                 comment-contains-value: 'reverify'
233           projects:
234             - project-compare-type: 'ANT'
235               project-pattern: 'releng'
236               branches:
237                 - branch-compare-type: 'ANT'
238                   branch-pattern: '**/master'
239               file-paths:
240                 - compare-type: ANT
241                   pattern: 'releases/{stream}/**'
242                 - compare-type: ANT
243                   pattern: 'releases/schema.yaml'
244                 - compare-type: ANT
245                   pattern: 'releases/scripts/verify_schema.py'
246     builders:
247       - shell: |
248           sudo apt-get -o DPkg::Lock::Timeout=300 update && \
249           sudo DEBIAN_FRONTEND=noninteractive apt-get \
250             -o DPkg::Lock::Timeout=300 dist-upgrade -y
251           sudo DEBIAN_FRONTEND=noninteractive \
252           apt-get -o DPkg::Lock::Timeout=300 install python3-pygerrit2 \
253             python3-ruamel.yaml  -y
254       - shell: !include-raw-escape:
255           - branch-or-tag.sh
256
257 - job-template:
258     name: 'releng-release-{stream}-merge'
259     scm:
260       - releng-scm:
261           ref: $GERRIT_REFSPEC
262     parameters:
263       - releng-jjb-node:
264           node: opnfv-build
265       - stream-parameter:
266           stream: '{stream}'
267       - string:
268           name: GIT_URL
269           default: ssh://fbot@gerrit.opnfv.org:29418/
270     triggers:
271       - gerrit:
272           trigger-on:
273             - change-merged-event
274             - comment-added-contains-event:
275                 comment-contains-value: 'remerge'
276           projects:
277             - project-compare-type: 'ANT'
278               project-pattern: 'releng'
279               branches:
280                 - branch-compare-type: 'ANT'
281                   branch-pattern: 'master'
282               file-paths:
283                 - compare-type: ANT
284                   pattern: 'releases/{stream}/**'
285     builders:
286       - shell: |
287           sudo apt-get -o DPkg::Lock::Timeout=300 update && \
288           sudo DEBIAN_FRONTEND=noninteractive apt-get \
289             -o DPkg::Lock::Timeout=300 dist-upgrade -y
290           sudo DEBIAN_FRONTEND=noninteractive \
291           apt-get -o DPkg::Lock::Timeout=300 install python3-pygerrit2 \
292             python3-ruamel.yaml  -y
293       - shell: !include-raw-escape:
294           - branch-or-tag.sh
295
296 - builder:
297     name: lint-init
298     builders:
299       - shell: |
300           #!/bin/bash
301           # Ensure we start with a clean environment
302           rm -f bash-violation.log python-violation.log yaml-violation.log violation.log
303           git --no-pager diff --diff-filter=MCRAT --name-only HEAD^1 > modified_files
304
305 - builder:
306     name: lint-report
307     builders:
308       - shell: |
309           #!/bin/bash
310           if [[ -s violation.log ]]; then
311               cat violation.log
312               echo "Reporting lint result...."
313               set -x
314               msg="Found syntax error and/or coding style violation(s) in the files modified by your patchset."
315               sed -i -e "1s#^#${msg}\n\n#" violation.log
316               cmd="gerrit review -p $GERRIT_PROJECT -m \"$(cat violation.log)\" $GERRIT_PATCHSET_REVISION --notify NONE"
317               ssh -o 'PubkeyAcceptedKeyTypes +ssh-rsa' -p 29418 fbot@gerrit.opnfv.org "$cmd"
318
319               # Make sure the caller job failed
320               exit 1
321           fi
322
323 - builder:
324     name: lint-bash-code
325     builders:
326       - shell: |
327           #!/bin/bash
328           echo "Checking bash code..."
329           for f in $(egrep '\.sh$' modified_files)
330           do
331               bash -n "$f" 2>> bash-violation.log
332           done
333           if [[ -s bash-violation.log ]]; then
334               echo -e "Bash syntax error(s)\n---" >> violation.log
335               sed -e 's/^/ /g' bash-violation.log >> violation.log
336           fi
337
338 - builder:
339     name: lint-python-code
340     builders:
341       - shell: |
342           #!/bin/bash
343
344           sudo apt-get -o DPkg::Lock::Timeout=300 update && \
345           sudo DEBIAN_FRONTEND=noninteractive apt-get \
346             -o DPkg::Lock::Timeout=300 dist-upgrade -y
347           sudo DEBIAN_FRONTEND=noninteractive \
348           apt-get -o DPkg::Lock::Timeout=300 install flake8 -y
349
350           echo "Checking python code..."
351           for f in $(egrep '\.py$' modified_files)
352           do
353               flake8 "$f" >> python-violation.log
354           done
355           if [[ -s python-violation.log ]]; then
356               echo -e "Python violation(s)\n---" >> violation.log
357               sed -e 's/^/ /g' python-violation.log >> violation.log
358           fi
359
360 - builder:
361     name: lint-yaml-code
362     builders:
363       - shell: |
364           #!/bin/bash
365
366           sudo apt-get -o DPkg::Lock::Timeout=300 update && \
367           sudo DEBIAN_FRONTEND=noninteractive apt-get \
368             -o DPkg::Lock::Timeout=300 dist-upgrade -y
369           sudo DEBIAN_FRONTEND=noninteractive \
370           apt-get -o DPkg::Lock::Timeout=300 install yamllint -y
371
372           echo "Checking yaml file..."
373           for f in $(egrep '\.ya?ml$' modified_files)
374           do
375               yamllint "$f" >> yaml-violation.log
376           done
377           if [[ -s yaml-violation.log ]]; then
378               echo -e "YAML violation(s)\n---" >> violation.log
379               sed -e 's/^/ /g' yaml-violation.log >> violation.log
380           fi
381
382 - builder:
383     name: lint-all-code
384     builders:
385       - lint-init
386       - lint-bash-code
387       - lint-python-code
388       - lint-yaml-code
389       - lint-report
390
391 - project:
392     name: releng-lint
393     jobs:
394       - 'releng-lint-verify'
395
396 - job-template:
397     name: 'releng-lint-verify'
398     parameters:
399       - releng-jjb-node:
400           node: opnfv-build
401     scm:
402       - releng-scm:
403           ref: $GERRIT_REFSPEC
404     triggers:
405       - gerrit:
406           server-name: 'gerrit.opnfv.org'
407           trigger-on:
408             - patchset-created-event
409             - comment-added-contains-event:
410                 comment-contains-value: recheck
411             - comment-added-contains-event:
412                 comment-contains-value: reverify
413           projects:
414             - project-compare-type: 'ANT'
415               project-pattern: 'releng'
416               branches:
417                 - branch-compare-type: 'ANT'
418                   branch-pattern: 'master'
419               file-paths:
420                 - compare-type: ANT
421                   pattern: '**/*.py'
422                 - compare-type: ANT
423                   pattern: '**/*.sh'
424                 - compare-type: ANT
425                   pattern: '**/*.yml'
426                 - compare-type: ANT
427                   pattern: '**/*.yaml'
428     builders:
429       - lint-all-code
430
431 - project:
432     name: releng-generate-artifacts-index-pages
433     jobs:
434       - releng-generate-artifacts-index-pages
435
436 - job-template:
437     name: releng-generate-artifacts-index-pages
438     scm:
439       - releng-scm:
440           ref: master
441     parameters:
442       - releng-jjb-node:
443           node: opnfv-build
444     triggers:
445       - timed: '@daily'
446     builders:
447       - generate-artifact-html
448
449 - builder:
450     name: generate-artifact-html
451     builders:
452       - shell: |
453           curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
454           echo "deb https://packages.cloud.google.com/apt cloud-sdk main" | sudo tee \
455             /etc/apt/sources.list.d/google-cloud-sdk.list
456           sudo apt-get -o DPkg::Lock::Timeout=300 update && \
457           sudo DEBIAN_FRONTEND=noninteractive apt-get \
458             -o DPkg::Lock::Timeout=300 install \
459             google-cloud-sdk -y
460           cd $WORKSPACE/utils/
461           ./artifacts.opnfv.org.sh
462
463 - project:
464     name: releng-artifact-cleanup
465     jobs:
466       - releng-artifact-cleanup
467
468 - job-template:
469     name: releng-artifact-cleanup
470     scm:
471       - releng-scm:
472           ref: master
473     parameters:
474       - releng-jjb-node:
475           node: opnfv-build
476     triggers:
477       - timed: '@daily'
478     builders:
479       - releng-artifact-cleanup
480
481 - builder:
482     name: releng-artifact-cleanup
483     builders:
484       - shell: |
485           curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
486           echo "deb https://packages.cloud.google.com/apt cloud-sdk main" | sudo tee \
487             /etc/apt/sources.list.d/google-cloud-sdk.list
488           sudo apt-get -o DPkg::Lock::Timeout=300 update && \
489           sudo DEBIAN_FRONTEND=noninteractive apt-get \
490             -o DPkg::Lock::Timeout=300 install \
491             google-cloud-sdk -y
492           $WORKSPACE/utils/retention_script.sh