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