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