Merge "Update sigul macro to support sign mode"
[releng/global-jjb.git] / jjb / lf-maven-jobs.yaml
1 ---
2 # This file contains job templates for Maven projects.
3
4 ##########
5 # Macros #
6 ##########
7
8 - builder:
9     name: lf-maven-build
10     builders:
11       - inject:
12           properties-content: 'MAVEN_GOALS={mvn-goals}'
13       - shell: !include-raw-escape:
14           - ../shell/common-variables.sh
15           - ../shell/maven-build.sh
16
17 - builder:
18     name: lf-maven-deploy
19     builders:
20       - shell: !include-raw:
21           - ../shell/common-variables.sh
22           - ../shell/maven-deploy.sh
23
24 - builder:
25     name: lf-maven-stage
26     builders:
27       - lf-provide-maven-settings:
28           global-settings-file: '{mvn-global-settings}'
29           settings-file: '{mvn-settings}'
30       - lf-infra-create-netrc:
31           server-id: '{mvn-staging-id}'
32       # include-raw-escape fails due to JJB bug
33       - shell: !include-raw-escape:
34           - ../shell/common-variables.sh
35           - ../shell/maven-stage.sh
36       - lf-provide-maven-settings-cleanup
37
38 - builder:
39     name: lf-update-java-alternatives
40     builders:
41       - inject:
42           # Work around inject plugin overriding our GIT_URL variable incorrectly
43           # https://issues.jenkins-ci.org/browse/JENKINS-49775
44           properties-content: |
45             SET_JDK_VERSION={java-version}
46             GIT_URL="$GIT_URL"
47       - shell: !include-raw-escape: ../shell/update-java-alternatives.sh
48       - inject:
49           properties-file: '/tmp/java.env'
50
51 ####################
52 # COMMON FUNCTIONS #
53 ####################
54
55 - lf_maven_common: &lf_maven_common
56     name: lf-maven-common
57
58     ######################
59     # Default parameters #
60     ######################
61
62     archive-artifacts: >
63       **/*.log
64       **/hs_err_*.log
65       **/target/**/feature.xml
66       **/target/failsafe-reports/failsafe-summary.xml
67       **/target/surefire-reports/*-output.txt
68
69     #####################
70     # Job Configuration #
71     #####################
72
73     project-type: freestyle
74     node: '{build-node}'
75
76     properties:
77       - lf-infra-properties:
78           build-days-to-keep: '{build-days-to-keep}'
79
80     parameters:
81       - lf-infra-parameters:
82           project: '{project}'
83           branch: '{branch}'
84           stream: '{stream}'
85       - lf-infra-maven-parameters:
86           mvn-opts: '{mvn-opts}'
87           mvn-params: '{mvn-params}'
88           mvn-version: '{mvn-version}'
89       - string:
90           name: ARCHIVE_ARTIFACTS
91           default: '{archive-artifacts}'
92           description: Artifacts to archive to the logs server.
93
94     wrappers:
95       - lf-infra-wrappers:
96           build-timeout: '{build-timeout}'
97           jenkins-ssh-credential: '{jenkins-ssh-credential}'
98
99     publishers:
100       # TODO: Make email notification work.
101       # - lf-infra-email-notify:
102       #     email-recipients: '{email-recipients}'
103       #     email-prefix: '[releng]'
104       - lf-infra-publish
105
106 #############
107 # Maven CLM #
108 #############
109
110 - lf_maven_clm: &lf_maven_clm
111     name: lf-maven-clm
112
113     ######################
114     # Default parameters #
115     ######################
116
117     branch: master
118     build-days-to-keep: 30  # 30 days for troubleshooting purposes
119     build-timeout: 60
120     disable-job: false
121     git-url: '$GIT_URL/$PROJECT'
122     github-url: 'https://github.com'
123     java-version: openjdk8
124     mvn-global-settings: global-settings
125     mvn-opts: ''
126     mvn-params: ''
127     mvn-version: mvn35
128     nexus-iq-namespace: ''  # Recommend a trailing dash when set. Example: odl-
129     nexus-iq-stage: 'build'
130     stream: master
131     submodule-recursive: true
132     submodule-timeout: 10
133
134     nexus_iq_scan_patterns:
135       - '**/*.ear'
136       - '**/*.jar'
137       - '**/*.tar.gz'
138       - '**/*.war'
139       - '**/*.zip'
140
141     gerrit_clm_triggers:
142       - comment-added-contains-event:
143           comment-contains-value: run-clm$
144
145     parameters:
146       - lf-infra-parameters:
147           project: '{project}'
148           branch: '{branch}'
149           stream: '{stream}'
150       - lf-infra-maven-parameters:
151           mvn-opts: '{mvn-opts}'
152           mvn-params: '{mvn-params}'
153           mvn-version: '{mvn-version}'
154       - string:
155           name: ARCHIVE_ARTIFACTS
156           default: '{archive-artifacts}'
157           description: Artifacts to archive to the logs server.
158       - lf-clm-parameters:
159           nexus-iq-stage: '{nexus-iq-stage}'
160
161     #####################
162     # Job Configuration #
163     #####################
164
165     disabled: '{disable-job}'
166
167     builders:
168       - lf-infra-pre-build
169       - lf-maven-install:
170           mvn-version: '{mvn-version}'
171       - lf-update-java-alternatives:
172           java-version: '{java-version}'
173       - lf-provide-maven-settings:
174           global-settings-file: '{mvn-global-settings}'
175           settings-file: '{mvn-settings}'
176       - shell: !include-raw-escape:
177           - ../shell/common-variables.sh
178           - ../shell/sonatype-clm.sh
179       - lf-provide-maven-settings-cleanup
180       - shell: 'find . -regex ".*karaf/target" | xargs rm -rf'
181       - nexus-iq-policy-evaluator:
182           stage: '{nexus-iq-stage}'
183           application-type: 'manual'
184           application-id: '{nexus-iq-namespace}{project-name}'
185           scan-patterns: '{obj:nexus_iq_scan_patterns}'
186           fail-build-network-error: true
187
188 - job-template:
189     name: '{project-name}-maven-clm-{stream}'
190     id: gerrit-maven-clm
191     <<: *lf_maven_common
192     # yamllint disable-line rule:key-duplicates
193     <<: *lf_maven_clm
194
195     scm:
196       - lf-infra-gerrit-scm:
197           jenkins-ssh-credential: '{jenkins-ssh-credential}'
198           git-url: '{git-url}'
199           refspec: '$GERRIT_REFSPEC'
200           branch: '$GERRIT_BRANCH'
201           submodule-recursive: '{submodule-recursive}'
202           submodule-timeout: '{submodule-timeout}'
203           choosing-strategy: default
204
205     triggers:
206       # Build weekly on Saturdays
207       - timed: 'H H * * 6'
208       - gerrit:
209           server-name: '{gerrit-server-name}'
210           trigger-on: '{obj:gerrit_clm_triggers}'
211           projects:
212             - project-compare-type: ANT
213               project-pattern: '{project}'
214               branches:
215                 - branch-compare-type: ANT
216                   branch-pattern: '**/{branch}'
217           skip-vote:
218             successful: true
219             failed: true
220             unstable: true
221             notbuilt: true
222
223 - job-template:
224     name: '{project-name}-maven-clm-{stream}'
225     id: github-maven-clm
226     <<: *lf_maven_common
227     # yamllint disable-line rule:key-duplicates
228     <<: *lf_maven_clm
229
230     properties:
231       - lf-infra-properties:
232           build-days-to-keep: '{build-days-to-keep}'
233       - github:
234           url: '{github-url}/{github-org}/{project}'
235
236     scm:
237       - lf-infra-github-scm:
238           url: '{git-clone-url}{github-org}/{project}'
239           refspec: ''
240           branch: 'refs/heads/{branch}'
241           submodule-recursive: '{submodule-recursive}'
242           submodule-timeout: '{submodule-timeout}'
243           choosing-strategy: default
244           jenkins-ssh-credential: '{jenkins-ssh-credential}'
245
246     triggers:
247       # Build weekly on Saturdays
248       - timed: 'H H * * 6'
249       - github-pull-request:
250           trigger-phrase: '^run-clm$'
251           only-trigger-phrase: true
252           status-context: 'CLM'
253           permit-all: true
254           github-hooks: true
255           org-list:
256             - '{github-org}'
257           white-list: '{obj:github_pr_whitelist}'
258           admin-list: '{obj:github_pr_admin_list}'
259           white-list-target-branches:
260             - '{branch}'
261
262 #########################
263 # Maven Javadoc Publish #
264 #########################
265
266 - lf_maven_javadoc_publish: &lf_maven_javadoc_publish
267     name: lf-maven-javadoc-publish
268
269     ######################
270     # Default parameters #
271     ######################
272
273     branch: master
274     build-days-to-keep: 30  # 30 days in case a release takes long to get approved.
275     build-timeout: 60
276     disable-job: false
277     git-url: '$GIT_URL/$PROJECT'
278     github-url: 'https://github.com'
279     java-version: openjdk8
280     mvn-global-settings: global-settings
281     mvn-opts: ''
282     mvn-params: ''
283     mvn-version: mvn35
284     stream: master
285     submodule-recursive: true
286     submodule-timeout: 10
287
288     gerrit_merge_triggers:
289       - change-merged-event
290       - comment-added-contains-event:
291           comment-contains-value: remerge$
292
293     #####################
294     # Job Configuration #
295     #####################
296
297     disabled: '{disable-job}'
298
299     builders:
300       - lf-infra-pre-build
301       - lf-maven-install:
302           mvn-version: '{mvn-version}'
303       - lf-update-java-alternatives:
304           java-version: '{java-version}'
305       - lf-provide-maven-settings:
306           global-settings-file: '{mvn-global-settings}'
307           settings-file: '{mvn-settings}'
308       - lf-infra-create-netrc:
309           server-id: '{mvn-site-id}'
310       - inject:
311           properties-content: 'DEPLOY_PATH={javadoc-path}'
312       - shell: !include-raw-escape:
313           - ../shell/common-variables.sh
314           - ../shell/maven-javadoc-generate.sh
315           - ../shell/maven-javadoc-publish.sh
316       - lf-provide-maven-settings-cleanup
317
318 - job-template:
319     name: '{project-name}-maven-javadoc-publish-{stream}-{java-version}'
320     id: gerrit-maven-javadoc-publish
321     <<: *lf_maven_common
322     # yamllint disable-line rule:key-duplicates
323     <<: *lf_maven_javadoc_publish
324
325     git-url: '$GIT_URL/$GERRIT_PROJECT'
326
327     scm:
328       - lf-infra-gerrit-scm:
329           git-url: '{git-url}'
330           refspec: ''
331           branch: '{branch}'
332           submodule-recursive: '{submodule-recursive}'
333           submodule-timeout: '{submodule-timeout}'
334           choosing-strategy: default
335           jenkins-ssh-credential: '{jenkins-ssh-credential}'
336
337     triggers:
338       - gerrit:
339           server-name: '{gerrit-server-name}'
340           trigger-on: '{obj:gerrit_merge_triggers}'
341           projects:
342             - project-compare-type: ANT
343               project-pattern: '{project}'
344               branches:
345                 - branch-compare-type: ANT
346                   branch-pattern: '**/{branch}'
347
348 - job-template:
349     name: '{project-name}-maven-javadoc-publish-{stream}-{java-version}'
350     id: github-maven-javadoc-publish
351     <<: *lf_maven_common
352     # yamllint disable-line rule:key-duplicates
353     <<: *lf_maven_javadoc_publish
354
355     properties:
356       - lf-infra-properties:
357           build-days-to-keep: '{build-days-to-keep}'
358       - github:
359           url: '{github-url}/{github-org}/{project}'
360
361     scm:
362       - lf-infra-github-scm:
363           url: '{git-clone-url}{github-org}/{project}'
364           refspec: ''
365           branch: '{branch}'
366           submodule-recursive: '{submodule-recursive}'
367           submodule-timeout: '{submodule-timeout}'
368           choosing-strategy: default
369           jenkins-ssh-credential: '{jenkins-ssh-credential}'
370
371     triggers:
372       - github
373       - pollscm:
374           cron: ''
375       - github-pull-request:
376           trigger-phrase: '^remerge$'
377           only-trigger-phrase: true
378           status-context: 'Maven Javadoc Publish'
379           permit-all: true
380           github-hooks: true
381           org-list:
382             - '{github-org}'
383           white-list: '{obj:github_pr_whitelist}'
384           admin-list: '{obj:github_pr_admin_list}'
385           white-list-target-branches:
386             - '{branch}'
387
388 ########################
389 # Maven Javadoc Verify #
390 ########################
391
392 - lf_maven_javadoc_verify: &lf_maven_javadoc_verify
393     name: lf-maven-javadoc-verify
394
395     ######################
396     # Default parameters #
397     ######################
398
399     branch: master
400     build-days-to-keep: 30  # 30 days in case a release takes long to get approved.
401     build-timeout: 60
402     disable-job: false
403     git-url: '$GIT_URL/$PROJECT'
404     github-url: 'https://github.com'
405     java-version: openjdk8
406     mvn-global-settings: global-settings
407     mvn-opts: ''
408     mvn-params: ''
409     mvn-version: mvn35
410     stream: master
411     submodule-recursive: true
412     submodule-timeout: 10
413
414     gerrit_verify_triggers:
415       - patchset-created-event:
416           exclude-drafts: true
417           exclude-trivial-rebase: false
418           exclude-no-code-change: false
419       - draft-published-event
420       - comment-added-contains-event:
421           comment-contains-value: '^Patch Set[ ]+[0-9]+:([ ]+|[\n]+)(recheck|reverify)$'
422
423     #####################
424     # Job Configuration #
425     #####################
426
427     concurrent: true
428     disabled: '{disable-job}'
429
430     builders:
431       - lf-infra-pre-build
432       - lf-maven-install:
433           mvn-version: '{mvn-version}'
434       - lf-update-java-alternatives:
435           java-version: '{java-version}'
436       - lf-provide-maven-settings:
437           global-settings-file: '{mvn-global-settings}'
438           settings-file: '{mvn-settings}'
439       - shell: !include-raw-escape:
440           - ../shell/common-variables.sh
441           - ../shell/maven-javadoc-generate.sh
442       - lf-provide-maven-settings-cleanup
443
444 - job-template:
445     name: '{project-name}-maven-javadoc-verify-{stream}-{java-version}'
446     id: gerrit-maven-javadoc-verify
447     <<: *lf_maven_common
448     # yamllint disable-line rule:key-duplicates
449     <<: *lf_maven_javadoc_verify
450
451     scm:
452       - lf-infra-gerrit-scm:
453           jenkins-ssh-credential: '{jenkins-ssh-credential}'
454           git-url: '{git-url}'
455           refspec: '$GERRIT_REFSPEC'
456           branch: '$GERRIT_BRANCH'
457           submodule-recursive: '{submodule-recursive}'
458           submodule-timeout: '{submodule-timeout}'
459           choosing-strategy: gerrit
460
461     triggers:
462       - gerrit:
463           server-name: '{gerrit-server-name}'
464           trigger-on: '{obj:gerrit_verify_triggers}'
465           projects:
466             - project-compare-type: ANT
467               project-pattern: '{project}'
468               branches:
469                 - branch-compare-type: ANT
470                   branch-pattern: '**/{branch}'
471
472 - job-template:
473     name: '{project-name}-maven-javadoc-verify-{stream}-{java-version}'
474     id: github-maven-javadoc-verify
475     <<: *lf_maven_common
476     # yamllint disable-line rule:key-duplicates
477     <<: *lf_maven_javadoc_verify
478
479     properties:
480       - lf-infra-properties:
481           build-days-to-keep: '{build-days-to-keep}'
482       - github:
483           url: '{github-url}/{github-org}/{project}'
484
485     scm:
486       - lf-infra-github-scm:
487           url: '{git-clone-url}{github-org}/{project}'
488           refspec: '+refs/pull/*:refs/remotes/origin/pr/*'
489           branch: '$sha1'
490           submodule-recursive: '{submodule-recursive}'
491           submodule-timeout: '{submodule-timeout}'
492           choosing-strategy: default
493           jenkins-ssh-credential: '{jenkins-ssh-credential}'
494
495     triggers:
496       - github-pull-request:
497           trigger-phrase: ^(recheck|reverify)$
498           only-trigger-phrase: false
499           status-context: 'Maven Javadoc Verify'
500           permit-all: true
501           github-hooks: true
502           white-list-target-branches:
503             - '{branch}'
504
505 ###############
506 # Maven Merge #
507 ###############
508
509 - lf_maven_merge: &lf_maven_merge
510     name: lf-maven-merge
511
512     ######################
513     # Default parameters #
514     ######################
515
516     branch: master
517     build-days-to-keep: 30  # 30 days in case we need to troubleshoot
518     build-timeout: 60
519     cron: '@daily'
520     disable-job: false
521     git-url: '$GIT_URL/$PROJECT'
522     github-url: 'https://github.com'
523     java-version: openjdk8
524     mvn-global-settings: global-settings
525     mvn-goals: clean deploy
526     mvn-opts: ''
527     mvn-params: '-Dmerge'
528     mvn-version: mvn35
529     nexus-cut-dirs: 6  # Number of dirs in the Nexus path to remove for wget -r.
530     stream: master
531     submodule-recursive: true
532     submodule-timeout: 10
533
534     gerrit_merge_triggers:
535       - change-merged-event
536       - comment-added-contains-event:
537           comment-contains-value: remerge$
538
539     gerrit_trigger_file_paths:
540       - compare-type: REG_EXP
541         pattern: '.*'
542
543     # github_included_regions MUST match gerrit_trigger_file_paths
544     github_included_regions:
545       - '.*'
546
547     post_build_trigger: ''
548
549     #####################
550     # Job Configuration #
551     #####################
552
553     disabled: '{disable-job}'
554
555     builders:
556       - lf-infra-pre-build
557       - lf-jacoco-nojava-workaround
558       - lf-maven-install:
559           mvn-version: '{mvn-version}'
560       - lf-update-java-alternatives:
561           java-version: '{java-version}'
562       - lf-provide-maven-settings:
563           global-settings-file: '{mvn-global-settings}'
564           settings-file: '{mvn-settings}'
565       - lf-infra-create-netrc:
566           server-id: '{mvn-snapshot-id}'
567       - inject:
568           properties-content: |
569               NEXUS_CUT_DIRS={nexus-cut-dirs}
570               NEXUS_REPO={nexus-snapshot-repo}
571       - shell: !include-raw-escape: ../shell/maven-fetch-metadata.sh
572       - lf-maven-build:
573           mvn-goals: '{mvn-goals}'
574       - lf-maven-deploy
575       - lf-provide-maven-settings-cleanup
576
577     publishers:
578       - findbugs
579       - lf-jacoco-report
580       - lf-infra-publish
581       - trigger-parameterized-builds: '{obj:post_build_trigger}'
582
583 - job-template:
584     name: '{project-name}-maven-merge-{stream}'
585     id: gerrit-maven-merge
586     <<: *lf_maven_common
587     # yamllint disable-line rule:key-duplicates
588     <<: *lf_maven_merge
589
590     scm:
591       - lf-infra-gerrit-scm:
592           jenkins-ssh-credential: '{jenkins-ssh-credential}'
593           git-url: '{git-url}'
594           refspec: '$GERRIT_REFSPEC'
595           branch: '$GERRIT_BRANCH'
596           submodule-recursive: '{submodule-recursive}'
597           submodule-timeout: '{submodule-timeout}'
598           choosing-strategy: default
599
600     triggers:
601       - timed: '{obj:cron}'
602       - gerrit:
603           server-name: '{gerrit-server-name}'
604           trigger-on: '{obj:gerrit_merge_triggers}'
605           projects:
606             - project-compare-type: ANT
607               project-pattern: '{project}'
608               branches:
609                 - branch-compare-type: ANT
610                   branch-pattern: '**/{branch}'
611               file-paths: '{obj:gerrit_trigger_file_paths}'
612
613 - job-template:
614     name: '{project-name}-maven-merge-{stream}'
615     id: github-maven-merge
616     <<: *lf_maven_common
617     # yamllint disable-line rule:key-duplicates
618     <<: *lf_maven_merge
619
620     properties:
621       - lf-infra-properties:
622           build-days-to-keep: '{build-days-to-keep}'
623       - github:
624           url: '{github-url}/{github-org}/{project}'
625
626     scm:
627       - lf-infra-github-scm:
628           url: '{git-clone-url}{github-org}/{project}'
629           refspec: ''
630           branch: 'refs/heads/{branch}'
631           submodule-recursive: '{submodule-recursive}'
632           submodule-timeout: '{submodule-timeout}'
633           choosing-strategy: default
634           jenkins-ssh-credential: '{jenkins-ssh-credential}'
635
636     triggers:
637       - timed: '{obj:cron}'
638       - github
639       - pollscm:
640           cron: ''
641       - github-pull-request:
642           trigger-phrase: '^remerge$'
643           only-trigger-phrase: true
644           status-context: 'Maven Merge'
645           permit-all: true
646           github-hooks: true
647           org-list:
648             - '{github-org}'
649           white-list: '{obj:github_pr_whitelist}'
650           admin-list: '{obj:github_pr_admin_list}'
651           white-list-target-branches:
652             - '{branch}'
653           included-regions: '{obj:github_included_regions}'
654
655 ###############
656 # Maven Stage #
657 ###############
658
659 - lf_maven_stage: &lf_maven_stage
660     name: lf-maven-stage
661
662     ######################
663     # Default parameters #
664     ######################
665
666     branch: master
667     build-days-to-keep: 30  # 30 days in case a release takes long to get approved.
668     build-timeout: 60
669     cron: '@daily'
670     disable-job: false
671     git-url: '$GIT_URL/$PROJECT'
672     github-url: 'https://github.com'
673     java-version: openjdk8
674     mvn-central: false
675     mvn-global-settings: global-settings
676     mvn-goals: clean deploy
677     mvn-opts: ''
678     mvn-params: ''
679     mvn-version: mvn35
680     ossrh-profile-id: ''
681     sign-artifacts: false
682     sign-mode: serial
683     stream: master
684     submodule-recursive: true
685     submodule-timeout: 10
686
687     gerrit_release_triggers:
688       - comment-added-contains-event:
689           comment-contains-value: stage-release$
690
691     #####################
692     # Job Configuration #
693     #####################
694
695     disabled: '{disable-job}'
696
697     parameters:
698       - lf-infra-parameters:
699           project: '{project}'
700           branch: '{branch}'
701           stream: '{stream}'
702       - lf-infra-maven-parameters:
703           mvn-opts: '{mvn-opts}'
704           mvn-params: '{mvn-params}'
705           mvn-version: '{mvn-version}'
706           staging-profile-id: '{staging-profile-id}'
707       - string:
708           name: ARCHIVE_ARTIFACTS
709           default: '{archive-artifacts}'
710           description: Artifacts to archive to the logs server.
711       - string:
712           name: STAGING_PROFILE_ID
713           default: '{staging-profile-id}'
714           description: Nexus staging profile ID.
715
716     builders:
717       - lf-infra-pre-build
718       - lf-jacoco-nojava-workaround
719       - lf-maven-install:
720           mvn-version: '{mvn-version}'
721       - lf-update-java-alternatives:
722           java-version: '{java-version}'
723       - lf-provide-maven-settings:
724           global-settings-file: '{mvn-global-settings}'
725           settings-file: '{mvn-settings}'
726       - shell: !include-raw-escape: ../shell/maven-patch-release.sh
727       - lf-maven-build:
728           mvn-goals: '{mvn-goals}'
729       - lf-sigul-sign-dir:
730           sign-artifacts: '{sign-artifacts}'
731           sign-dir: '$WORKSPACE/m2repo'
732           sign-mode: '{sign-mode}'
733       - lf-maven-stage:
734           mvn-global-settings: '{mvn-global-settings}'
735           mvn-settings: '{mvn-settings}'
736           mvn-staging-id: '{mvn-staging-id}'
737       - lf-maven-central:
738           mvn-central: '{mvn-central}'
739           mvn-global-settings: '{mvn-global-settings}'
740           mvn-settings: '{mvn-settings}'
741           ossrh-profile-id: '{ossrh-profile-id}'
742       - lf-provide-maven-settings-cleanup
743
744 - job-template:
745     name: '{project-name}-maven-stage-{stream}'
746     id: gerrit-maven-stage
747     <<: *lf_maven_common
748     # yamllint disable-line rule:key-duplicates
749     <<: *lf_maven_stage
750
751     scm:
752       - lf-infra-gerrit-scm:
753           jenkins-ssh-credential: '{jenkins-ssh-credential}'
754           git-url: '{git-url}'
755           refspec: '$GERRIT_REFSPEC'
756           branch: '$GERRIT_BRANCH'
757           submodule-recursive: '{submodule-recursive}'
758           submodule-timeout: '{submodule-timeout}'
759           choosing-strategy: default
760
761     triggers:
762       - timed: '{obj:cron}'
763       - gerrit:
764           server-name: '{gerrit-server-name}'
765           trigger-on: '{obj:gerrit_release_triggers}'
766           projects:
767             - project-compare-type: ANT
768               project-pattern: '{project}'
769               branches:
770                 - branch-compare-type: ANT
771                   branch-pattern: '**/{branch}'
772
773 - job-template:
774     name: '{project-name}-maven-stage-{stream}'
775     id: github-maven-stage
776     <<: *lf_maven_common
777     # yamllint disable-line rule:key-duplicates
778     <<: *lf_maven_stage
779
780     properties:
781       - lf-infra-properties:
782           build-days-to-keep: '{build-days-to-keep}'
783       - github:
784           url: '{github-url}/{github-org}/{project}'
785
786     scm:
787       - lf-infra-github-scm:
788           url: '{git-clone-url}{github-org}/{project}'
789           refspec: '+refs/pull/*:refs/remotes/origin/pr/*'
790           branch: '{branch}'
791           submodule-recursive: '{submodule-recursive}'
792           submodule-timeout: '{submodule-timeout}'
793           choosing-strategy: default
794           jenkins-ssh-credential: '{jenkins-ssh-credential}'
795
796     triggers:
797       - timed: '{obj:cron}'
798       - github-pull-request:
799           trigger-phrase: '^build release$'
800           only-trigger-phrase: true
801           status-context: 'Maven Release'
802           permit-all: true
803           github-hooks: true
804           white-list-target-branches:
805             - '{branch}'
806
807 ###############
808 # Maven Sonar #
809 ###############
810
811 - lf_maven_sonar: &lf_maven_sonar
812     name: lf-maven-sonar
813
814     ######################
815     # Default parameters #
816     ######################
817
818     branch: master  # Sonar should always be run on master branch
819     build-days-to-keep: 7
820     build-timeout: 60
821     cron: 'H H * * 6'  # run weekly
822     disable-job: false
823     git-url: '$GIT_URL/$PROJECT'
824     github-url: 'https://github.com'
825     java-version: openjdk8
826     mvn-global-settings: global-settings
827     mvn-opts: ''
828     mvn-params: ''
829     mvn-version: mvn35
830     sonar-mvn-goal: 'sonar:sonar'
831     sonarcloud: false
832     sonarcloud-project-key: ''
833     sonarcloud-project-organization: ''
834     sonarcloud-api-token: ''
835     stream: master
836     submodule-recursive: true
837     submodule-timeout: 10
838
839     gerrit_sonar_triggers:
840       - comment-added-contains-event:
841           comment-contains-value: run-sonar$
842
843     #####################
844     # Job Configuration #
845     #####################
846
847     disabled: '{disable-job}'
848
849     parameters:
850       - lf-infra-parameters:
851           project: '{project}'
852           branch: '{branch}'
853           stream: '{stream}'
854       - lf-infra-maven-parameters:
855           mvn-opts: '{mvn-opts}'
856           mvn-params: '{mvn-params}'
857           mvn-version: '{mvn-version}'
858       - string:
859           name: ARCHIVE_ARTIFACTS
860           default: '{archive-artifacts}'
861           description: Artifacts to archive to the logs server.
862       - string:
863           name: SONAR_MAVEN_GOAL
864           default: '{sonar-mvn-goal}'
865           description: |
866               Maven goals to pass to the Sonar call. Typically sonar:sonar
867               however to use a specific version of the sonar-maven-plugin we
868               can call "org.codehaus.mojo:sonar-maven-plugin:3.3.0.603:sonar".
869
870     triggers:
871       - timed: '{obj:cron}'
872       - gerrit:
873           server-name: '{gerrit-server-name}'
874           trigger-on: '{obj:gerrit_sonar_triggers}'
875           projects:
876             - project-compare-type: 'ANT'
877               project-pattern: '{project}'
878               branches:
879                 - branch-compare-type: 'ANT'
880                   branch-pattern: '**/master'
881           skip-vote:
882             successful: true
883             failed: true
884             unstable: true
885             notbuilt: true
886
887     builders:
888       - lf-infra-pre-build
889       # With SonarCloud
890       - conditional-step:
891           condition-kind: boolean-expression
892           condition-expression: '{sonarcloud}'
893           steps:
894             - shell: echo 'Using SonarCloud'
895             - lf-infra-maven-sonarcloud:
896                 java-version: '{java-version}'
897                 mvn-settings: '{mvn-settings}'
898                 mvn-version: '{mvn-version}'
899                 sonarcloud-project-key: '{sonarcloud-project-key}'
900                 sonarcloud-project-organization: '{sonarcloud-project-organization}'
901                 sonarcloud-api-token: '{sonarcloud-api-token}'
902       # With SonarQube
903       - conditional-step:
904           condition-kind: not
905           condition-operand:
906             condition-kind: boolean-expression
907             condition-expression: '{sonarcloud}'
908           steps:
909             - shell: echo 'Using SonarQube'
910             - lf-infra-maven-sonar:
911                 java-version: '{java-version}'
912                 mvn-settings: '{mvn-settings}'
913                 mvn-version: '{mvn-version}'
914
915     publishers:
916       - lf-jacoco-report
917       - findbugs
918       - lf-infra-publish
919
920 - builder:
921     name: lf-infra-maven-sonar
922     # Run a Sonar build with Maven
923     builders:
924       - lf-maven-install:
925           mvn-version: '{mvn-version}'
926       - lf-update-java-alternatives:
927           java-version: '{java-version}'
928       - inject:
929           # Switch this to the sonar wrapper when JJB 2.0 is available
930           properties-content: SONAR_HOST_URL=$SONAR_URL
931       - lf-provide-maven-settings:
932           global-settings-file: global-settings
933           settings-file: '{mvn-settings}'
934       - shell: !include-raw-escape:
935           - ../shell/common-variables.sh
936           - ../shell/maven-sonar.sh
937       - lf-provide-maven-settings-cleanup
938
939 - builder:
940     name: lf-infra-maven-sonarcloud
941     # Run a Sonar build with Maven
942     builders:
943       - lf-maven-install:
944           mvn-version: '{mvn-version}'
945       - lf-update-java-alternatives:
946           java-version: '{java-version}'
947       - inject:
948           # Switch this to the sonar wrapper when JJB 2.0 is available
949           properties-content: |
950             SONAR_HOST_URL=https://sonarcloud.io
951             PROJECT_KEY={sonarcloud-project-key}
952             PROJECT_ORGANIZATION={sonarcloud-project-organization}
953             API_TOKEN={sonarcloud-api-token}
954       - lf-provide-maven-settings:
955           global-settings-file: global-settings
956           settings-file: '{mvn-settings}'
957       - shell: !include-raw-escape:
958           - ../shell/common-variables.sh
959           - ../shell/maven-sonar.sh
960       - lf-provide-maven-settings-cleanup
961
962 - job-template:
963     name: '{project-name}-sonar'
964     id: gerrit-maven-sonar
965     <<: *lf_maven_common
966     # yamllint disable-line rule:key-duplicates
967     <<: *lf_maven_sonar
968
969     scm:
970       - lf-infra-gerrit-scm:
971           jenkins-ssh-credential: '{jenkins-ssh-credential}'
972           git-url: '{git-url}'
973           refspec: $GERRIT_REFSPEC
974           branch: $GERRIT_BRANCH
975           submodule-recursive: '{submodule-recursive}'
976           submodule-timeout: '{submodule-timeout}'
977           choosing-strategy: default
978
979 - job-template:
980     name: '{project-name}-sonar'
981     id: github-maven-sonar
982     <<: *lf_maven_common
983     # yamllint disable-line rule:key-duplicates
984     <<: *lf_maven_sonar
985
986     properties:
987       - lf-infra-properties:
988           build-days-to-keep: '{build-days-to-keep}'
989       - github:
990           url: '{github-url}/{github-org}/{project}'
991
992     scm:
993       - lf-infra-github-scm:
994           url: '{git-clone-url}{github-org}/{project}'
995           refspec: '+refs/pull/*:refs/remotes/origin/pr/*'
996           branch: '$sha1'
997           submodule-recursive: '{submodule-recursive}'
998           submodule-timeout: '{submodule-timeout}'
999           choosing-strategy: default
1000           jenkins-ssh-credential: '{jenkins-ssh-credential}'
1001
1002     triggers:
1003       - timed: '{obj:cron}'
1004       - github-pull-request:
1005           trigger-phrase: '^run-sonar$'
1006           only-trigger-phrase: true
1007           status-context: 'Maven Sonar'
1008           permit-all: true
1009           github-hooks: true
1010           org-list:
1011             - '{github-org}'
1012           white-list: '{obj:github_pr_whitelist}'
1013           admin-list: '{obj:github_pr_admin_list}'
1014           white-list-target-branches:
1015             - '{branch}'
1016
1017 ################
1018 # Maven Verify #
1019 ################
1020
1021 - lf_maven_verify: &lf_maven_verify
1022     name: lf-maven-verify
1023
1024     ######################
1025     # Default parameters #
1026     ######################
1027
1028     branch: master
1029     build-days-to-keep: 7
1030     build-timeout: 60
1031     disable-job: false
1032     git-url: '$GIT_URL/$PROJECT'
1033     github-url: 'https://github.com'
1034     java-version: openjdk8
1035     mvn-global-settings: global-settings
1036     mvn-goals: clean deploy
1037     mvn-opts: ''
1038     mvn-params: '-Dstream=$STREAM'
1039     mvn-version: mvn35
1040     stream: master
1041     submodule-recursive: true
1042     submodule-timeout: 10
1043
1044     gerrit_verify_triggers:
1045       - patchset-created-event:
1046           exclude-drafts: true
1047           exclude-trivial-rebase: false
1048           exclude-no-code-change: false
1049       - draft-published-event
1050       - comment-added-contains-event:
1051           comment-contains-value: '^Patch Set[ ]+[0-9]+:([ ]+|[\n]+)(recheck|reverify)$'
1052
1053     gerrit_trigger_file_paths:
1054       - compare-type: REG_EXP
1055         pattern: '.*'
1056
1057     # github_included_regions MUST match gerrit_trigger_file_paths
1058     github_included_regions:
1059       - '.*'
1060
1061     #####################
1062     # Job Configuration #
1063     #####################
1064
1065     concurrent: true
1066     disabled: '{disable-job}'
1067
1068     builders:
1069       - lf-infra-pre-build
1070       - lf-jacoco-nojava-workaround
1071       - lf-maven-install:
1072           mvn-version: '{mvn-version}'
1073       - lf-update-java-alternatives:
1074           java-version: '{java-version}'
1075       - lf-provide-maven-settings:
1076           global-settings-file: '{mvn-global-settings}'
1077           settings-file: '{mvn-settings}'
1078       - lf-maven-build:
1079           mvn-goals: '{mvn-goals}'
1080       - lf-provide-maven-settings-cleanup
1081
1082     publishers:
1083       - findbugs
1084       - lf-jacoco-report
1085       - lf-infra-publish
1086
1087 - job-template:
1088     name: '{project-name}-maven-verify-{stream}-{mvn-version}-{java-version}'
1089     id: gerrit-maven-verify
1090     <<: *lf_maven_common
1091     # yamllint disable-line rule:key-duplicates
1092     <<: *lf_maven_verify
1093
1094     scm:
1095       - lf-infra-gerrit-scm:
1096           jenkins-ssh-credential: '{jenkins-ssh-credential}'
1097           git-url: '{git-url}'
1098           refspec: '$GERRIT_REFSPEC'
1099           branch: '$GERRIT_BRANCH'
1100           submodule-recursive: '{submodule-recursive}'
1101           submodule-timeout: '{submodule-timeout}'
1102           choosing-strategy: gerrit
1103
1104     triggers:
1105       - gerrit:
1106           server-name: '{gerrit-server-name}'
1107           trigger-on: '{obj:gerrit_verify_triggers}'
1108           projects:
1109             - project-compare-type: ANT
1110               project-pattern: '{project}'
1111               branches:
1112                 - branch-compare-type: ANT
1113                   branch-pattern: '**/{branch}'
1114               file-paths: '{obj:gerrit_trigger_file_paths}'
1115
1116 - job-template:
1117     name: '{project-name}-maven-verify-{stream}-{mvn-version}-{java-version}'
1118     id: github-maven-verify
1119     <<: *lf_maven_common
1120     # yamllint disable-line rule:key-duplicates
1121     <<: *lf_maven_verify
1122
1123     properties:
1124       - lf-infra-properties:
1125           build-days-to-keep: '{build-days-to-keep}'
1126       - github:
1127           url: '{github-url}/{github-org}/{project}'
1128
1129     scm:
1130       - lf-infra-github-scm:
1131           url: '{git-clone-url}{github-org}/{project}'
1132           refspec: '+refs/pull/*:refs/remotes/origin/pr/*'
1133           branch: '$sha1'
1134           submodule-recursive: '{submodule-recursive}'
1135           submodule-timeout: '{submodule-timeout}'
1136           choosing-strategy: default
1137           jenkins-ssh-credential: '{jenkins-ssh-credential}'
1138
1139     triggers:
1140       - github-pull-request:
1141           trigger-phrase: '^(recheck|reverify)$'
1142           only-trigger-phrase: false
1143           status-context: 'Maven Verify'
1144           permit-all: true
1145           github-hooks: true
1146           white-list-target-branches:
1147             - '{branch}'
1148           included-regions: '{obj:github_included_regions}'
1149
1150 #############################
1151 # Maven Verify Dependencies #
1152 #############################
1153
1154 - lf_maven_verify_dependencies: &lf_maven_verify_dependencies
1155     name: lf-maven-verify-dependencies
1156
1157     ######################
1158     # Default parameters #
1159     ######################
1160
1161     branch: master
1162     build-days-to-keep: 7
1163     build-timeout: 60
1164     disable-job: false
1165     git-url: '$GIT_URL/$PROJECT'
1166     github-url: 'https://github.com'
1167     java-version: openjdk8
1168     mvn-global-settings: global-settings
1169     mvn-goals: clean deploy
1170     mvn-opts: ''
1171     mvn-params: '-Dstream=$STREAM'
1172     mvn-version: mvn35
1173     stream: master
1174     submodule-recursive: true
1175     submodule-timeout: 10
1176
1177     gerrit_verify_triggers:
1178       - comment-added-contains-event:
1179           comment-contains-value: 'recheck: [0-9 ]+'
1180     gerrit_trigger_file_paths:
1181       - compare-type: ANT
1182         pattern: '**'
1183
1184     #####################
1185     # Job Configuration #
1186     #####################
1187
1188     concurrent: true
1189     disabled: '{disable-job}'
1190
1191     builders:
1192       - lf-infra-pre-build
1193       - lf-jacoco-nojava-workaround
1194       - lf-maven-install:
1195           mvn-version: '{mvn-version}'
1196       - lf-update-java-alternatives:
1197           java-version: '{java-version}'
1198       - lf-provide-maven-settings:
1199           global-settings-file: '{mvn-global-settings}'
1200           settings-file: '{mvn-settings}'
1201       - lf-fetch-dependent-patches
1202       - shell: !include-raw-escape:
1203           - ../shell/common-variables.sh
1204           - ../shell/maven-build-deps.sh
1205       - lf-maven-build:
1206           mvn-goals: '{mvn-goals}'
1207       - lf-provide-maven-settings-cleanup
1208
1209     publishers:
1210       - findbugs
1211       - lf-jacoco-report
1212       - lf-infra-publish
1213
1214 - job-template:
1215     name: '{project-name}-maven-verify-deps-{stream}-{mvn-version}-{java-version}'
1216     id: gerrit-maven-verify-dependencies
1217     <<: *lf_maven_common
1218     # yamllint disable-line rule:key-duplicates
1219     <<: *lf_maven_verify_dependencies
1220
1221     scm:
1222       - lf-infra-gerrit-scm:
1223           jenkins-ssh-credential: '{jenkins-ssh-credential}'
1224           git-url: '{git-url}'
1225           refspec: '$GERRIT_REFSPEC'
1226           branch: '$GERRIT_BRANCH'
1227           submodule-recursive: '{submodule-recursive}'
1228           submodule-timeout: '{submodule-timeout}'
1229           choosing-strategy: gerrit
1230
1231     triggers:
1232       - gerrit:
1233           server-name: '{gerrit-server-name}'
1234           trigger-on: '{obj:gerrit_verify_triggers}'
1235           projects:
1236             - project-compare-type: ANT
1237               project-pattern: '{project}'
1238               branches:
1239                 - branch-compare-type: ANT
1240                   branch-pattern: '**/{branch}'
1241               file-paths: '{obj:gerrit_trigger_file_paths}'