Add option to stage to Maven Central
[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: ''
626           branch: 'refs/heads/{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-central: false
671     mvn-global-settings: global-settings
672     mvn-goals: clean deploy
673     mvn-opts: ''
674     mvn-params: ''
675     mvn-version: mvn35
676     ossrh-profile-id: ''
677     sign-artifacts: false
678     stream: master
679     submodule-recursive: true
680     submodule-timeout: 10
681
682     gerrit_release_triggers:
683       - comment-added-contains-event:
684           comment-contains-value: stage-release$
685
686     #####################
687     # Job Configuration #
688     #####################
689
690     disabled: '{disable-job}'
691
692     parameters:
693       - lf-infra-parameters:
694           project: '{project}'
695           branch: '{branch}'
696           stream: '{stream}'
697           lftools-version: '{lftools-version}'
698       - lf-infra-maven-parameters:
699           mvn-opts: '{mvn-opts}'
700           mvn-params: '{mvn-params}'
701           mvn-version: '{mvn-version}'
702           staging-profile-id: '{staging-profile-id}'
703       - string:
704           name: ARCHIVE_ARTIFACTS
705           default: '{archive-artifacts}'
706           description: Artifacts to archive to the logs server.
707       - string:
708           name: STAGING_PROFILE_ID
709           default: '{staging-profile-id}'
710           description: Nexus staging profile ID.
711
712     builders:
713       - lf-infra-pre-build
714       - lf-jacoco-nojava-workaround
715       - lf-maven-install:
716           mvn-version: '{mvn-version}'
717       - lf-update-java-alternatives:
718           java-version: '{java-version}'
719       - lf-provide-maven-settings:
720           global-settings-file: '{mvn-global-settings}'
721           settings-file: '{mvn-settings}'
722       - lf-infra-create-netrc:
723           server-id: '{mvn-staging-id}'
724       - shell: !include-raw-escape: ../shell/maven-patch-release.sh
725       - lf-maven-build:
726           mvn-goals: '{mvn-goals}'
727       - lf-sigul-sign-dir:
728           sign-artifacts: '{sign-artifacts}'
729           sign-dir: '$WORKSPACE/m2repo'
730       - lf-maven-stage
731       - conditional-step:
732           condition-kind: boolean-expression
733           condition-expression: '{mvn-central}'
734           steps:
735             - lf-infra-create-netrc:
736                 server-id: 'ossrh'
737             - inject:
738                 properties-content: 'OSSRH_PROFILE_ID={ossrh-profile-id}'
739             - shell: !include-raw-escape: ../shell/maven-central.sh
740       - lf-provide-maven-settings-cleanup
741
742 - job-template:
743     name: '{project-name}-maven-stage-{stream}'
744     id: gerrit-maven-stage
745     <<: *lf_maven_common
746     # yamllint disable-line rule:key-duplicates
747     <<: *lf_maven_stage
748
749     scm:
750       - lf-infra-gerrit-scm:
751           jenkins-ssh-credential: '{jenkins-ssh-credential}'
752           git-url: '{git-url}'
753           refspec: '$GERRIT_REFSPEC'
754           branch: '$GERRIT_BRANCH'
755           submodule-recursive: '{submodule-recursive}'
756           submodule-timeout: '{submodule-timeout}'
757           choosing-strategy: default
758
759     triggers:
760       - timed: '{obj:cron}'
761       - gerrit:
762           server-name: '{gerrit-server-name}'
763           trigger-on: '{obj:gerrit_release_triggers}'
764           projects:
765             - project-compare-type: ANT
766               project-pattern: '{project}'
767               branches:
768                 - branch-compare-type: ANT
769                   branch-pattern: '**/{branch}'
770
771 - job-template:
772     name: '{project-name}-maven-stage-{stream}'
773     id: github-maven-stage
774     <<: *lf_maven_common
775     # yamllint disable-line rule:key-duplicates
776     <<: *lf_maven_stage
777
778     properties:
779       - lf-infra-properties:
780           build-days-to-keep: '{build-days-to-keep}'
781       - github:
782           url: '{github-url}/{github-org}/{project}'
783
784     scm:
785       - lf-infra-github-scm:
786           url: '{git-clone-url}{github-org}/{project}'
787           refspec: '+refs/pull/*:refs/remotes/origin/pr/*'
788           branch: '{branch}'
789           submodule-recursive: '{submodule-recursive}'
790           submodule-timeout: '{submodule-timeout}'
791           choosing-strategy: default
792           jenkins-ssh-credential: '{jenkins-ssh-credential}'
793
794     triggers:
795       - timed: '{obj:cron}'
796       - github-pull-request:
797           trigger-phrase: '^build release$'
798           only-trigger-phrase: true
799           status-context: 'Maven Release'
800           permit-all: true
801           github-hooks: true
802           white-list-target-branches:
803             - '{branch}'
804
805 ###############
806 # Maven Sonar #
807 ###############
808
809 - lf_maven_sonar: &lf_maven_sonar
810     name: lf-maven-sonar
811
812     ######################
813     # Default parameters #
814     ######################
815
816     branch: master  # Sonar should always be run on master branch
817     build-days-to-keep: 7
818     build-timeout: 60
819     cron: 'H H * * 6'  # run weekly
820     disable-job: false
821     git-url: '$GIT_URL/$PROJECT'
822     github-url: 'https://github.com'
823     java-version: openjdk8
824     mvn-global-settings: global-settings
825     mvn-opts: ''
826     mvn-params: ''
827     mvn-version: mvn35
828     sonar-mvn-goal: 'sonar:sonar'
829     stream: master
830     submodule-recursive: true
831     submodule-timeout: 10
832
833     gerrit_sonar_triggers:
834       - comment-added-contains-event:
835           comment-contains-value: run-sonar$
836
837     #####################
838     # Job Configuration #
839     #####################
840
841     disabled: '{disable-job}'
842
843     parameters:
844       - lf-infra-parameters:
845           project: '{project}'
846           branch: '{branch}'
847           stream: '{stream}'
848           lftools-version: '{lftools-version}'
849       - lf-infra-maven-parameters:
850           mvn-opts: '{mvn-opts}'
851           mvn-params: '{mvn-params}'
852           mvn-version: '{mvn-version}'
853       - string:
854           name: ARCHIVE_ARTIFACTS
855           default: '{archive-artifacts}'
856           description: Artifacts to archive to the logs server.
857       - string:
858           name: SONAR_MAVEN_GOAL
859           default: '{sonar-mvn-goal}'
860           description: |
861               Maven goals to pass to the Sonar call. Typically sonar:sonar
862               however to use a specific version of the sonar-maven-plugin we
863               can call "org.codehaus.mojo:sonar-maven-plugin:3.3.0.603:sonar".
864
865     triggers:
866       - timed: '{obj:cron}'
867       - gerrit:
868           server-name: '{gerrit-server-name}'
869           trigger-on: '{obj:gerrit_sonar_triggers}'
870           projects:
871             - project-compare-type: 'ANT'
872               project-pattern: '{project}'
873               branches:
874                 - branch-compare-type: 'ANT'
875                   branch-pattern: '**/master'
876           skip-vote:
877             successful: true
878             failed: true
879             unstable: true
880             notbuilt: true
881
882     builders:
883       - lf-infra-pre-build
884       - lf-infra-maven-sonar:
885           java-version: '{java-version}'
886           mvn-settings: '{mvn-settings}'
887           mvn-version: '{mvn-version}'
888
889     publishers:
890       - lf-jacoco-report
891       - findbugs
892       - lf-infra-publish
893
894 - builder:
895     name: lf-infra-maven-sonar
896     # Run a Sonar build with Maven
897     builders:
898       - lf-maven-install:
899           mvn-version: '{mvn-version}'
900       - lf-update-java-alternatives:
901           java-version: '{java-version}'
902       - inject:
903           # Switch this to the sonar wrapper when JJB 2.0 is available
904           properties-content: SONAR_HOST_URL=$SONAR_URL
905       - lf-provide-maven-settings:
906           global-settings-file: global-settings
907           settings-file: '{mvn-settings}'
908       - shell: !include-raw-escape:
909           - ../shell/common-variables.sh
910           - ../shell/maven-sonar.sh
911       - lf-provide-maven-settings-cleanup
912
913 - job-template:
914     name: '{project-name}-sonar'
915     id: gerrit-maven-sonar
916     <<: *lf_maven_common
917     # yamllint disable-line rule:key-duplicates
918     <<: *lf_maven_sonar
919
920     scm:
921       - lf-infra-gerrit-scm:
922           jenkins-ssh-credential: '{jenkins-ssh-credential}'
923           git-url: '{git-url}'
924           refspec: $GERRIT_REFSPEC
925           branch: $GERRIT_BRANCH
926           submodule-recursive: '{submodule-recursive}'
927           submodule-timeout: '{submodule-timeout}'
928           choosing-strategy: default
929
930 - job-template:
931     name: '{project-name}-sonar'
932     id: github-maven-sonar
933     <<: *lf_maven_common
934     # yamllint disable-line rule:key-duplicates
935     <<: *lf_maven_sonar
936
937     properties:
938       - lf-infra-properties:
939           build-days-to-keep: '{build-days-to-keep}'
940       - github:
941           url: '{github-url}/{github-org}/{project}'
942
943     scm:
944       - lf-infra-github-scm:
945           url: '{git-clone-url}{github-org}/{project}'
946           refspec: '+refs/pull/*:refs/remotes/origin/pr/*'
947           branch: '$sha1'
948           submodule-recursive: '{submodule-recursive}'
949           submodule-timeout: '{submodule-timeout}'
950           choosing-strategy: default
951           jenkins-ssh-credential: '{jenkins-ssh-credential}'
952
953     triggers:
954       - github-pull-request:
955           trigger-phrase: '^run-sonar$'
956           only-trigger-phrase: false
957           status-context: 'Maven Sonar'
958           permit-all: true
959           github-hooks: true
960           white-list-target-branches:
961             - '{branch}'
962
963 ################
964 # Maven Verify #
965 ################
966
967 - lf_maven_verify: &lf_maven_verify
968     name: lf-maven-verify
969
970     ######################
971     # Default parameters #
972     ######################
973
974     branch: master
975     build-days-to-keep: 7
976     build-timeout: 60
977     disable-job: false
978     git-url: '$GIT_URL/$PROJECT'
979     github-url: 'https://github.com'
980     java-version: openjdk8
981     mvn-global-settings: global-settings
982     mvn-goals: clean deploy
983     mvn-opts: ''
984     mvn-params: '-Dstream=$STREAM'
985     mvn-version: mvn35
986     stream: master
987     submodule-recursive: true
988     submodule-timeout: 10
989
990     gerrit_verify_triggers:
991       - patchset-created-event:
992           exclude-drafts: true
993           exclude-trivial-rebase: false
994           exclude-no-code-change: false
995       - draft-published-event
996       - comment-added-contains-event:
997           comment-contains-value: '^Patch Set[ ]+[0-9]+:([ ]+|[\n]+)(recheck|reverify)$'
998
999     gerrit_trigger_file_paths:
1000       - compare-type: REG_EXP
1001         pattern: '.*'
1002
1003     # github_included_regions MUST match gerrit_trigger_file_paths
1004     github_included_regions:
1005       - '.*'
1006
1007     #####################
1008     # Job Configuration #
1009     #####################
1010
1011     concurrent: true
1012     disabled: '{disable-job}'
1013
1014     builders:
1015       - lf-infra-pre-build
1016       - lf-jacoco-nojava-workaround
1017       - lf-maven-install:
1018           mvn-version: '{mvn-version}'
1019       - lf-update-java-alternatives:
1020           java-version: '{java-version}'
1021       - lf-provide-maven-settings:
1022           global-settings-file: '{mvn-global-settings}'
1023           settings-file: '{mvn-settings}'
1024       - lf-maven-build:
1025           mvn-goals: '{mvn-goals}'
1026       - lf-provide-maven-settings-cleanup
1027
1028     publishers:
1029       - findbugs
1030       - lf-jacoco-report
1031       - lf-infra-publish
1032
1033 - job-template:
1034     name: '{project-name}-maven-verify-{stream}-{mvn-version}-{java-version}'
1035     id: gerrit-maven-verify
1036     <<: *lf_maven_common
1037     # yamllint disable-line rule:key-duplicates
1038     <<: *lf_maven_verify
1039
1040     scm:
1041       - lf-infra-gerrit-scm:
1042           jenkins-ssh-credential: '{jenkins-ssh-credential}'
1043           git-url: '{git-url}'
1044           refspec: '$GERRIT_REFSPEC'
1045           branch: '$GERRIT_BRANCH'
1046           submodule-recursive: '{submodule-recursive}'
1047           submodule-timeout: '{submodule-timeout}'
1048           choosing-strategy: gerrit
1049
1050     triggers:
1051       - gerrit:
1052           server-name: '{gerrit-server-name}'
1053           trigger-on: '{obj:gerrit_verify_triggers}'
1054           projects:
1055             - project-compare-type: ANT
1056               project-pattern: '{project}'
1057               branches:
1058                 - branch-compare-type: ANT
1059                   branch-pattern: '**/{branch}'
1060               file-paths: '{obj:gerrit_trigger_file_paths}'
1061
1062 - job-template:
1063     name: '{project-name}-maven-verify-{stream}-{mvn-version}-{java-version}'
1064     id: github-maven-verify
1065     <<: *lf_maven_common
1066     # yamllint disable-line rule:key-duplicates
1067     <<: *lf_maven_verify
1068
1069     properties:
1070       - lf-infra-properties:
1071           build-days-to-keep: '{build-days-to-keep}'
1072       - github:
1073           url: '{github-url}/{github-org}/{project}'
1074
1075     scm:
1076       - lf-infra-github-scm:
1077           url: '{git-clone-url}{github-org}/{project}'
1078           refspec: '+refs/pull/*:refs/remotes/origin/pr/*'
1079           branch: '$sha1'
1080           submodule-recursive: '{submodule-recursive}'
1081           submodule-timeout: '{submodule-timeout}'
1082           choosing-strategy: default
1083           jenkins-ssh-credential: '{jenkins-ssh-credential}'
1084
1085     triggers:
1086       - github-pull-request:
1087           trigger-phrase: '^(recheck|reverify)$'
1088           only-trigger-phrase: false
1089           status-context: 'Maven Verify'
1090           permit-all: true
1091           github-hooks: true
1092           white-list-target-branches:
1093             - '{branch}'
1094           included-regions: '{obj:github_included_regions}'
1095
1096 #############################
1097 # Maven Verify Dependencies #
1098 #############################
1099
1100 - lf_maven_verify_dependencies: &lf_maven_verify_dependencies
1101     name: lf-maven-verify-dependencies
1102
1103     ######################
1104     # Default parameters #
1105     ######################
1106
1107     branch: master
1108     build-days-to-keep: 7
1109     build-timeout: 60
1110     disable-job: false
1111     git-url: '$GIT_URL/$PROJECT'
1112     github-url: 'https://github.com'
1113     java-version: openjdk8
1114     mvn-global-settings: global-settings
1115     mvn-goals: clean deploy
1116     mvn-opts: ''
1117     mvn-params: '-Dstream=$STREAM'
1118     mvn-version: mvn35
1119     stream: master
1120     submodule-recursive: true
1121     submodule-timeout: 10
1122
1123     gerrit_verify_triggers:
1124       - comment-added-contains-event:
1125           comment-contains-value: 'recheck: [0-9 ]+'
1126     gerrit_trigger_file_paths:
1127       - compare-type: ANT
1128         pattern: '**'
1129
1130     #####################
1131     # Job Configuration #
1132     #####################
1133
1134     concurrent: true
1135     disabled: '{disable-job}'
1136
1137     builders:
1138       - lf-infra-pre-build
1139       - lf-jacoco-nojava-workaround
1140       - lf-maven-install:
1141           mvn-version: '{mvn-version}'
1142       - lf-update-java-alternatives:
1143           java-version: '{java-version}'
1144       - lf-provide-maven-settings:
1145           global-settings-file: '{mvn-global-settings}'
1146           settings-file: '{mvn-settings}'
1147       - lf-fetch-dependent-patches
1148       - shell: !include-raw-escape:
1149           - ../shell/common-variables.sh
1150           - ../shell/maven-build-deps.sh
1151       - lf-maven-build:
1152           mvn-goals: '{mvn-goals}'
1153       - lf-provide-maven-settings-cleanup
1154
1155     publishers:
1156       - findbugs
1157       - lf-jacoco-report
1158       - lf-infra-publish
1159
1160 - job-template:
1161     name: '{project-name}-maven-verify-deps-{stream}-{mvn-version}-{java-version}'
1162     id: gerrit-maven-verify-dependencies
1163     <<: *lf_maven_common
1164     # yamllint disable-line rule:key-duplicates
1165     <<: *lf_maven_verify_dependencies
1166
1167     scm:
1168       - lf-infra-gerrit-scm:
1169           jenkins-ssh-credential: '{jenkins-ssh-credential}'
1170           git-url: '{git-url}'
1171           refspec: '$GERRIT_REFSPEC'
1172           branch: '$GERRIT_BRANCH'
1173           submodule-recursive: '{submodule-recursive}'
1174           submodule-timeout: '{submodule-timeout}'
1175           choosing-strategy: gerrit
1176
1177     triggers:
1178       - gerrit:
1179           server-name: '{gerrit-server-name}'
1180           trigger-on: '{obj:gerrit_verify_triggers}'
1181           projects:
1182             - project-compare-type: ANT
1183               project-pattern: '{project}'
1184               branches:
1185                 - branch-compare-type: ANT
1186                   branch-pattern: '**/{branch}'
1187               file-paths: '{obj:gerrit_trigger_file_paths}'