Merge "Update lf-maven-stage macro with missing parts"
[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     stream: master
683     submodule-recursive: true
684     submodule-timeout: 10
685
686     gerrit_release_triggers:
687       - comment-added-contains-event:
688           comment-contains-value: stage-release$
689
690     #####################
691     # Job Configuration #
692     #####################
693
694     disabled: '{disable-job}'
695
696     parameters:
697       - lf-infra-parameters:
698           project: '{project}'
699           branch: '{branch}'
700           stream: '{stream}'
701       - lf-infra-maven-parameters:
702           mvn-opts: '{mvn-opts}'
703           mvn-params: '{mvn-params}'
704           mvn-version: '{mvn-version}'
705           staging-profile-id: '{staging-profile-id}'
706       - string:
707           name: ARCHIVE_ARTIFACTS
708           default: '{archive-artifacts}'
709           description: Artifacts to archive to the logs server.
710       - string:
711           name: STAGING_PROFILE_ID
712           default: '{staging-profile-id}'
713           description: Nexus staging profile ID.
714
715     builders:
716       - lf-infra-pre-build
717       - lf-jacoco-nojava-workaround
718       - lf-maven-install:
719           mvn-version: '{mvn-version}'
720       - lf-update-java-alternatives:
721           java-version: '{java-version}'
722       - lf-provide-maven-settings:
723           global-settings-file: '{mvn-global-settings}'
724           settings-file: '{mvn-settings}'
725       - shell: !include-raw-escape: ../shell/maven-patch-release.sh
726       - lf-maven-build:
727           mvn-goals: '{mvn-goals}'
728       - lf-sigul-sign-dir:
729           sign-artifacts: '{sign-artifacts}'
730           sign-dir: '$WORKSPACE/m2repo'
731       - lf-maven-stage:
732           mvn-global-settings: '{mvn-global-settings}'
733           mvn-settings: '{mvn-settings}'
734           mvn-staging-id: '{mvn-staging-id}'
735       - lf-maven-central:
736           mvn-central: '{mvn-central}'
737           mvn-global-settings: '{mvn-global-settings}'
738           mvn-settings: '{mvn-settings}'
739           ossrh-profile-id: '{ossrh-profile-id}'
740       - lf-provide-maven-settings-cleanup
741
742 - job-template:
743     name: '{project-name}-maven-stage-{stream}'
744     id: gerrit-maven-stage
745     <<: *lf_maven_common
746     # yamllint disable-line rule:key-duplicates
747     <<: *lf_maven_stage
748
749     scm:
750       - lf-infra-gerrit-scm:
751           jenkins-ssh-credential: '{jenkins-ssh-credential}'
752           git-url: '{git-url}'
753           refspec: '$GERRIT_REFSPEC'
754           branch: '$GERRIT_BRANCH'
755           submodule-recursive: '{submodule-recursive}'
756           submodule-timeout: '{submodule-timeout}'
757           choosing-strategy: default
758
759     triggers:
760       - timed: '{obj:cron}'
761       - gerrit:
762           server-name: '{gerrit-server-name}'
763           trigger-on: '{obj:gerrit_release_triggers}'
764           projects:
765             - project-compare-type: ANT
766               project-pattern: '{project}'
767               branches:
768                 - branch-compare-type: ANT
769                   branch-pattern: '**/{branch}'
770
771 - job-template:
772     name: '{project-name}-maven-stage-{stream}'
773     id: github-maven-stage
774     <<: *lf_maven_common
775     # yamllint disable-line rule:key-duplicates
776     <<: *lf_maven_stage
777
778     properties:
779       - lf-infra-properties:
780           build-days-to-keep: '{build-days-to-keep}'
781       - github:
782           url: '{github-url}/{github-org}/{project}'
783
784     scm:
785       - lf-infra-github-scm:
786           url: '{git-clone-url}{github-org}/{project}'
787           refspec: '+refs/pull/*:refs/remotes/origin/pr/*'
788           branch: '{branch}'
789           submodule-recursive: '{submodule-recursive}'
790           submodule-timeout: '{submodule-timeout}'
791           choosing-strategy: default
792           jenkins-ssh-credential: '{jenkins-ssh-credential}'
793
794     triggers:
795       - timed: '{obj:cron}'
796       - github-pull-request:
797           trigger-phrase: '^build release$'
798           only-trigger-phrase: true
799           status-context: 'Maven Release'
800           permit-all: true
801           github-hooks: true
802           white-list-target-branches:
803             - '{branch}'
804
805 ###############
806 # Maven Sonar #
807 ###############
808
809 - lf_maven_sonar: &lf_maven_sonar
810     name: lf-maven-sonar
811
812     ######################
813     # Default parameters #
814     ######################
815
816     branch: master  # Sonar should always be run on master branch
817     build-days-to-keep: 7
818     build-timeout: 60
819     cron: 'H H * * 6'  # run weekly
820     disable-job: false
821     git-url: '$GIT_URL/$PROJECT'
822     github-url: 'https://github.com'
823     java-version: openjdk8
824     mvn-global-settings: global-settings
825     mvn-opts: ''
826     mvn-params: ''
827     mvn-version: mvn35
828     sonar-mvn-goal: 'sonar:sonar'
829     sonarcloud: false
830     sonarcloud-project-key: ''
831     sonarcloud-project-organization: ''
832     sonarcloud-api-token: ''
833     stream: master
834     submodule-recursive: true
835     submodule-timeout: 10
836
837     gerrit_sonar_triggers:
838       - comment-added-contains-event:
839           comment-contains-value: run-sonar$
840
841     #####################
842     # Job Configuration #
843     #####################
844
845     disabled: '{disable-job}'
846
847     parameters:
848       - lf-infra-parameters:
849           project: '{project}'
850           branch: '{branch}'
851           stream: '{stream}'
852       - lf-infra-maven-parameters:
853           mvn-opts: '{mvn-opts}'
854           mvn-params: '{mvn-params}'
855           mvn-version: '{mvn-version}'
856       - string:
857           name: ARCHIVE_ARTIFACTS
858           default: '{archive-artifacts}'
859           description: Artifacts to archive to the logs server.
860       - string:
861           name: SONAR_MAVEN_GOAL
862           default: '{sonar-mvn-goal}'
863           description: |
864               Maven goals to pass to the Sonar call. Typically sonar:sonar
865               however to use a specific version of the sonar-maven-plugin we
866               can call "org.codehaus.mojo:sonar-maven-plugin:3.3.0.603:sonar".
867
868     triggers:
869       - timed: '{obj:cron}'
870       - gerrit:
871           server-name: '{gerrit-server-name}'
872           trigger-on: '{obj:gerrit_sonar_triggers}'
873           projects:
874             - project-compare-type: 'ANT'
875               project-pattern: '{project}'
876               branches:
877                 - branch-compare-type: 'ANT'
878                   branch-pattern: '**/master'
879           skip-vote:
880             successful: true
881             failed: true
882             unstable: true
883             notbuilt: true
884
885     builders:
886       - lf-infra-pre-build
887       # With SonarCloud
888       - conditional-step:
889           condition-kind: boolean-expression
890           condition-expression: '{sonarcloud}'
891           steps:
892             - shell: echo 'Using SonarCloud'
893             - lf-infra-maven-sonarcloud:
894                 java-version: '{java-version}'
895                 mvn-settings: '{mvn-settings}'
896                 mvn-version: '{mvn-version}'
897                 sonarcloud-project-key: '{sonarcloud-project-key}'
898                 sonarcloud-project-organization: '{sonarcloud-project-organization}'
899                 sonarcloud-api-token: '{sonarcloud-api-token}'
900       # With SonarQube
901       - conditional-step:
902           condition-kind: not
903           condition-operand:
904             condition-kind: boolean-expression
905             condition-expression: '{sonarcloud}'
906           steps:
907             - shell: echo 'Using SonarQube'
908             - lf-infra-maven-sonar:
909                 java-version: '{java-version}'
910                 mvn-settings: '{mvn-settings}'
911                 mvn-version: '{mvn-version}'
912
913     publishers:
914       - lf-jacoco-report
915       - findbugs
916       - lf-infra-publish
917
918 - builder:
919     name: lf-infra-maven-sonar
920     # Run a Sonar build with Maven
921     builders:
922       - lf-maven-install:
923           mvn-version: '{mvn-version}'
924       - lf-update-java-alternatives:
925           java-version: '{java-version}'
926       - inject:
927           # Switch this to the sonar wrapper when JJB 2.0 is available
928           properties-content: SONAR_HOST_URL=$SONAR_URL
929       - lf-provide-maven-settings:
930           global-settings-file: global-settings
931           settings-file: '{mvn-settings}'
932       - shell: !include-raw-escape:
933           - ../shell/common-variables.sh
934           - ../shell/maven-sonar.sh
935       - lf-provide-maven-settings-cleanup
936
937 - builder:
938     name: lf-infra-maven-sonarcloud
939     # Run a Sonar build with Maven
940     builders:
941       - lf-maven-install:
942           mvn-version: '{mvn-version}'
943       - lf-update-java-alternatives:
944           java-version: '{java-version}'
945       - inject:
946           # Switch this to the sonar wrapper when JJB 2.0 is available
947           properties-content: |
948             SONAR_HOST_URL=https://sonarcloud.io
949             PROJECT_KEY={sonarcloud-project-key}
950             PROJECT_ORGANIZATION={sonarcloud-project-organization}
951             API_TOKEN={sonarcloud-api-token}
952       - lf-provide-maven-settings:
953           global-settings-file: global-settings
954           settings-file: '{mvn-settings}'
955       - shell: !include-raw-escape:
956           - ../shell/common-variables.sh
957           - ../shell/maven-sonar.sh
958       - lf-provide-maven-settings-cleanup
959
960 - job-template:
961     name: '{project-name}-sonar'
962     id: gerrit-maven-sonar
963     <<: *lf_maven_common
964     # yamllint disable-line rule:key-duplicates
965     <<: *lf_maven_sonar
966
967     scm:
968       - lf-infra-gerrit-scm:
969           jenkins-ssh-credential: '{jenkins-ssh-credential}'
970           git-url: '{git-url}'
971           refspec: $GERRIT_REFSPEC
972           branch: $GERRIT_BRANCH
973           submodule-recursive: '{submodule-recursive}'
974           submodule-timeout: '{submodule-timeout}'
975           choosing-strategy: default
976
977 - job-template:
978     name: '{project-name}-sonar'
979     id: github-maven-sonar
980     <<: *lf_maven_common
981     # yamllint disable-line rule:key-duplicates
982     <<: *lf_maven_sonar
983
984     properties:
985       - lf-infra-properties:
986           build-days-to-keep: '{build-days-to-keep}'
987       - github:
988           url: '{github-url}/{github-org}/{project}'
989
990     scm:
991       - lf-infra-github-scm:
992           url: '{git-clone-url}{github-org}/{project}'
993           refspec: '+refs/pull/*:refs/remotes/origin/pr/*'
994           branch: '$sha1'
995           submodule-recursive: '{submodule-recursive}'
996           submodule-timeout: '{submodule-timeout}'
997           choosing-strategy: default
998           jenkins-ssh-credential: '{jenkins-ssh-credential}'
999
1000     triggers:
1001       - timed: '{obj:cron}'
1002       - github-pull-request:
1003           trigger-phrase: '^run-sonar$'
1004           only-trigger-phrase: true
1005           status-context: 'Maven Sonar'
1006           permit-all: true
1007           github-hooks: true
1008           org-list:
1009             - '{github-org}'
1010           white-list: '{obj:github_pr_whitelist}'
1011           admin-list: '{obj:github_pr_admin_list}'
1012           white-list-target-branches:
1013             - '{branch}'
1014
1015 ################
1016 # Maven Verify #
1017 ################
1018
1019 - lf_maven_verify: &lf_maven_verify
1020     name: lf-maven-verify
1021
1022     ######################
1023     # Default parameters #
1024     ######################
1025
1026     branch: master
1027     build-days-to-keep: 7
1028     build-timeout: 60
1029     disable-job: false
1030     git-url: '$GIT_URL/$PROJECT'
1031     github-url: 'https://github.com'
1032     java-version: openjdk8
1033     mvn-global-settings: global-settings
1034     mvn-goals: clean deploy
1035     mvn-opts: ''
1036     mvn-params: '-Dstream=$STREAM'
1037     mvn-version: mvn35
1038     stream: master
1039     submodule-recursive: true
1040     submodule-timeout: 10
1041
1042     gerrit_verify_triggers:
1043       - patchset-created-event:
1044           exclude-drafts: true
1045           exclude-trivial-rebase: false
1046           exclude-no-code-change: false
1047       - draft-published-event
1048       - comment-added-contains-event:
1049           comment-contains-value: '^Patch Set[ ]+[0-9]+:([ ]+|[\n]+)(recheck|reverify)$'
1050
1051     gerrit_trigger_file_paths:
1052       - compare-type: REG_EXP
1053         pattern: '.*'
1054
1055     # github_included_regions MUST match gerrit_trigger_file_paths
1056     github_included_regions:
1057       - '.*'
1058
1059     #####################
1060     # Job Configuration #
1061     #####################
1062
1063     concurrent: true
1064     disabled: '{disable-job}'
1065
1066     builders:
1067       - lf-infra-pre-build
1068       - lf-jacoco-nojava-workaround
1069       - lf-maven-install:
1070           mvn-version: '{mvn-version}'
1071       - lf-update-java-alternatives:
1072           java-version: '{java-version}'
1073       - lf-provide-maven-settings:
1074           global-settings-file: '{mvn-global-settings}'
1075           settings-file: '{mvn-settings}'
1076       - lf-maven-build:
1077           mvn-goals: '{mvn-goals}'
1078       - lf-provide-maven-settings-cleanup
1079
1080     publishers:
1081       - findbugs
1082       - lf-jacoco-report
1083       - lf-infra-publish
1084
1085 - job-template:
1086     name: '{project-name}-maven-verify-{stream}-{mvn-version}-{java-version}'
1087     id: gerrit-maven-verify
1088     <<: *lf_maven_common
1089     # yamllint disable-line rule:key-duplicates
1090     <<: *lf_maven_verify
1091
1092     scm:
1093       - lf-infra-gerrit-scm:
1094           jenkins-ssh-credential: '{jenkins-ssh-credential}'
1095           git-url: '{git-url}'
1096           refspec: '$GERRIT_REFSPEC'
1097           branch: '$GERRIT_BRANCH'
1098           submodule-recursive: '{submodule-recursive}'
1099           submodule-timeout: '{submodule-timeout}'
1100           choosing-strategy: gerrit
1101
1102     triggers:
1103       - gerrit:
1104           server-name: '{gerrit-server-name}'
1105           trigger-on: '{obj:gerrit_verify_triggers}'
1106           projects:
1107             - project-compare-type: ANT
1108               project-pattern: '{project}'
1109               branches:
1110                 - branch-compare-type: ANT
1111                   branch-pattern: '**/{branch}'
1112               file-paths: '{obj:gerrit_trigger_file_paths}'
1113
1114 - job-template:
1115     name: '{project-name}-maven-verify-{stream}-{mvn-version}-{java-version}'
1116     id: github-maven-verify
1117     <<: *lf_maven_common
1118     # yamllint disable-line rule:key-duplicates
1119     <<: *lf_maven_verify
1120
1121     properties:
1122       - lf-infra-properties:
1123           build-days-to-keep: '{build-days-to-keep}'
1124       - github:
1125           url: '{github-url}/{github-org}/{project}'
1126
1127     scm:
1128       - lf-infra-github-scm:
1129           url: '{git-clone-url}{github-org}/{project}'
1130           refspec: '+refs/pull/*:refs/remotes/origin/pr/*'
1131           branch: '$sha1'
1132           submodule-recursive: '{submodule-recursive}'
1133           submodule-timeout: '{submodule-timeout}'
1134           choosing-strategy: default
1135           jenkins-ssh-credential: '{jenkins-ssh-credential}'
1136
1137     triggers:
1138       - github-pull-request:
1139           trigger-phrase: '^(recheck|reverify)$'
1140           only-trigger-phrase: false
1141           status-context: 'Maven Verify'
1142           permit-all: true
1143           github-hooks: true
1144           white-list-target-branches:
1145             - '{branch}'
1146           included-regions: '{obj:github_included_regions}'
1147
1148 #############################
1149 # Maven Verify Dependencies #
1150 #############################
1151
1152 - lf_maven_verify_dependencies: &lf_maven_verify_dependencies
1153     name: lf-maven-verify-dependencies
1154
1155     ######################
1156     # Default parameters #
1157     ######################
1158
1159     branch: master
1160     build-days-to-keep: 7
1161     build-timeout: 60
1162     disable-job: false
1163     git-url: '$GIT_URL/$PROJECT'
1164     github-url: 'https://github.com'
1165     java-version: openjdk8
1166     mvn-global-settings: global-settings
1167     mvn-goals: clean deploy
1168     mvn-opts: ''
1169     mvn-params: '-Dstream=$STREAM'
1170     mvn-version: mvn35
1171     stream: master
1172     submodule-recursive: true
1173     submodule-timeout: 10
1174
1175     gerrit_verify_triggers:
1176       - comment-added-contains-event:
1177           comment-contains-value: 'recheck: [0-9 ]+'
1178     gerrit_trigger_file_paths:
1179       - compare-type: ANT
1180         pattern: '**'
1181
1182     #####################
1183     # Job Configuration #
1184     #####################
1185
1186     concurrent: true
1187     disabled: '{disable-job}'
1188
1189     builders:
1190       - lf-infra-pre-build
1191       - lf-jacoco-nojava-workaround
1192       - lf-maven-install:
1193           mvn-version: '{mvn-version}'
1194       - lf-update-java-alternatives:
1195           java-version: '{java-version}'
1196       - lf-provide-maven-settings:
1197           global-settings-file: '{mvn-global-settings}'
1198           settings-file: '{mvn-settings}'
1199       - lf-fetch-dependent-patches
1200       - shell: !include-raw-escape:
1201           - ../shell/common-variables.sh
1202           - ../shell/maven-build-deps.sh
1203       - lf-maven-build:
1204           mvn-goals: '{mvn-goals}'
1205       - lf-provide-maven-settings-cleanup
1206
1207     publishers:
1208       - findbugs
1209       - lf-jacoco-report
1210       - lf-infra-publish
1211
1212 - job-template:
1213     name: '{project-name}-maven-verify-deps-{stream}-{mvn-version}-{java-version}'
1214     id: gerrit-maven-verify-dependencies
1215     <<: *lf_maven_common
1216     # yamllint disable-line rule:key-duplicates
1217     <<: *lf_maven_verify_dependencies
1218
1219     scm:
1220       - lf-infra-gerrit-scm:
1221           jenkins-ssh-credential: '{jenkins-ssh-credential}'
1222           git-url: '{git-url}'
1223           refspec: '$GERRIT_REFSPEC'
1224           branch: '$GERRIT_BRANCH'
1225           submodule-recursive: '{submodule-recursive}'
1226           submodule-timeout: '{submodule-timeout}'
1227           choosing-strategy: gerrit
1228
1229     triggers:
1230       - gerrit:
1231           server-name: '{gerrit-server-name}'
1232           trigger-on: '{obj:gerrit_verify_triggers}'
1233           projects:
1234             - project-compare-type: ANT
1235               project-pattern: '{project}'
1236               branches:
1237                 - branch-compare-type: ANT
1238                   branch-pattern: '**/{branch}'
1239               file-paths: '{obj:gerrit_trigger_file_paths}'