Add github whitelist branches params to trigger.
[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     github-url: 'https://github.com'
166     java-version: openjdk8
167     mvn-global-settings: global-settings
168     mvn-opts: ''
169     mvn-params: ''
170     mvn-version: mvn35
171     nexus-iq-stage: 'build'
172     staging-profile-id: ''  # Unused in this job
173     stream: master
174     submodule-recursive: true
175
176     nexus-iq-scan-patterns:
177       - '**/*.ear'
178       - '**/*.jar'
179       - '**/*.tar.gz'
180       - '**/*.war'
181       - '**/*.zip'
182
183     gerrit_clm_triggers:
184       - comment-added-contains-event:
185           comment-contains-value: run-clm$
186
187     parameters:
188       - lf-infra-parameters:
189           project: '{project}'
190           branch: '{branch}'
191           stream: '{stream}'
192           lftools-version: '{lftools-version}'
193       - lf-infra-maven-parameters:
194           mvn-opts: '{mvn-opts}'
195           mvn-params: '{mvn-params}'
196           mvn-version: '{mvn-version}'
197           # Staging repos do not make sense for CLM jobs so set it blank.
198           staging-profile-id: '{staging-profile-id}'
199       - string:
200           name: ARCHIVE_ARTIFACTS
201           default: '{archive-artifacts}'
202           description: Artifacts to archive to the logs server.
203       - lf-clm-parameters:
204           nexus-iq-stage: '{nexus-iq-stage}'
205
206     #####################
207     # Job Configuration #
208     #####################
209
210     builders:
211       - lf-maven-install:
212           mvn-version: '{mvn-version}'
213       - lf-update-java-alternatives:
214           java-version: '{java-version}'
215       - lf-provide-maven-settings:
216           global-settings-file: '{mvn-global-settings}'
217           settings-file: '{mvn-settings}'
218       - shell: !include-raw-escape:
219           - ../shell/common-variables.sh
220           - ../shell/sonatype-clm.sh
221       - lf-provide-maven-settings-cleanup
222       - shell: 'find . -regex ".*karaf/target" | xargs rm -rf'
223       - nexus-iq-policy-evaluator:
224           stage: '{nexus-iq-stage}'
225           application-type: 'manual'
226           application-id: '{project-name}'
227           scan-patterns: '{nexus-iq-scan-patterns}'
228           fail-build-network-error: true
229
230 - job-template:
231     name: '{project-name}-maven-clm-{stream}'
232     id: gerrit-maven-clm
233     <<: *lf_maven_common
234     # yamllint disable-line rule:key-duplicates
235     <<: *lf_maven_clm
236
237     scm:
238       - lf-infra-gerrit-scm:
239           jenkins-ssh-credential: '{jenkins-ssh-credential}'
240           git-url: '{git-url}'
241           refspec: '$GERRIT_REFSPEC'
242           branch: '$GERRIT_BRANCH'
243           submodule-recursive: '{submodule-recursive}'
244           choosing-strategy: default
245
246     triggers:
247       # Build weekly on Saturdays
248       - timed: 'H H * * 6'
249       - gerrit:
250           server-name: '{gerrit-server-name}'
251           trigger-on: '{obj:gerrit_clm_triggers}'
252           projects:
253             - project-compare-type: ANT
254               project-pattern: '{project}'
255               branches:
256                 - branch-compare-type: ANT
257                   branch-pattern: '**/{branch}'
258           skip-vote:
259             successful: true
260             failed: true
261             unstable: true
262             notbuilt: true
263
264 - job-template:
265     name: '{project-name}-maven-clm-{stream}'
266     id: github-maven-clm
267     <<: *lf_maven_common
268     # yamllint disable-line rule:key-duplicates
269     <<: *lf_maven_clm
270
271     properties:
272       - lf-infra-properties:
273           build-days-to-keep: '{build-days-to-keep}'
274       - github:
275           url: '{github-url}/{github-org}/{project}'
276
277     scm:
278       - lf-infra-github-scm:
279           url: '{git-clone-url}{github-org}/{project}'
280           refspec: ''
281           branch: 'refs/heads/{branch}'
282           submodule-recursive: '{submodule-recursive}'
283           choosing-strategy: default
284           jenkins-ssh-credential: '{jenkins-ssh-credential}'
285
286     triggers:
287       # Build weekly on Saturdays
288       - timed: 'H H * * 6'
289       - github-pull-request:
290           trigger-phrase: '^run-clm$'
291           only-trigger-phrase: false
292           status-context: 'CLM'
293           permit-all: true
294           github-hooks: true
295           org-list:
296             - '{github-org}'
297           white-list: '{obj:github_pr_whitelist}'
298           admin-list: '{obj:github_pr_admin_list}'
299           white-list-target-branches:
300             - '{branch}'
301
302 #########################
303 # Maven Javadoc Publish #
304 #########################
305
306 - lf_maven_javadoc_publish: &lf_maven_javadoc_publish
307     name: lf-maven-javadoc-publish
308
309     ######################
310     # Default parameters #
311     ######################
312
313     branch: master
314     build-days-to-keep: 30  # 30 days in case a release takes long to get approved.
315     build-timeout: 60
316     git-url: '$GIT_URL/$PROJECT'
317     github-url: 'https://github.com'
318     java-version: openjdk8
319     mvn-global-settings: global-settings
320     mvn-opts: ''
321     mvn-params: ''
322     mvn-version: mvn35
323     staging-profile-id: ''  # Unused by the javadoc jobs
324     stream: master
325     submodule-recursive: true
326
327     gerrit_merge_triggers:
328       - change-merged-event
329       - comment-added-contains-event:
330           comment-contains-value: remerge$
331
332     #####################
333     # Job Configuration #
334     #####################
335
336     builders:
337       - lf-maven-install:
338           mvn-version: '{mvn-version}'
339       - lf-update-java-alternatives:
340           java-version: '{java-version}'
341       - lf-provide-maven-settings:
342           global-settings-file: '{mvn-global-settings}'
343           settings-file: '{mvn-settings}'
344       - lf-infra-create-netrc:
345           server-id: '{mvn-site-id}'
346       - inject:
347           properties-content: 'DEPLOY_PATH={javadoc-path}'
348       - shell: !include-raw-escape:
349           - ../shell/common-variables.sh
350           - ../shell/maven-javadoc-generate.sh
351           - ../shell/lftools-install.sh
352           - ../shell/maven-javadoc-publish.sh
353       - lf-provide-maven-settings-cleanup
354
355 - job-template:
356     name: '{project-name}-maven-javadoc-publish-{stream}'
357     id: gerrit-maven-javadoc-publish
358     <<: *lf_maven_common
359     # yamllint disable-line rule:key-duplicates
360     <<: *lf_maven_javadoc_publish
361
362     git-url: '$GIT_URL/$GERRIT_PROJECT'
363
364     scm:
365       - lf-infra-gerrit-scm:
366           git-url: '{git-url}'
367           refspec: ''
368           branch: '{branch}'
369           submodule-recursive: '{submodule-recursive}'
370           choosing-strategy: default
371           jenkins-ssh-credential: '{jenkins-ssh-credential}'
372
373     triggers:
374       - gerrit:
375           server-name: '{gerrit-server-name}'
376           trigger-on: '{obj:gerrit_merge_triggers}'
377           projects:
378             - project-compare-type: ANT
379               project-pattern: '{project}'
380               branches:
381                 - branch-compare-type: ANT
382                   branch-pattern: '**/{branch}'
383
384 - job-template:
385     name: '{project-name}-maven-javadoc-publish-{stream}'
386     id: github-maven-javadoc-publish
387     <<: *lf_maven_common
388     # yamllint disable-line rule:key-duplicates
389     <<: *lf_maven_javadoc_publish
390
391     properties:
392       - lf-infra-properties:
393           build-days-to-keep: '{build-days-to-keep}'
394       - github:
395           url: '{github-url}/{github-org}/{project}'
396
397     scm:
398       - lf-infra-github-scm:
399           url: '{git-clone-url}{github-org}/{project}'
400           refspec: ''
401           branch: '{branch}'
402           submodule-recursive: '{submodule-recursive}'
403           choosing-strategy: default
404           jenkins-ssh-credential: '{jenkins-ssh-credential}'
405
406     triggers:
407       - github
408       - pollscm:
409           cron: ''
410       - github-pull-request:
411           trigger-phrase: '^remerge$'
412           only-trigger-phrase: true
413           status-context: 'Maven Javadoc Publish'
414           permit-all: false
415           github-hooks: true
416           org-list:
417             - '{github-org}'
418           white-list: '{obj:github_pr_whitelist}'
419           admin-list: '{obj:github_pr_admin_list}'
420           white-list-target-branches:
421             - '{branch}'
422
423 ########################
424 # Maven Javadoc Verify #
425 ########################
426
427 - lf_maven_javadoc_verify: &lf_maven_javadoc_verify
428     name: lf-maven-javadoc-verify
429
430     ######################
431     # Default parameters #
432     ######################
433
434     branch: master
435     build-days-to-keep: 30  # 30 days in case a release takes long to get approved.
436     build-timeout: 60
437     git-url: '$GIT_URL/$PROJECT'
438     github-url: 'https://github.com'
439     java-version: openjdk8
440     mvn-global-settings: global-settings
441     mvn-opts: ''
442     mvn-params: ''
443     mvn-version: mvn35
444     staging-profile-id: ''  # Unused by the javadoc jobs
445     stream: master
446     submodule-recursive: true
447
448     gerrit_verify_triggers:
449       - patchset-created-event:
450           exclude-drafts: true
451           exclude-trivial-rebase: false
452           exclude-no-code-change: false
453       - draft-published-event
454       - comment-added-contains-event:
455           comment-contains-value: '^Patch Set[ ]+[0-9]+:([ ]+|[\n]+)(recheck|reverify)$'
456
457     #####################
458     # Job Configuration #
459     #####################
460
461     concurrent: true
462
463     builders:
464       - lf-maven-install:
465           mvn-version: '{mvn-version}'
466       - lf-update-java-alternatives:
467           java-version: '{java-version}'
468       - lf-provide-maven-settings:
469           global-settings-file: '{mvn-global-settings}'
470           settings-file: '{mvn-settings}'
471       - shell: !include-raw-escape:
472           - ../shell/common-variables.sh
473           - ../shell/maven-javadoc-generate.sh
474       - lf-provide-maven-settings-cleanup
475
476 - job-template:
477     name: '{project-name}-maven-javadoc-verify-{stream}'
478     id: gerrit-maven-javadoc-verify
479     <<: *lf_maven_common
480     # yamllint disable-line rule:key-duplicates
481     <<: *lf_maven_javadoc_verify
482
483     scm:
484       - lf-infra-gerrit-scm:
485           jenkins-ssh-credential: '{jenkins-ssh-credential}'
486           git-url: '{git-url}'
487           refspec: '$GERRIT_REFSPEC'
488           branch: '$GERRIT_BRANCH'
489           submodule-recursive: '{submodule-recursive}'
490           choosing-strategy: gerrit
491
492     triggers:
493       - gerrit:
494           server-name: '{gerrit-server-name}'
495           trigger-on: '{obj:gerrit_verify_triggers}'
496           projects:
497             - project-compare-type: ANT
498               project-pattern: '{project}'
499               branches:
500                 - branch-compare-type: ANT
501                   branch-pattern: '**/{branch}'
502
503 - job-template:
504     name: '{project-name}-maven-javadoc-verify-{stream}'
505     id: github-maven-javadoc-verify
506     <<: *lf_maven_common
507     # yamllint disable-line rule:key-duplicates
508     <<: *lf_maven_javadoc_verify
509
510     properties:
511       - lf-infra-properties:
512           build-days-to-keep: '{build-days-to-keep}'
513       - github:
514           url: '{github-url}/{github-org}/{project}'
515
516     scm:
517       - lf-infra-github-scm:
518           url: '{git-clone-url}{github-org}/{project}'
519           refspec: '+refs/pull/*:refs/remotes/origin/pr/*'
520           branch: '$sha1'
521           submodule-recursive: '{submodule-recursive}'
522           choosing-strategy: default
523           jenkins-ssh-credential: '{jenkins-ssh-credential}'
524
525     triggers:
526       - github-pull-request:
527           trigger-phrase: ^(recheck|reverify)$
528           only-trigger-phrase: false
529           status-context: 'Maven Javadoc Verify'
530           permit-all: true
531           github-hooks: true
532           white-list-target-branches:
533             - '{branch}'
534
535 ###############
536 # Maven Merge #
537 ###############
538
539 - lf_maven_merge: &lf_maven_merge
540     name: lf-maven-merge
541
542     ######################
543     # Default parameters #
544     ######################
545
546     branch: master
547     build-days-to-keep: 30  # 30 days in case we need to troubleshoot
548     build-timeout: 60
549     cron: 'H H * * 0'  # push fresh snapshot weekly
550     git-url: '$GIT_URL/$PROJECT'
551     github-url: 'https://github.com'
552     java-version: openjdk8
553     mvn-global-settings: global-settings
554     mvn-goals: clean deploy
555     mvn-opts: ''
556     mvn-params: '-Dmerge'
557     mvn-version: mvn35
558     nexus-cut-dirs: 6  # Number of dirs in the Nexus path to remove for wget -r.
559     staging-profile-id: ''  # Unused by this job.
560     stream: master
561     submodule-recursive: true
562
563     gerrit_merge_triggers:
564       - change-merged-event
565       - comment-added-contains-event:
566           comment-contains-value: remerge$
567
568     gerrit_trigger_file_paths:
569       - compare-type: REG_EXP
570         pattern: '.*'
571
572     # github_included_regions MUST match gerrit_trigger_file_paths
573     github_included_regions:
574       - '.*'
575
576     post_build_trigger: ''
577
578     #####################
579     # Job Configuration #
580     #####################
581
582     builders:
583       - lf-jacoco-nojava-workaround
584       - lf-maven-install:
585           mvn-version: '{mvn-version}'
586       - lf-update-java-alternatives:
587           java-version: '{java-version}'
588       - lf-provide-maven-settings:
589           global-settings-file: '{mvn-global-settings}'
590           settings-file: '{mvn-settings}'
591       - lf-infra-create-netrc:
592           server-id: '{mvn-snapshot-id}'
593       - inject:
594           properties-content: |
595               NEXUS_CUT_DIRS={nexus-cut-dirs}
596               NEXUS_REPO={nexus-snapshot-repo}
597       - shell: !include-raw-escape:
598           - ../shell/lftools-install.sh
599           - ../shell/maven-fetch-metadata.sh
600       - lf-maven-build:
601           mvn-goals: '{mvn-goals}'
602       - lf-maven-deploy
603       - lf-provide-maven-settings-cleanup
604
605     publishers:
606       - findbugs
607       - lf-jacoco-report
608       - lf-infra-publish
609       - trigger-parameterized-builds: '{obj:post_build_trigger}'
610
611 - job-template:
612     name: '{project-name}-maven-merge-{stream}'
613     id: gerrit-maven-merge
614     <<: *lf_maven_common
615     # yamllint disable-line rule:key-duplicates
616     <<: *lf_maven_merge
617
618     scm:
619       - lf-infra-gerrit-scm:
620           jenkins-ssh-credential: '{jenkins-ssh-credential}'
621           git-url: '{git-url}'
622           refspec: '$GERRIT_REFSPEC'
623           branch: '$GERRIT_BRANCH'
624           submodule-recursive: '{submodule-recursive}'
625           choosing-strategy: default
626
627     triggers:
628       - timed: '{obj:cron}'
629       - gerrit:
630           server-name: '{gerrit-server-name}'
631           trigger-on: '{obj:gerrit_merge_triggers}'
632           projects:
633             - project-compare-type: ANT
634               project-pattern: '{project}'
635               branches:
636                 - branch-compare-type: ANT
637                   branch-pattern: '**/{branch}'
638               file-paths: '{obj:gerrit_trigger_file_paths}'
639
640 - job-template:
641     name: '{project-name}-maven-merge-{stream}'
642     id: github-maven-merge
643     <<: *lf_maven_common
644     # yamllint disable-line rule:key-duplicates
645     <<: *lf_maven_merge
646
647     properties:
648       - lf-infra-properties:
649           build-days-to-keep: '{build-days-to-keep}'
650       - github:
651           url: '{github-url}/{github-org}/{project}'
652
653     scm:
654       - lf-infra-github-scm:
655           url: '{git-clone-url}{github-org}/{project}'
656           refspec: '+refs/pull/*:refs/remotes/origin/pr/*'
657           branch: '{branch}'
658           submodule-recursive: '{submodule-recursive}'
659           choosing-strategy: default
660           jenkins-ssh-credential: '{jenkins-ssh-credential}'
661
662     triggers:
663       - github
664       - pollscm:
665           cron: ''
666       - github-pull-request:
667           trigger-phrase: '^remerge$'
668           only-trigger-phrase: true
669           status-context: 'Maven Merge'
670           permit-all: false
671           github-hooks: true
672           org-list:
673             - '{github-org}'
674           white-list: '{obj:github_pr_whitelist}'
675           admin-list: '{obj:github_pr_admin_list}'
676           white-list-target-branches:
677             - '{branch}'
678           included-regions: '{obj:github_included_regions}'
679
680 #################
681 # Maven Release #
682 #################
683
684 - lf_maven_release: &lf_maven_release
685     name: lf-maven-release
686
687     ######################
688     # Default parameters #
689     ######################
690
691     branch: master
692     build-days-to-keep: 30  # 30 days in case a release takes long to get approved.
693     build-timeout: 60
694     cron: ''
695     git-url: '$GIT_URL/$PROJECT'
696     github-url: 'https://github.com'
697     java-version: openjdk8
698     mvn-global-settings: global-settings
699     mvn-goals: clean deploy
700     mvn-opts: ''
701     mvn-params: ''
702     mvn-version: mvn35
703     stream: master
704     submodule-recursive: true
705
706     gerrit_release_triggers:
707       - comment-added-contains-event:
708           comment-contains-value: build release$
709
710     #####################
711     # Job Configuration #
712     #####################
713
714     builders:
715       - lf-jacoco-nojava-workaround
716       - lf-maven-install:
717           mvn-version: '{mvn-version}'
718       - lf-update-java-alternatives:
719           java-version: '{java-version}'
720       - lf-provide-maven-settings:
721           global-settings-file: '{mvn-global-settings}'
722           settings-file: '{mvn-settings}'
723       - lf-infra-create-netrc:
724           server-id: '{mvn-staging-id}'
725       - shell: !include-raw-escape:
726           - ../shell/lftools-install.sh
727           - ../shell/maven-patch-release.sh
728       - lf-maven-build:
729           mvn-goals: '{mvn-goals}'
730       - lf-maven-stage
731       - lf-provide-maven-settings-cleanup
732
733 - job-template:
734     name: '{project-name}-maven-release-{stream}'
735     id: gerrit-maven-release
736     <<: *lf_maven_common
737     # yamllint disable-line rule:key-duplicates
738     <<: *lf_maven_release
739
740     scm:
741       - lf-infra-gerrit-scm:
742           jenkins-ssh-credential: '{jenkins-ssh-credential}'
743           git-url: '{git-url}'
744           refspec: '$GERRIT_REFSPEC'
745           branch: '$GERRIT_BRANCH'
746           submodule-recursive: '{submodule-recursive}'
747           choosing-strategy: default
748
749     triggers:
750       - timed: '{obj:cron}'
751       - gerrit:
752           server-name: '{gerrit-server-name}'
753           trigger-on: '{obj:gerrit_release_triggers}'
754           projects:
755             - project-compare-type: ANT
756               project-pattern: '{project}'
757               branches:
758                 - branch-compare-type: ANT
759                   branch-pattern: '**/{branch}'
760
761 - job-template:
762     name: '{project-name}-maven-release-{stream}'
763     id: github-maven-release
764     <<: *lf_maven_common
765     # yamllint disable-line rule:key-duplicates
766     <<: *lf_maven_release
767
768     properties:
769       - lf-infra-properties:
770           build-days-to-keep: '{build-days-to-keep}'
771       - github:
772           url: '{github-url}/{github-org}/{project}'
773
774     scm:
775       - lf-infra-github-scm:
776           url: '{git-clone-url}{github-org}/{project}'
777           refspec: '+refs/pull/*:refs/remotes/origin/pr/*'
778           branch: '{branch}'
779           submodule-recursive: '{submodule-recursive}'
780           choosing-strategy: default
781           jenkins-ssh-credential: '{jenkins-ssh-credential}'
782
783     triggers:
784       - timed: '{obj:cron}'
785       - github-pull-request:
786           trigger-phrase: '^build release$'
787           only-trigger-phrase: true
788           status-context: 'Maven Release'
789           permit-all: true
790           github-hooks: true
791           white-list-target-branches:
792             - '{branch}'
793
794 ###############
795 # Maven Sonar #
796 ###############
797
798 - lf_maven_sonar: &lf_maven_sonar
799     name: lf-maven-sonar
800
801     ######################
802     # Default parameters #
803     ######################
804
805     branch: master  # Sonar should always be run on master branch
806     build-days-to-keep: 7
807     build-timeout: 60
808     cron: 'H H * * 6'  # run weekly
809     git-url: '$GIT_URL/$PROJECT'
810     github-url: 'https://github.com'
811     java-version: openjdk8
812     mvn-global-settings: global-settings
813     mvn-opts: ''
814     mvn-params: ''
815     mvn-version: mvn35
816     sonar-mvn-goal: 'sonar:sonar'
817     staging-profile-id: ''  # Unused in this job
818     stream: master
819     submodule-recursive: true
820
821     gerrit_sonar_triggers:
822       - comment-added-contains-event:
823           comment-contains-value: run-sonar$
824
825     #####################
826     # Job Configuration #
827     #####################
828
829     parameters:
830       - lf-infra-parameters:
831           project: '{project}'
832           branch: '{branch}'
833           stream: '{stream}'
834           lftools-version: '{lftools-version}'
835       - lf-infra-maven-parameters:
836           mvn-opts: '{mvn-opts}'
837           mvn-params: '{mvn-params}'
838           mvn-version: '{mvn-version}'
839           # Staging repos do not make sense for Sonar jobs so set it blank.
840           staging-profile-id: ''
841       - string:
842           name: ARCHIVE_ARTIFACTS
843           default: '{archive-artifacts}'
844           description: Artifacts to archive to the logs server.
845       - string:
846           name: SONAR_MAVEN_GOAL
847           default: '{sonar-mvn-goal}'
848           description: |
849               Maven goals to pass to the Sonar call. Typically sonar:sonar
850               however to use a specific version of the sonar-maven-plugin we
851               can call "org.codehaus.mojo:sonar-maven-plugin:3.3.0.603:sonar".
852
853     triggers:
854       - timed: '{obj:cron}'
855       - gerrit:
856           server-name: '{gerrit-server-name}'
857           trigger-on: '{obj:gerrit_sonar_triggers}'
858           projects:
859             - project-compare-type: 'ANT'
860               project-pattern: '{project}'
861               branches:
862                 - branch-compare-type: 'ANT'
863                   branch-pattern: '**/master'
864           skip-vote:
865             successful: true
866             failed: true
867             unstable: true
868             notbuilt: true
869
870     builders:
871       - lf-infra-maven-sonar:
872           java-version: '{java-version}'
873           mvn-settings: '{mvn-settings}'
874           mvn-version: '{mvn-version}'
875
876     publishers:
877       - lf-jacoco-report
878       - findbugs
879       - lf-infra-publish
880
881 - builder:
882     name: lf-infra-maven-sonar
883     # Run a Sonar build with Maven
884     builders:
885       - lf-maven-install:
886           mvn-version: '{mvn-version}'
887       - lf-update-java-alternatives:
888           java-version: '{java-version}'
889       - inject:
890           # Switch this to the sonar wrapper when JJB 2.0 is available
891           properties-content: SONAR_HOST_URL=$SONAR_URL
892       - lf-provide-maven-settings:
893           global-settings-file: global-settings
894           settings-file: '{mvn-settings}'
895       - shell: !include-raw-escape:
896           - ../shell/common-variables.sh
897           - ../shell/maven-sonar.sh
898       - lf-provide-maven-settings-cleanup
899
900 - job-template:
901     name: '{project-name}-sonar'
902     id: gerrit-maven-sonar
903     <<: *lf_maven_common
904     # yamllint disable-line rule:key-duplicates
905     <<: *lf_maven_sonar
906
907     scm:
908       - lf-infra-gerrit-scm:
909           jenkins-ssh-credential: '{jenkins-ssh-credential}'
910           git-url: '{git-url}'
911           refspec: $GERRIT_REFSPEC
912           branch: $GERRIT_BRANCH
913           submodule-recursive: '{submodule-recursive}'
914           choosing-strategy: default
915
916 - job-template:
917     name: '{project-name}-sonar'
918     id: github-maven-sonar
919     <<: *lf_maven_common
920     # yamllint disable-line rule:key-duplicates
921     <<: *lf_maven_sonar
922
923     properties:
924       - lf-infra-properties:
925           build-days-to-keep: '{build-days-to-keep}'
926       - github:
927           url: '{github-url}/{github-org}/{project}'
928
929     scm:
930       - lf-infra-github-scm:
931           url: '{git-clone-url}{github-org}/{project}'
932           refspec: '+refs/pull/*:refs/remotes/origin/pr/*'
933           branch: '$sha1'
934           submodule-recursive: '{submodule-recursive}'
935           choosing-strategy: default
936           jenkins-ssh-credential: '{jenkins-ssh-credential}'
937
938     triggers:
939       - github-pull-request:
940           trigger-phrase: '^run-sonar$'
941           only-trigger-phrase: false
942           status-context: 'Maven Sonar'
943           permit-all: true
944           github-hooks: true
945           white-list-target-branches:
946             - '{branch}'
947
948 ################
949 # Maven Verify #
950 ################
951
952 - lf_maven_verify: &lf_maven_verify
953     name: lf-maven-verify
954
955     ######################
956     # Default parameters #
957     ######################
958
959     branch: master
960     build-days-to-keep: 7
961     build-timeout: 60
962     git-url: '$GIT_URL/$PROJECT'
963     github-url: 'https://github.com'
964     java-version: openjdk8
965     mvn-global-settings: global-settings
966     mvn-goals: clean deploy
967     mvn-opts: ''
968     mvn-params: '-Dstream=$STREAM'
969     mvn-version: mvn35
970     staging-profile-id: ''  # Unused in this job
971     stream: master
972     submodule-recursive: true
973
974     gerrit_verify_triggers:
975       - patchset-created-event:
976           exclude-drafts: true
977           exclude-trivial-rebase: false
978           exclude-no-code-change: false
979       - draft-published-event
980       - comment-added-contains-event:
981           comment-contains-value: '^Patch Set[ ]+[0-9]+:([ ]+|[\n]+)(recheck|reverify)$'
982
983     gerrit_trigger_file_paths:
984       - compare-type: REG_EXP
985         pattern: '.*'
986
987     # github_included_regions MUST match gerrit_trigger_file_paths
988     github_included_regions:
989       - '.*'
990
991     #####################
992     # Job Configuration #
993     #####################
994
995     concurrent: true
996
997     builders:
998       - lf-jacoco-nojava-workaround
999       - lf-maven-install:
1000           mvn-version: '{mvn-version}'
1001       - lf-update-java-alternatives:
1002           java-version: '{java-version}'
1003       - lf-provide-maven-settings:
1004           global-settings-file: '{mvn-global-settings}'
1005           settings-file: '{mvn-settings}'
1006       - shell: !include-raw-escape:
1007           - ../shell/lftools-install.sh
1008       - lf-maven-build:
1009           mvn-goals: '{mvn-goals}'
1010       - lf-provide-maven-settings-cleanup
1011
1012     publishers:
1013       - findbugs
1014       - lf-jacoco-report
1015       - lf-infra-publish
1016
1017 - job-template:
1018     name: '{project-name}-maven-verify-{stream}-{mvn-version}-{java-version}'
1019     id: gerrit-maven-verify
1020     <<: *lf_maven_common
1021     # yamllint disable-line rule:key-duplicates
1022     <<: *lf_maven_verify
1023
1024     scm:
1025       - lf-infra-gerrit-scm:
1026           jenkins-ssh-credential: '{jenkins-ssh-credential}'
1027           git-url: '{git-url}'
1028           refspec: '$GERRIT_REFSPEC'
1029           branch: '$GERRIT_BRANCH'
1030           submodule-recursive: '{submodule-recursive}'
1031           choosing-strategy: gerrit
1032
1033     triggers:
1034       - gerrit:
1035           server-name: '{gerrit-server-name}'
1036           trigger-on: '{obj:gerrit_verify_triggers}'
1037           projects:
1038             - project-compare-type: ANT
1039               project-pattern: '{project}'
1040               branches:
1041                 - branch-compare-type: ANT
1042                   branch-pattern: '**/{branch}'
1043               file-paths: '{obj:gerrit_trigger_file_paths}'
1044
1045 - job-template:
1046     name: '{project-name}-maven-verify-{stream}-{mvn-version}-{java-version}'
1047     id: github-maven-verify
1048     <<: *lf_maven_common
1049     # yamllint disable-line rule:key-duplicates
1050     <<: *lf_maven_verify
1051
1052     properties:
1053       - lf-infra-properties:
1054           build-days-to-keep: '{build-days-to-keep}'
1055       - github:
1056           url: '{github-url}/{github-org}/{project}'
1057
1058     scm:
1059       - lf-infra-github-scm:
1060           url: '{git-clone-url}{github-org}/{project}'
1061           refspec: '+refs/pull/*:refs/remotes/origin/pr/*'
1062           branch: '$sha1'
1063           submodule-recursive: '{submodule-recursive}'
1064           choosing-strategy: default
1065           jenkins-ssh-credential: '{jenkins-ssh-credential}'
1066
1067     triggers:
1068       - github-pull-request:
1069           trigger-phrase: '^(recheck|reverify)$'
1070           only-trigger-phrase: false
1071           status-context: 'Maven Verify'
1072           permit-all: true
1073           github-hooks: true
1074           white-list-target-branches:
1075             - '{branch}'
1076           included-regions: '{obj:github_included_regions}'
1077
1078 #############################
1079 # Maven Verify Dependencies #
1080 #############################
1081
1082 - lf_maven_verify_dependencies: &lf_maven_verify_dependencies
1083     name: lf-maven-verify-dependencies
1084
1085     ######################
1086     # Default parameters #
1087     ######################
1088
1089     branch: master
1090     build-days-to-keep: 7
1091     build-timeout: 60
1092     git-url: '$GIT_URL/$PROJECT'
1093     github-url: 'https://github.com'
1094     java-version: openjdk8
1095     mvn-global-settings: global-settings
1096     mvn-goals: clean deploy
1097     mvn-opts: ''
1098     mvn-params: '-Dstream=$STREAM'
1099     mvn-version: mvn35
1100     staging-profile-id: ''  # Unused by this job
1101     stream: master
1102     submodule-recursive: true
1103
1104     gerrit_verify_triggers:
1105       - comment-added-contains-event:
1106           comment-contains-value: 'recheck: [0-9 ]+'
1107     gerrit_trigger_file_paths:
1108       - compare-type: ANT
1109         pattern: '**'
1110
1111     #####################
1112     # Job Configuration #
1113     #####################
1114
1115     concurrent: true
1116
1117     builders:
1118       - lf-jacoco-nojava-workaround
1119       - lf-maven-install:
1120           mvn-version: '{mvn-version}'
1121       - lf-update-java-alternatives:
1122           java-version: '{java-version}'
1123       - lf-provide-maven-settings:
1124           global-settings-file: '{mvn-global-settings}'
1125           settings-file: '{mvn-settings}'
1126       - lf-fetch-dependent-patches
1127       - shell: !include-raw-escape:
1128           - ../shell/common-variables.sh
1129           - ../shell/maven-build-deps.sh
1130       - lf-maven-build:
1131           mvn-goals: '{mvn-goals}'
1132       - lf-provide-maven-settings-cleanup
1133
1134     publishers:
1135       - findbugs
1136       - lf-jacoco-report
1137       - lf-infra-publish
1138
1139 - job-template:
1140     name: '{project-name}-maven-verify-deps-{stream}-{mvn-version}-{java-version}'
1141     id: gerrit-maven-verify-dependencies
1142     <<: *lf_maven_common
1143     # yamllint disable-line rule:key-duplicates
1144     <<: *lf_maven_verify_dependencies
1145
1146     scm:
1147       - lf-infra-gerrit-scm:
1148           jenkins-ssh-credential: '{jenkins-ssh-credential}'
1149           git-url: '{git-url}'
1150           refspec: '$GERRIT_REFSPEC'
1151           branch: '$GERRIT_BRANCH'
1152           submodule-recursive: '{submodule-recursive}'
1153           choosing-strategy: gerrit
1154
1155     triggers:
1156       - gerrit:
1157           server-name: '{gerrit-server-name}'
1158           trigger-on: '{obj:gerrit_verify_triggers}'
1159           projects:
1160             - project-compare-type: ANT
1161               project-pattern: '{project}'
1162               branches:
1163                 - branch-compare-type: ANT
1164                   branch-pattern: '**/{branch}'
1165               file-paths: '{obj:gerrit_trigger_file_paths}'