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