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