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