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