Merge "Do not skip commit-message-only checkstyle"
[ci-management.git] / jjb / global-macros.yaml
1 ---
2 # Global macros
3
4 #### PARAMETERS
5 - parameter:
6     name: project-parameter
7     parameters:
8       - string:
9           name: PROJECT
10           default: '{project}'
11           # yamllint disable-line rule:line-length
12           description: "JJB configured PROJECT parameter to identify a Gerrit project"
13
14 - parameter:
15     name: gerrit-parameter
16     parameters:
17       - string:
18           name: GERRIT_BRANCH
19           default: '{branch}'
20           description: "JJB configured GERRIT_BRANCH parameter"
21
22 - parameter:
23     name: gerrit-project-parameter
24     parameters:
25       - string:
26           name: GERRIT_PROJECT
27           default: '{project}'
28           description: "GERRIT_PROJECT parameter if not given by trigger"
29
30 - parameter:
31     name: os-parameter
32     parameters:
33       - string:
34           name: OS
35           default: '{os}'
36           description: "OS parameter"
37
38 - parameter:
39     name: gerrit-refspec-parameter
40     parameters:
41       - string:
42           name: GERRIT_REFSPEC
43           default: '{refspec}'
44           description: "GERRIT_REFSPEC parameter not given by trigger"
45
46 - parameter:
47     name: maven-project-parameter
48     parameters:
49       - string:
50           name: MAVEN_SELECTOR
51           default: '{maven}'
52           description: 'Maven selector to be used by shell scripts'
53
54 - parameter:
55     name: maven-exec
56     parameters:
57       - string:
58           name: MVN
59           # yamllint disable-line rule:line-length
60           default: '/w/tools/hudson.tasks.Maven_MavenInstallation/{maven-version}/bin/mvn'
61           description: 'Maven selector to be used by shell scripts'
62
63 - parameter:
64     name: repo-name-parameter
65     parameters:
66       - string:
67           name: REPO_NAME
68           default: '{repo-name}'
69           description: 'Name of repo to which to publish packaging'
70
71 - parameter:
72     name: compiler-parameter
73     parameters:
74       - string:
75           name: CC
76           default: '{cc}'
77           description: "CC parameter, can be gnu or clang"
78
79 - parameter:
80     name: is-csit-vpp-job-parameter
81     parameters:
82       - string:
83           name: IS_CSIT_VPP_JOB
84           default: '{is-csit-vpp-job}'
85           description: "Parameter is True if this is a CSIT vpp job."
86
87 - parameter:
88     name: stream-parameter
89     parameters:
90       - string:
91           name: STREAM
92           default: '{stream}'
93           description: "Stream job parameter to be used in shell scripts."
94
95 - parameter:
96     name: topo-parameter
97     parameters:
98       - string:
99           name: TOPO
100           default: '{topo}'
101           description: "Topology parameter"
102
103 - parameter:
104     name: arch-parameter
105     parameters:
106       - string:
107           name: ARCH
108           default: '{arch}'
109           description: "Architecture parameter"
110
111 - parameter:
112     name: csit-fail-on-crc-mismatch-parameter
113     parameters:
114       - string:
115           name: FDIO_CSIT_FAIL_ON_CRC_MISMATCH
116           default: '{fail-on-crc-mismatch}'
117           description: "If true, CRC is checked, else compatibility is tested."
118
119 - parameter:
120     name: gerrit-event-type-parameter
121     parameters:
122       - string:
123           name: GERRIT_EVENT_TYPE
124           default: ''
125           description: "GERRIT_EVENT_TYPE parameter not given by trigger"
126
127 - parameter:
128     name: gerrit-event-comment-text-parameter
129     parameters:
130       - string:
131           name: GERRIT_EVENT_COMMENT_TEXT
132           default: ''
133           # yamllint disable-line rule:line-length
134           description: "GERRIT_EVENT_COMMENT_TEXT parameter not given by trigger"
135
136 - parameter:
137     name: gerrit-csit-refspec-parameter
138     parameters:
139       - string:
140           name: CSIT_REF
141           default: ''
142           # yamllint disable-line rule:line-length
143           description: "GERRIT_REFSPEC parameter to override separately cloned CSIT repository, leave empty for autodetection / no override."
144
145 ##### SCMS
146 - scm:
147     name: git-scm
148     scm:
149       - git:
150           credentials-id: '{credentials-id}'
151           url: '$GIT_BASE'
152           refspec: ''
153           branches:
154             - 'origin/{branch}'
155           skip-tag: true
156           wipe-workspace: true
157
158 - scm:
159     name: gerrit-trigger-scm
160     scm:
161       - git:
162           credentials-id: '{credentials-id}'
163           url: '$GIT_BASE'
164           refspec: '{refspec}'
165           branches:
166             - 'origin/$GERRIT_BRANCH'
167           skip-tag: true
168           choosing-strategy: '{choosing-strategy}'
169
170 - scm:
171     name: gerrit-trigger-scm-recursive
172     scm:
173       - git:
174           credentials-id: '{credentials-id}'
175           url: '$GIT_BASE'
176           refspec: '{refspec}'
177           branches:
178             - 'origin/$GERRIT_BRANCH'
179           skip-tag: true
180           choosing-strategy: '{choosing-strategy}'
181           submodule:
182             recursive: '{submodule-recursive}'
183
184 ###### WRAPPERS
185 - wrapper:
186     name: build-timeout
187     wrappers:
188       - timeout:
189           type: absolute
190           timeout: 360
191           fail: true
192
193 - wrapper:
194     # This wrapper is used for all jobs that require no-activity timeouts
195     name: fdio-infra-wrappers-non-activity-timeout
196     wrappers:
197       - timeout:
198           type: no-activity
199           timeout: '{build-timeout}'
200           fail: true
201       - timestamps
202       - ssh-agent-credentials:
203           users:
204             - 'jenkins-gerrit-credentials'
205       - jclouds:
206           single-use: true
207       - openstack:
208           single-use: true
209
210 - wrapper:
211     # This wrapper is required for all jobs as it configures the wrappers
212     # needed by the fd.io infra.
213     name: fdio-infra-wrappers
214     wrappers:
215       - timeout:
216           type: absolute
217           timeout: '{build-timeout}'
218           timeout-var: 'BUILD_TIMEOUT'
219           fail: true
220       - timestamps
221       - ssh-agent-credentials:
222           users:
223             - 'jenkins-gerrit-credentials'
224       - jclouds:
225           single-use: true
226       - openstack:
227           single-use: true
228
229 ###### TRIGGERS
230 - trigger:
231     name: gerrit-trigger-patch-submitted
232     triggers:
233       - gerrit:
234           server-name: 'Primary'
235           trigger-on:
236             - patchset-created-event:
237                 exclude-drafts: 'true'
238                 exclude-trivial-rebase: 'false'
239                 exclude-no-code-change: 'false'
240             - draft-published-event
241             - comment-added-contains-event:
242                 comment-contains-value: 'recheck'
243             - comment-added-contains-event:
244                 comment-contains-value: 'reverify'
245           projects:
246             - project-compare-type: 'ANT'
247               project-pattern: '{name}'
248               branches:
249                 - branch-compare-type: 'ANT'
250                   branch-pattern: '**/{branch}'
251
252 - trigger:
253     name: gerrit-trigger-trivial-patch-submitted
254     triggers:
255       - gerrit:
256           server-name: 'Primary'
257           trigger-on:
258             - patchset-created-event:
259                 exclude-drafts: 'true'
260                 exclude-trivial-rebase: 'false'
261                 exclude-no-code-change: 'true'
262             - draft-published-event
263             - comment-added-contains-event:
264                 comment-contains-value: 'recheck'
265             - comment-added-contains-event:
266                 comment-contains-value: 'reverify'
267           projects:
268             - project-compare-type: 'ANT'
269               project-pattern: '{name}'
270               branches:
271                 - branch-compare-type: 'ANT'
272                   branch-pattern: '**/{branch}'
273
274 - trigger:
275     name: gerrit-trigger-os-trivial-patch-submitted
276     triggers:
277       - gerrit:
278           server-name: 'Primary'
279           trigger-on:
280             - comment-added-contains-event:
281                 comment-contains-value: 'os-check'
282             - comment-added-contains-event:
283                 comment-contains-value: 'os-verify'
284           projects:
285             - project-compare-type: 'ANT'
286               project-pattern: '{name}'
287               branches:
288                 - branch-compare-type: 'ANT'
289                   branch-pattern: '**/{branch}'
290
291 - trigger:
292     name: gerrit-trigger-trivial-patch-submitted-skip-vote
293     triggers:
294       - gerrit:
295           server-name: 'Primary'
296           trigger-on:
297             - patchset-created-event:
298                 exclude-drafts: 'true'
299                 exclude-trivial-rebase: 'false'
300                 exclude-no-code-change: 'true'
301             - draft-published-event
302             - comment-added-contains-event:
303                 comment-contains-value: 'recheck'
304             - comment-added-contains-event:
305                 comment-contains-value: 'reverify'
306           projects:
307             - project-compare-type: 'ANT'
308               project-pattern: '{name}'
309               branches:
310                 - branch-compare-type: 'ANT'
311                   branch-pattern: '**/{branch}'
312           skip-vote:
313             successful: true
314             failed: true
315             unstable: true
316             notbuilt: true
317
318 - trigger:
319     name: gerrit-trigger-manually-triggered
320     triggers:
321       - gerrit:
322           server-name: 'Primary'
323           trigger-on:
324             - comment-added-contains-event:
325                 comment-contains-value: '{comment-trigger-value}'
326           projects:
327             - project-compare-type: 'ANT'
328               project-pattern: '{name}'
329               branches:
330                 - branch-compare-type: 'ANT'
331                   branch-pattern: '**/{branch}'
332
333 - trigger:
334     name: gerrit-trigger-patch-merged
335     triggers:
336       - gerrit:
337           server-name: 'Primary'
338           trigger-on:
339             - change-merged-event
340             - comment-added-contains-event:
341                 comment-contains-value: 'remerge'
342           projects:
343             - project-compare-type: 'ANT'
344               project-pattern: '{name}'
345               branches:
346                 - branch-compare-type: 'ANT'
347                   branch-pattern: '**/{branch}'
348           # Force Jenkins always vote the values it should already have voted
349           # during the prior verify phase
350           override-votes: true
351           gerrit-build-started-verified-value: 1
352           gerrit-build-successful-verified-value: 1
353           gerrit-build-failed-verified-value: 1
354           gerrit-build-unstable-verified-value: 1
355           gerrit-build-notbuilt-verified-value: 1
356           gerrit-build-started-codereview-value: 0
357           gerrit-build-successful-codereview-value: 0
358           gerrit-build-failed-codereview-value: 0
359           gerrit-build-unstable-codereview-value: 0
360           gerrit-build-notbuilt-codereview-value: 0
361
362 - trigger:
363     name: gerrit-trigger-os-patch-merged
364     triggers:
365       - gerrit:
366           server-name: 'Primary'
367           trigger-on:
368             - comment-added-contains-event:
369                 comment-contains-value: 'os-merge'
370           projects:
371             - project-compare-type: 'ANT'
372               project-pattern: '{name}'
373               branches:
374                 - branch-compare-type: 'ANT'
375                   branch-pattern: '**/{branch}'
376           # Force Jenkins always vote the values it should already have voted
377           # during the prior verify phase
378           override-votes: true
379           gerrit-build-started-verified-value: 1
380           gerrit-build-successful-verified-value: 1
381           gerrit-build-failed-verified-value: 1
382           gerrit-build-unstable-verified-value: 1
383           gerrit-build-notbuilt-verified-value: 1
384           gerrit-build-started-codereview-value: 0
385           gerrit-build-successful-codereview-value: 0
386           gerrit-build-failed-codereview-value: 0
387           gerrit-build-unstable-codereview-value: 0
388           gerrit-build-notbuilt-codereview-value: 0
389
390 # Publishers
391 - publisher:
392     name: archive-artifacts
393     publishers:
394       - archive:
395           artifacts: '{artifacts}'
396           allow-empty: true
397           fingerprint: true
398           latest-only: true
399
400 - publisher:
401     name: email-notification
402     publishers:
403       - email-ext:
404           recipients: 'nobody@projectrotterdam.info'
405           reply-to: ''
406           content-type: default
407           # yamllint disable-line rule:line-length
408           subject: '{email-prefix} $PROJECT_NAME - Build # $BUILD_NUMBER - $BUILD_STATUS!'
409           body: |
410               $PROJECT_NAME - Build # $BUILD_NUMBER - $BUILD_STATUS:
411
412               Check console output at $BUILD_URL to view the results.
413           unstable: true
414           fixed: true
415           send-to:
416             - developers
417             - recipients
418
419 - publisher:
420     name: jacoco-report
421     publishers:
422       - jacoco:
423           exec-pattern: '**/**.exec'
424           class-pattern: '**/classes'
425           source-pattern: '**/src/main/java'
426           # yamllint disable-line rule:line-length
427           exclusion-pattern: '**/gen**,**/generated-sources/**,**/yang-gen**,**/pax/**'
428           status-update: true
429           targets:
430             - branch:
431               healthy: 10
432               unhealthy: 20
433             - method:
434               healthy: 50
435               unhealthy: 40
436
437 - publisher:
438     name: robot-report
439     publishers:
440       - robot:
441           output-path: '{output-path}'
442           other-files: ''
443
444 - publisher:
445     name: fdio-infra-shiplogs
446     # To archive things, the job will need to create an "archives" directory in
447     # the workspace and this macro will handle copying the contents of the
448     # archives directory.
449     #
450     # Uses the build parameter ARCHIVE_ARTIFACTS if not empty to find files to
451     # archive. You can pass globstar patterns for example "**/*.xml **/*.log" as
452     # the archive pattern. This is a space separated list of files to archive.
453     #
454     # Also ensure that the workspace is cleaned up at the end of the build.
455     publishers:
456       - postbuildscript:
457           builders:
458             - role: BOTH
459               build-on:
460                 - ABORTED
461                 - FAILURE
462                 - NOT_BUILT
463                 - SUCCESS
464                 - UNSTABLE
465               build-steps:
466                 - shell: !include-raw: include-raw-deploy-archives.sh
467                 - maven-target:
468                     maven-version: '{maven-version}'
469                     pom: '.archives/deploy-archives.xml'
470                     goals: 'clean deploy -V -B -q -Dmaven.repo.local=/tmp/r'
471                     settings: 'jenkins-log-archives-settings'
472                     settings-type: cfp
473                     global-settings: 'global-settings'
474                     global-settings-type: cfp
475                 - description-setter:
476                     regexp: '^Build logs: .*'
477           mark-unstable-if-failed: true
478       - workspace-cleanup:
479           fail-build: false
480
481 - publisher:
482     name: retry-build-on-builder-error
483     publishers:
484       - naginator:
485           max-failed-builds: 1
486
487 ###### BUILDERS
488 - builder:
489     name: ci-management-check-unicode
490     builders:
491       - shell: |
492           $WORKSPACE/scripts/check-unicode.sh jjb/
493
494 - builder:
495     name: provide-maven-settings
496     builders:
497       - config-file-provider:
498           files:
499             - file-id: '{global-settings-file}'
500               variable: 'GLOBAL_SETTINGS_FILE'
501             - file-id: '{settings-file}'
502               variable: 'SETTINGS_FILE'
503
504 - property:
505     name: fdio-infra-properties
506     properties:
507       - build-discarder:
508           days-to-keep: '{build-days-to-keep}'
509           num-to-keep: '{build-num-to-keep}'
510
511
512 - builder:
513     name: packer-validate
514     builders:
515       - config-file-provider:
516           files:
517             - file-id: 'packer-cloud-env'
518               variable: 'CLOUDENV'
519       # yamllint disable rule:line-length
520       - shell: |
521           #!/bin/bash
522           cd packer
523           varfiles="../packer/vars/*"
524           templates="../packer/templates/*"
525           provision="../packer/provision/*.sh"
526           for v in $varfiles; do
527               [[ "${v##*/}" =~ ^(cloud-env.*)$ ]] && continue
528               for t in $templates; do
529                   export PACKER_LOG="yes" && \
530                   export PACKER_LOG_PATH="packer-validate-${v##*/}-${t##*/}.log" && \
531                               packer.io validate -var-file=$CLOUDENV \
532                               -var-file=$v $t
533                   if [ $? -ne 0 ]; then
534                      break
535                   fi
536               done
537           done
538           for p in $provision; do
539               /bin/bash -n $p > provision-validate-${p##*/}.log 2>&1
540               if [ $? -ne 0 ]; then
541                  break
542               fi
543           done
544       # yamllint enable
545
546 - builder:
547     name: packer-build
548     builders:
549       - config-file-provider:
550           files:
551             - file-id: 'packer-cloud-env'
552               variable: 'CLOUDENV'
553       - shell: |
554           #!/bin/bash
555           cd packer
556           export PACKER_LOG="yes" && \
557           export PACKER_LOG_PATH="packer-build.log" && \
558                       packer.io build -var-file=$CLOUDENV \
559                       -var-file=../packer/vars/{platform}.json \
560                       ../packer/templates/{template}.json