878840cfb6f3f67e03b03e7ead757913c7907998
[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-versions-plugin
26     builders:
27       - conditional-step:
28           condition-kind: boolean-expression
29           condition-expression: "{maven-versions-plugin}"
30           steps:
31             - inject:
32                 properties-file: "{version-properties-file}"
33             - maven-target:
34                 maven-version: "{mvn-version}"
35                 pom: "{mvn-pom}"
36                 goals: "versions:set versions:update-child-modules versions:commit -B"
37                 properties:
38                   - "newVersion=${{release_version}}"
39                 settings: "{mvn-settings}"
40                 settings-type: cfp
41                 global-settings: "global-settings"
42                 global-settings-type: cfp
43
44 - builder:
45     name: lf-maven-stage
46     builders:
47       - lf-provide-maven-settings:
48           global-settings-file: "{mvn-global-settings}"
49           settings-file: "{mvn-settings}"
50       - lf-infra-create-netrc:
51           server-id: "{mvn-staging-id}"
52       # include-raw-escape fails due to JJB bug
53       - shell: !include-raw-escape:
54           - ../shell/common-variables.sh
55           - ../shell/maven-stage.sh
56       - lf-provide-maven-settings-cleanup
57
58 - builder:
59     name: lf-update-java-alternatives
60     builders:
61       - inject:
62           # Work around inject plugin overriding our GIT_URL variable incorrectly
63           # https://issues.jenkins-ci.org/browse/JENKINS-49775
64           properties-content: |
65             SET_JDK_VERSION={java-version}
66             GIT_URL="$GIT_URL"
67       - shell: !include-raw-escape: ../shell/update-java-alternatives.sh
68       - inject:
69           properties-file: "/tmp/java.env"
70
71 ####################
72 # COMMON FUNCTIONS #
73 ####################
74
75 - lf_maven_common: &lf_maven_common
76     name: lf-maven-common
77
78     ######################
79     # Default parameters #
80     ######################
81
82     archive-artifacts: >
83       **/*.log
84       **/hs_err_*.log
85       **/target/**/feature.xml
86       **/target/failsafe-reports/failsafe-summary.xml
87       **/target/surefire-reports/*-output.txt
88
89     #####################
90     # Job Configuration #
91     #####################
92
93     project-type: freestyle
94     node: "{build-node}"
95
96     properties:
97       - lf-infra-properties:
98           build-days-to-keep: "{build-days-to-keep}"
99
100     parameters:
101       - lf-infra-parameters:
102           project: "{project}"
103           branch: "{branch}"
104           stream: "{stream}"
105       - lf-infra-maven-parameters:
106           mvn-opts: "{mvn-opts}"
107           mvn-params: "{mvn-params}"
108           mvn-version: "{mvn-version}"
109       - string:
110           name: ARCHIVE_ARTIFACTS
111           default: "{archive-artifacts}"
112           description: Artifacts to archive to the logs server.
113
114     wrappers:
115       - lf-infra-wrappers:
116           build-timeout: "{build-timeout}"
117           jenkins-ssh-credential: "{jenkins-ssh-credential}"
118
119     publishers:
120       # TODO: Make email notification work.
121       # - lf-infra-email-notify:
122       #     email-recipients: '{email-recipients}'
123       #     email-prefix: '[releng]'
124       - lf-infra-publish
125
126 #############
127 # Maven CLM #
128 #############
129
130 - lf_maven_clm: &lf_maven_clm
131     name: lf-maven-clm
132
133     ######################
134     # Default parameters #
135     ######################
136
137     branch: master
138     build-days-to-keep: 30 # 30 days for troubleshooting purposes
139     build-timeout: 60
140     disable-job: false
141     git-url: "$GIT_URL/$PROJECT"
142     github-url: "https://github.com"
143     java-version: openjdk11
144     mvn-global-settings: global-settings
145     mvn-goals: clean install
146     mvn-opts: ""
147     mvn-params: ""
148     mvn-version: mvn35
149     nexus-iq-namespace: "" # Recommend a trailing dash when set. Example: odl-
150     nexus-iq-stage: "build"
151     stream: master
152     submodule-recursive: true
153     submodule-timeout: 10
154     submodule-disable: false
155
156     nexus_iq_scan_patterns:
157       - "**/*.ear"
158       - "**/*.jar"
159       - "**/*.tar.gz"
160       - "**/*.war"
161       - "**/*.zip"
162
163     gerrit_clm_triggers:
164       - comment-added-contains-event:
165           comment-contains-value: '^Patch Set\s+\d+:\s+run-clm\s*$'
166
167     parameters:
168       - lf-infra-parameters:
169           project: "{project}"
170           branch: "{branch}"
171           stream: "{stream}"
172       - lf-infra-maven-parameters:
173           mvn-opts: "{mvn-opts}"
174           mvn-params: "{mvn-params}"
175           mvn-version: "{mvn-version}"
176       - string:
177           name: ARCHIVE_ARTIFACTS
178           default: "{archive-artifacts}"
179           description: Artifacts to archive to the logs server.
180       - lf-clm-parameters:
181           nexus-iq-stage: "{nexus-iq-stage}"
182
183     #####################
184     # Job Configuration #
185     #####################
186
187     disabled: "{disable-job}"
188
189     builders:
190       - lf-infra-pre-build
191       - lf-maven-install:
192           mvn-version: "{mvn-version}"
193       - lf-update-java-alternatives:
194           java-version: "{java-version}"
195       - lf-provide-maven-settings:
196           global-settings-file: "{mvn-global-settings}"
197           settings-file: "{mvn-settings}"
198       - lf-infra-sonatype-clm:
199           mvn-goals: "{mvn-goals}"
200       - lf-provide-maven-settings-cleanup
201       - shell: 'find . -regex ".*karaf/target" | xargs rm -rf'
202       - nexus-iq-policy-evaluator:
203           stage: "{nexus-iq-stage}"
204           application-type: "manual"
205           application-id: "{nexus-iq-namespace}{project-name}"
206           scan-patterns: "{obj:nexus_iq_scan_patterns}"
207           fail-build-network-error: true
208
209 - builder:
210     name: lf-infra-sonatype-clm
211     # Run a CLM scan build with Maven
212     builders:
213       - inject:
214           properties-content: |
215             MAVEN_GOALS={mvn-goals}
216       - shell: !include-raw-escape:
217           - ../shell/common-variables.sh
218           - ../shell/sonatype-clm.sh
219
220 - job-template:
221     name: "{project-name}-maven-clm-{stream}"
222     id: gerrit-maven-clm
223     <<: *lf_maven_common
224     # yamllint disable-line rule:key-duplicates
225     <<: *lf_maven_clm
226
227     scm:
228       - lf-infra-gerrit-scm:
229           jenkins-ssh-credential: "{jenkins-ssh-credential}"
230           git-url: "{git-url}"
231           refspec: "$GERRIT_REFSPEC"
232           branch: "$GERRIT_BRANCH"
233           submodule-recursive: "{submodule-recursive}"
234           submodule-timeout: "{submodule-timeout}"
235           submodule-disable: "{submodule-disable}"
236           choosing-strategy: default
237
238     triggers:
239       # Build weekly on Saturdays
240       - timed: "H H * * 6"
241       - gerrit:
242           server-name: "{gerrit-server-name}"
243           trigger-on: "{obj:gerrit_clm_triggers}"
244           projects:
245             - project-compare-type: ANT
246               project-pattern: "{project}"
247               branches:
248                 - branch-compare-type: ANT
249                   branch-pattern: "**/{branch}"
250           skip-vote:
251             successful: true
252             failed: true
253             unstable: true
254             notbuilt: true
255
256 - job-template:
257     name: "{project-name}-maven-clm-{stream}"
258     id: github-maven-clm
259     <<: *lf_maven_common
260     # yamllint disable-line rule:key-duplicates
261     <<: *lf_maven_clm
262
263     properties:
264       - lf-infra-properties:
265           build-days-to-keep: "{build-days-to-keep}"
266       - github:
267           url: "{github-url}/{github-org}/{project}"
268
269     scm:
270       - lf-infra-github-scm:
271           url: "{git-clone-url}{github-org}/{project}"
272           refspec: ""
273           branch: "refs/heads/{branch}"
274           submodule-recursive: "{submodule-recursive}"
275           submodule-timeout: "{submodule-timeout}"
276           submodule-disable: "{submodule-disable}"
277           choosing-strategy: default
278           jenkins-ssh-credential: "{jenkins-ssh-credential}"
279
280     triggers:
281       # Build weekly on Saturdays
282       - timed: "H H * * 6"
283       - github-pull-request:
284           trigger-phrase: "^run-clm$"
285           only-trigger-phrase: true
286           status-context: "CLM"
287           permit-all: true
288           github-hooks: true
289           org-list:
290             - "{github-org}"
291           white-list: "{obj:github_pr_allowlist}"
292           admin-list: "{obj:github_pr_admin_list}"
293           white-list-target-branches:
294             - "{branch}"
295
296 #########################
297 # Maven Javadoc Publish #
298 #########################
299
300 - lf_maven_javadoc_publish: &lf_maven_javadoc_publish
301     name: lf-maven-javadoc-publish
302
303     ######################
304     # Default parameters #
305     ######################
306
307     branch: master
308     build-days-to-keep: 30 # 30 days in case a release takes long to get approved.
309     build-timeout: 60
310     disable-job: false
311     git-url: "$GIT_URL/$PROJECT"
312     github-url: "https://github.com"
313     java-version: openjdk11
314     mvn-dir: "."
315     mvn-global-settings: global-settings
316     mvn-opts: ""
317     mvn-params: ""
318     mvn-version: mvn35
319     stream: master
320     submodule-recursive: true
321     submodule-timeout: 10
322     submodule-disable: false
323
324     gerrit_merge_triggers:
325       - change-merged-event
326       - comment-added-contains-event:
327           comment-contains-value: '^Patch Set\s+\d+:\s+remerge\s*$'
328
329     #####################
330     # Job Configuration #
331     #####################
332
333     disabled: "{disable-job}"
334
335     builders:
336       - lf-infra-pre-build
337       - lf-maven-install:
338           mvn-version: "{mvn-version}"
339       - lf-update-java-alternatives:
340           java-version: "{java-version}"
341       - lf-provide-maven-settings:
342           global-settings-file: "{mvn-global-settings}"
343           settings-file: "{mvn-settings}"
344       - lf-infra-create-netrc:
345           server-id: "{mvn-site-id}"
346       - inject:
347           properties-content: |
348             DEPLOY_PATH={javadoc-path}
349             MAVEN_DIR={mvn-dir}
350       - shell: !include-raw-escape:
351           - ../shell/common-variables.sh
352           - ../shell/maven-javadoc-generate.sh
353           - ../shell/maven-javadoc-publish.sh
354       - lf-provide-maven-settings-cleanup
355
356 - job-template:
357     name: "{project-name}-maven-javadoc-publish-{stream}-{java-version}"
358     id: gerrit-maven-javadoc-publish
359     <<: *lf_maven_common
360     # yamllint disable-line rule:key-duplicates
361     <<: *lf_maven_javadoc_publish
362
363     git-url: "$GIT_URL/$GERRIT_PROJECT"
364
365     scm:
366       - lf-infra-gerrit-scm:
367           git-url: "{git-url}"
368           refspec: ""
369           branch: "{branch}"
370           submodule-recursive: "{submodule-recursive}"
371           submodule-timeout: "{submodule-timeout}"
372           submodule-disable: "{submodule-disable}"
373           choosing-strategy: default
374           jenkins-ssh-credential: "{jenkins-ssh-credential}"
375
376     triggers:
377       - gerrit:
378           server-name: "{gerrit-server-name}"
379           trigger-on: "{obj:gerrit_merge_triggers}"
380           projects:
381             - project-compare-type: ANT
382               project-pattern: "{project}"
383               branches:
384                 - branch-compare-type: ANT
385                   branch-pattern: "**/{branch}"
386
387 - job-template:
388     name: "{project-name}-maven-javadoc-publish-{stream}-{java-version}"
389     id: github-maven-javadoc-publish
390     <<: *lf_maven_common
391     # yamllint disable-line rule:key-duplicates
392     <<: *lf_maven_javadoc_publish
393
394     properties:
395       - lf-infra-properties:
396           build-days-to-keep: "{build-days-to-keep}"
397       - github:
398           url: "{github-url}/{github-org}/{project}"
399
400     scm:
401       - lf-infra-github-scm:
402           url: "{git-clone-url}{github-org}/{project}"
403           refspec: ""
404           branch: "{branch}"
405           submodule-recursive: "{submodule-recursive}"
406           submodule-timeout: "{submodule-timeout}"
407           submodule-disable: "{submodule-disable}"
408           choosing-strategy: default
409           jenkins-ssh-credential: "{jenkins-ssh-credential}"
410
411     triggers:
412       - github
413       - pollscm:
414           cron: ""
415       - github-pull-request:
416           trigger-phrase: "^remerge$"
417           only-trigger-phrase: true
418           status-context: "Maven Javadoc Publish"
419           permit-all: true
420           github-hooks: true
421           org-list:
422             - "{github-org}"
423           white-list: "{obj:github_pr_allowlist}"
424           admin-list: "{obj:github_pr_admin_list}"
425           white-list-target-branches:
426             - "{branch}"
427
428 ########################
429 # Maven Javadoc Verify #
430 ########################
431
432 - lf_maven_javadoc_verify: &lf_maven_javadoc_verify
433     name: lf-maven-javadoc-verify
434
435     ######################
436     # Default parameters #
437     ######################
438
439     branch: master
440     build-days-to-keep: 30 # 30 days in case a release takes long to get approved.
441     build-timeout: 60
442     disable-job: false
443     git-url: "$GIT_URL/$PROJECT"
444     github-url: "https://github.com"
445     java-version: openjdk11
446     mvn-dir: "."
447     mvn-global-settings: global-settings
448     mvn-opts: ""
449     mvn-params: ""
450     mvn-version: mvn35
451     stream: master
452     submodule-recursive: true
453     submodule-timeout: 10
454     submodule-disable: false
455
456     gerrit_verify_triggers:
457       - patchset-created-event:
458           exclude-drafts: true
459           exclude-trivial-rebase: false
460           exclude-no-code-change: false
461       - draft-published-event
462       - comment-added-contains-event:
463           comment-contains-value: '^Patch Set\s+\d+:\s+(recheck|reverify)\s*$'
464
465     #####################
466     # Job Configuration #
467     #####################
468
469     concurrent: true
470     disabled: "{disable-job}"
471
472     builders:
473       - lf-infra-pre-build
474       - lf-maven-install:
475           mvn-version: "{mvn-version}"
476       - lf-update-java-alternatives:
477           java-version: "{java-version}"
478       - lf-provide-maven-settings:
479           global-settings-file: "{mvn-global-settings}"
480           settings-file: "{mvn-settings}"
481       - inject:
482           properties-content: |
483             MAVEN_DIR={mvn-dir}
484       - shell: !include-raw-escape:
485           - ../shell/common-variables.sh
486           - ../shell/maven-javadoc-generate.sh
487       - lf-provide-maven-settings-cleanup
488
489 - job-template:
490     name: "{project-name}-maven-javadoc-verify-{stream}-{java-version}"
491     id: gerrit-maven-javadoc-verify
492     <<: *lf_maven_common
493     # yamllint disable-line rule:key-duplicates
494     <<: *lf_maven_javadoc_verify
495
496     scm:
497       - lf-infra-gerrit-scm:
498           jenkins-ssh-credential: "{jenkins-ssh-credential}"
499           git-url: "{git-url}"
500           refspec: "$GERRIT_REFSPEC"
501           branch: "$GERRIT_BRANCH"
502           submodule-recursive: "{submodule-recursive}"
503           submodule-timeout: "{submodule-timeout}"
504           submodule-disable: "{submodule-disable}"
505           choosing-strategy: gerrit
506
507     triggers:
508       - gerrit:
509           server-name: "{gerrit-server-name}"
510           trigger-on: "{obj:gerrit_verify_triggers}"
511           projects:
512             - project-compare-type: ANT
513               project-pattern: "{project}"
514               branches:
515                 - branch-compare-type: ANT
516                   branch-pattern: "**/{branch}"
517
518 - job-template:
519     name: "{project-name}-maven-javadoc-verify-{stream}-{java-version}"
520     id: github-maven-javadoc-verify
521     <<: *lf_maven_common
522     # yamllint disable-line rule:key-duplicates
523     <<: *lf_maven_javadoc_verify
524
525     properties:
526       - lf-infra-properties:
527           build-days-to-keep: "{build-days-to-keep}"
528       - github:
529           url: "{github-url}/{github-org}/{project}"
530
531     scm:
532       - lf-infra-github-scm:
533           url: "{git-clone-url}{github-org}/{project}"
534           refspec: "+refs/pull/*:refs/remotes/origin/pr/*"
535           branch: "$sha1"
536           submodule-recursive: "{submodule-recursive}"
537           submodule-timeout: "{submodule-timeout}"
538           submodule-disable: "{submodule-disable}"
539           choosing-strategy: default
540           jenkins-ssh-credential: "{jenkins-ssh-credential}"
541
542     triggers:
543       - github-pull-request:
544           trigger-phrase: ^(recheck|reverify)$
545           only-trigger-phrase: false
546           status-context: "Maven Javadoc Verify"
547           permit-all: true
548           github-hooks: true
549           white-list-target-branches:
550             - "{branch}"
551
552 ###############
553 # Maven Merge #
554 ###############
555
556 - lf_maven_merge: &lf_maven_merge
557     name: lf-maven-merge
558
559     ######################
560     # Default parameters #
561     ######################
562
563     branch: master
564     build-days-to-keep: 30 # 30 days in case we need to troubleshoot
565     build-timeout: 60
566     cron: "@daily"
567     disable-job: false
568     git-url: "$GIT_URL/$PROJECT"
569     github-url: "https://github.com"
570     java-version: openjdk11
571     mvn-global-settings: global-settings
572     mvn-goals: clean deploy
573     mvn-opts: ""
574     mvn-params: "-Dmerge"
575     mvn-version: mvn35
576     nexus-cut-dirs: 6 # Number of dirs in the Nexus path to remove for wget -r.
577     stream: master
578     submodule-recursive: true
579     submodule-timeout: 10
580     submodule-disable: false
581
582     gerrit_merge_triggers:
583       - change-merged-event
584       - comment-added-contains-event:
585           comment-contains-value: '^Patch Set\s+\d+:\s+remerge\s*$'
586
587     gerrit_trigger_file_paths:
588       - compare-type: REG_EXP
589         pattern: ".*"
590
591     # github_included_regions MUST match gerrit_trigger_file_paths
592     github_included_regions:
593       - ".*"
594
595     post_build_trigger: ""
596
597     #####################
598     # Job Configuration #
599     #####################
600
601     disabled: "{disable-job}"
602
603     builders:
604       - lf-infra-pre-build
605       - lf-jacoco-nojava-workaround
606       - lf-maven-install:
607           mvn-version: "{mvn-version}"
608       - lf-update-java-alternatives:
609           java-version: "{java-version}"
610       - lf-provide-maven-settings:
611           global-settings-file: "{mvn-global-settings}"
612           settings-file: "{mvn-settings}"
613       - lf-infra-create-netrc:
614           server-id: "{mvn-snapshot-id}"
615       - inject:
616           properties-content: |
617             NEXUS_CUT_DIRS={nexus-cut-dirs}
618             NEXUS_REPO={nexus-snapshot-repo}
619       - shell: !include-raw-escape: ../shell/maven-fetch-metadata.sh
620       - lf-maven-build:
621           mvn-goals: "{mvn-goals}"
622       - lf-maven-deploy
623       - lf-provide-maven-settings-cleanup
624
625     publishers:
626       - findbugs
627       - lf-jacoco-report
628       - lf-infra-publish
629       - trigger-parameterized-builds: "{obj:post_build_trigger}"
630
631 - job-template:
632     name: "{project-name}-maven-merge-{stream}"
633     id: gerrit-maven-merge
634     <<: *lf_maven_common
635     # yamllint disable-line rule:key-duplicates
636     <<: *lf_maven_merge
637
638     scm:
639       - lf-infra-gerrit-scm:
640           jenkins-ssh-credential: "{jenkins-ssh-credential}"
641           git-url: "{git-url}"
642           refspec: "$GERRIT_REFSPEC"
643           branch: "$GERRIT_BRANCH"
644           submodule-recursive: "{submodule-recursive}"
645           submodule-timeout: "{submodule-timeout}"
646           submodule-disable: "{submodule-disable}"
647           choosing-strategy: default
648
649     triggers:
650       - timed: "{obj:cron}"
651       - gerrit:
652           server-name: "{gerrit-server-name}"
653           trigger-on: "{obj:gerrit_merge_triggers}"
654           projects:
655             - project-compare-type: ANT
656               project-pattern: "{project}"
657               branches:
658                 - branch-compare-type: ANT
659                   branch-pattern: "**/{branch}"
660               file-paths: "{obj:gerrit_trigger_file_paths}"
661
662 - job-template:
663     name: "{project-name}-maven-merge-{stream}"
664     id: github-maven-merge
665     <<: *lf_maven_common
666     # yamllint disable-line rule:key-duplicates
667     <<: *lf_maven_merge
668
669     properties:
670       - lf-infra-properties:
671           build-days-to-keep: "{build-days-to-keep}"
672       - github:
673           url: "{github-url}/{github-org}/{project}"
674
675     scm:
676       - lf-infra-github-scm:
677           url: "{git-clone-url}{github-org}/{project}"
678           refspec: ""
679           branch: "refs/heads/{branch}"
680           submodule-recursive: "{submodule-recursive}"
681           submodule-timeout: "{submodule-timeout}"
682           submodule-disable: "{submodule-disable}"
683           choosing-strategy: default
684           jenkins-ssh-credential: "{jenkins-ssh-credential}"
685
686     triggers:
687       - timed: "{obj:cron}"
688       - github
689       - pollscm:
690           cron: ""
691       - github-pull-request:
692           trigger-phrase: "^remerge$"
693           only-trigger-phrase: true
694           status-context: "Maven Merge"
695           permit-all: true
696           github-hooks: true
697           org-list:
698             - "{github-org}"
699           white-list: "{obj:github_pr_allowlist}"
700           admin-list: "{obj:github_pr_admin_list}"
701           white-list-target-branches:
702             - "{branch}"
703           included-regions: "{obj:github_included_regions}"
704
705 ##########################
706 # Maven Merge for Docker #
707 ##########################
708
709 - lf_maven_docker_merge: &lf_maven_docker_merge
710     name: lf-maven-docker-merge
711
712     builders:
713       - lf-infra-pre-build
714       - lf-jacoco-nojava-workaround
715       - lf-maven-install:
716           mvn-version: "{mvn-version}"
717       - lf-infra-docker-login:
718           global-settings-file: "{mvn-global-settings}"
719           settings-file: "{mvn-settings}"
720       - lf-update-java-alternatives:
721           java-version: "{java-version}"
722       # must provide maven settings AFTER docker due to its cleanup
723       - lf-provide-maven-settings:
724           global-settings-file: "{mvn-global-settings}"
725           settings-file: "{mvn-settings}"
726       - lf-infra-create-netrc:
727           server-id: "{mvn-snapshot-id}"
728       - inject:
729           properties-content: |
730             NEXUS_CUT_DIRS={nexus-cut-dirs}
731             NEXUS_REPO={nexus-snapshot-repo}
732             CONTAINER_PULL_REGISTRY={container-public-registry}
733             CONTAINER_PUSH_REGISTRY={container-snapshot-registry}
734       - shell: !include-raw-escape: ../shell/maven-fetch-metadata.sh
735       - lf-maven-build:
736           mvn-goals: "{mvn-goals}"
737       # NO lf-maven-deploy
738       - lf-provide-maven-settings-cleanup
739
740 - job-template:
741     name: "{project-name}-maven-docker-merge-{stream}"
742     id: gerrit-maven-docker-merge
743     <<: *lf_maven_common
744     # yamllint disable-line rule:key-duplicates
745     <<: *lf_maven_merge
746     # yamllint disable-line rule:key-duplicates
747     <<: *lf_maven_docker_merge
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           submodule-disable: "{submodule-disable}"
758           choosing-strategy: default
759
760     triggers:
761       - gerrit:
762           server-name: "{gerrit-server-name}"
763           trigger-on: "{obj:gerrit_merge_triggers}"
764           projects:
765             - project-compare-type: ANT
766               project-pattern: "{project}"
767               branches:
768                 - branch-compare-type: ANT
769                   branch-pattern: "**/{branch}"
770               file-paths: "{obj:gerrit_trigger_file_paths}"
771
772 - job-template:
773     name: "{project-name}-maven-docker-merge-{stream}"
774     id: github-maven-docker-merge
775     <<: *lf_maven_common
776     # yamllint disable-line rule:key-duplicates
777     <<: *lf_maven_merge
778     # yamllint disable-line rule:key-duplicates
779     <<: *lf_maven_docker_merge
780
781     properties:
782       - lf-infra-properties:
783           build-days-to-keep: "{build-days-to-keep}"
784       - github:
785           url: "{github-url}/{github-org}/{project}"
786
787     scm:
788       - lf-infra-github-scm:
789           url: "{git-clone-url}{github-org}/{project}"
790           refspec: ""
791           branch: "refs/heads/{branch}"
792           submodule-recursive: "{submodule-recursive}"
793           submodule-timeout: "{submodule-timeout}"
794           submodule-disable: "{submodule-disable}"
795           choosing-strategy: default
796           jenkins-ssh-credential: "{jenkins-ssh-credential}"
797
798     triggers:
799       - github
800       - pollscm:
801           cron: ""
802       - github-pull-request:
803           trigger-phrase: "^remerge$"
804           only-trigger-phrase: true
805           status-context: "Maven Docker Merge"
806           permit-all: true
807           github-hooks: true
808           org-list:
809             - "{github-org}"
810           white-list: "{obj:github_pr_allowlist}"
811           admin-list: "{obj:github_pr_admin_list}"
812           white-list-target-branches:
813             - "{branch}"
814           included-regions: "{obj:github_included_regions}"
815
816 ###############
817 # Maven Stage #
818 ###############
819
820 - lf_maven_stage: &lf_maven_stage
821     name: lf-maven-stage
822
823     ######################
824     # Default parameters #
825     ######################
826
827     branch: master
828     build-days-to-keep: 30 # 30 days in case a release takes long to get approved.
829     build-timeout: 60
830     cron: "@daily"
831     disable-job: false
832     git-url: "$GIT_URL/$PROJECT"
833     github-url: "https://github.com"
834     java-version: openjdk11
835     maven-versions-plugin: false
836     version-properties-file: version.properties
837     mvn-central: false
838     mvn-global-settings: global-settings
839     mvn-goals: clean deploy
840     mvn-opts: ""
841     mvn-params: ""
842     mvn-version: mvn35
843     ossrh-profile-id: ""
844     mvn-pom: ""
845     sbom-flags: ""
846     sbom-path: "$WORKSPACE"
847     sbom-generator: false
848     sbom-generator-version: "v0.0.10"
849     sign-artifacts: false
850     sign-mode: serial
851     stream: master
852     submodule-recursive: true
853     submodule-timeout: 10
854     submodule-disable: false
855
856     gerrit_release_triggers:
857       - comment-added-contains-event:
858           comment-contains-value: '^Patch Set\s+\d+:\s+stage-(maven-)?release\s*$'
859
860     gerrit_trigger_file_paths:
861       - compare-type: ANT
862         pattern: "**"
863
864     # github_included_regions MUST match gerrit_trigger_file_paths
865     github_included_regions:
866       - ".*"
867
868     #####################
869     # Job Configuration #
870     #####################
871
872     disabled: "{disable-job}"
873
874     parameters:
875       - lf-infra-parameters:
876           project: "{project}"
877           branch: "{branch}"
878           stream: "{stream}"
879       - lf-infra-maven-parameters:
880           mvn-opts: "{mvn-opts}"
881           mvn-params: "{mvn-params}"
882           mvn-version: "{mvn-version}"
883           staging-profile-id: "{staging-profile-id}"
884       - bool:
885           name: MAVEN_VERSIONS_PLUGIN
886           default: "{maven-versions-plugin}"
887           description: Use maven-versions-plugin to update pom versions.
888       - string:
889           name: ARCHIVE_ARTIFACTS
890           default: "{archive-artifacts}"
891           description: Artifacts to archive to the logs server.
892       - string:
893           name: STAGING_PROFILE_ID
894           default: "{staging-profile-id}"
895           description: Nexus staging profile ID.
896       - string:
897           name: SBOM_GENERATOR_VERSION
898           default: "{sbom-generator-version}"
899           description: SBOM generator version to download and run.
900       - string:
901           name: SBOM_PATH
902           default: "{sbom-path}"
903           description: path where SBOM needs to be executed.
904
905     builders:
906       - lf-infra-pre-build
907       - lf-jacoco-nojava-workaround
908       - lf-maven-install:
909           mvn-version: "{mvn-version}"
910       - lf-update-java-alternatives:
911           java-version: "{java-version}"
912       - lf-provide-maven-settings:
913           global-settings-file: "{mvn-global-settings}"
914           settings-file: "{mvn-settings}"
915       - lf-maven-versions-plugin:
916           maven-versions-plugin: "{maven-versions-plugin}"
917           version-properties-file: "{version-properties-file}"
918           mvn-version: "{mvn-version}"
919           mvn-pom: "{mvn-pom}"
920           mvn-settings: "{mvn-settings}"
921       - shell: !include-raw-escape: ../shell/maven-patch-release.sh
922       - lf-maven-build:
923           mvn-goals: "{mvn-goals}"
924       # With SBOM Generator
925       - conditional-step:
926           condition-kind: boolean-expression
927           condition-expression: "{sbom-generator}"
928           steps:
929             - shell: echo 'Running SBOM Generator'
930             - lf-infra-maven-sbom-generator:
931                 sbom-flags: "{sbom-flags}"
932       - lf-sigul-sign-dir:
933           sign-artifacts: "{sign-artifacts}"
934           sign-dir: "$WORKSPACE/m2repo"
935           sign-mode: "{sign-mode}"
936       - lf-maven-stage:
937           mvn-global-settings: "{mvn-global-settings}"
938           mvn-settings: "{mvn-settings}"
939           mvn-staging-id: "{mvn-staging-id}"
940       - lf-maven-central:
941           mvn-central: "{mvn-central}"
942           mvn-global-settings: "{mvn-global-settings}"
943           mvn-settings: "{mvn-settings}"
944           ossrh-profile-id: "{ossrh-profile-id}"
945       - lf-provide-maven-settings-cleanup
946
947 - job-template:
948     name: "{project-name}-maven-stage-{stream}"
949     id: gerrit-maven-stage
950     <<: *lf_maven_common
951     # yamllint disable-line rule:key-duplicates
952     <<: *lf_maven_stage
953
954     scm:
955       - lf-infra-gerrit-scm:
956           jenkins-ssh-credential: "{jenkins-ssh-credential}"
957           git-url: "{git-url}"
958           refspec: "$GERRIT_REFSPEC"
959           branch: "$GERRIT_BRANCH"
960           submodule-recursive: "{submodule-recursive}"
961           submodule-timeout: "{submodule-timeout}"
962           submodule-disable: "{submodule-disable}"
963           choosing-strategy: default
964
965     triggers:
966       - timed: "{obj:cron}"
967       - gerrit:
968           server-name: "{gerrit-server-name}"
969           trigger-on: "{obj:gerrit_release_triggers}"
970           projects:
971             - project-compare-type: ANT
972               project-pattern: "{project}"
973               branches:
974                 - branch-compare-type: ANT
975                   branch-pattern: "**/{branch}"
976               file-paths: "{obj:gerrit_trigger_file_paths}"
977
978 - job-template:
979     name: "{project-name}-maven-stage-{stream}"
980     id: github-maven-stage
981     <<: *lf_maven_common
982     # yamllint disable-line rule:key-duplicates
983     <<: *lf_maven_stage
984
985     properties:
986       - lf-infra-properties:
987           build-days-to-keep: "{build-days-to-keep}"
988       - github:
989           url: "{github-url}/{github-org}/{project}"
990
991     scm:
992       - lf-infra-github-scm:
993           url: "{git-clone-url}{github-org}/{project}"
994           refspec: "+refs/pull/*:refs/remotes/origin/pr/*"
995           branch: "{branch}"
996           submodule-recursive: "{submodule-recursive}"
997           submodule-timeout: "{submodule-timeout}"
998           submodule-disable: "{submodule-disable}"
999           choosing-strategy: default
1000           jenkins-ssh-credential: "{jenkins-ssh-credential}"
1001
1002     triggers:
1003       - timed: "{obj:cron}"
1004       - github-pull-request:
1005           trigger-phrase: "^stage-(maven-)?release$"
1006           only-trigger-phrase: true
1007           status-context: "Maven Release"
1008           permit-all: true
1009           github-hooks: true
1010           white-list-target-branches:
1011             - "{branch}"
1012           included-regions: "{obj:github_included_regions}"
1013
1014 ##########################
1015 # Maven Stage for Docker #
1016 ##########################
1017
1018 - lf_maven_docker_stage: &lf_maven_docker_stage
1019     name: lf-maven-docker-stage
1020
1021     builders:
1022       - lf-infra-pre-build
1023       - lf-jacoco-nojava-workaround
1024       - lf-maven-install:
1025           mvn-version: "{mvn-version}"
1026       - lf-update-java-alternatives:
1027           java-version: "{java-version}"
1028       - lf-infra-docker-login:
1029           global-settings-file: "{mvn-global-settings}"
1030           settings-file: "{mvn-settings}"
1031       # must provide maven settings AFTER docker-login due to its cleanup
1032       - lf-provide-maven-settings:
1033           global-settings-file: "{mvn-global-settings}"
1034           settings-file: "{mvn-settings}"
1035       - lf-maven-versions-plugin:
1036           maven-versions-plugin: "{maven-versions-plugin}"
1037           version-properties-file: "{version-properties-file}"
1038           mvn-version: "{mvn-version}"
1039           mvn-pom: "{mvn-pom}"
1040           mvn-settings: "{mvn-settings}"
1041       - shell: !include-raw-escape: ../shell/maven-patch-release.sh
1042       - inject:
1043           properties-content: |
1044             CONTAINER_PULL_REGISTRY={container-public-registry}
1045             CONTAINER_PUSH_REGISTRY={container-staging-registry}
1046       - lf-maven-build:
1047           mvn-goals: "{mvn-goals}"
1048       - lf-sigul-sign-dir:
1049           sign-artifacts: "{sign-artifacts}"
1050           sign-dir: "$WORKSPACE/m2repo"
1051           sign-mode: "{sign-mode}"
1052       # NO lf-maven-stage
1053       # NO lf-maven-central
1054       - lf-provide-maven-settings-cleanup
1055
1056     gerrit_release_docker_triggers:
1057       - comment-added-contains-event:
1058           comment-contains-value: '^Patch Set\s+\d+:\s+stage-(docker-)?release\s*$'
1059
1060 - job-template:
1061     name: "{project-name}-maven-docker-stage-{stream}"
1062     id: gerrit-maven-docker-stage
1063     <<: *lf_maven_common
1064     # yamllint disable-line rule:key-duplicates
1065     <<: *lf_maven_stage
1066     # yamllint disable-line rule:key-duplicates
1067     <<: *lf_maven_docker_stage
1068
1069     scm:
1070       - lf-infra-gerrit-scm:
1071           jenkins-ssh-credential: "{jenkins-ssh-credential}"
1072           git-url: "{git-url}"
1073           refspec: "$GERRIT_REFSPEC"
1074           branch: "$GERRIT_BRANCH"
1075           submodule-recursive: "{submodule-recursive}"
1076           submodule-timeout: "{submodule-timeout}"
1077           submodule-disable: "{submodule-disable}"
1078           choosing-strategy: default
1079
1080     triggers:
1081       - timed: "{obj:cron}"
1082       - gerrit:
1083           server-name: "{gerrit-server-name}"
1084           trigger-on: "{obj:gerrit_release_docker_triggers}"
1085           projects:
1086             - project-compare-type: ANT
1087               project-pattern: "{project}"
1088               branches:
1089                 - branch-compare-type: ANT
1090                   branch-pattern: "**/{branch}"
1091               file-paths: "{obj:gerrit_trigger_file_paths}"
1092
1093 - job-template:
1094     name: "{project-name}-maven-docker-stage-{stream}"
1095     id: github-maven-docker-stage
1096     <<: *lf_maven_common
1097     # yamllint disable-line rule:key-duplicates
1098     <<: *lf_maven_stage
1099     # yamllint disable-line rule:key-duplicates
1100     <<: *lf_maven_docker_stage
1101
1102     properties:
1103       - lf-infra-properties:
1104           build-days-to-keep: "{build-days-to-keep}"
1105       - github:
1106           url: "{github-url}/{github-org}/{project}"
1107
1108     scm:
1109       - lf-infra-github-scm:
1110           url: "{git-clone-url}{github-org}/{project}"
1111           refspec: "+refs/pull/*:refs/remotes/origin/pr/*"
1112           branch: "{branch}"
1113           submodule-recursive: "{submodule-recursive}"
1114           submodule-timeout: "{submodule-timeout}"
1115           submodule-disable: "{submodule-disable}"
1116           choosing-strategy: default
1117           jenkins-ssh-credential: "{jenkins-ssh-credential}"
1118
1119     triggers:
1120       - timed: "{obj:cron}"
1121       - github-pull-request:
1122           trigger-phrase: "^stage-(docker-)?release$"
1123           only-trigger-phrase: true
1124           status-context: "Maven Release"
1125           permit-all: true
1126           github-hooks: true
1127           white-list-target-branches:
1128             - "{branch}"
1129           included-regions: "{obj:github_included_regions}"
1130
1131 ###############
1132 # Maven Sonar #
1133 ###############
1134
1135 - lf_maven_sonar: &lf_maven_sonar
1136     name: lf-maven-sonar
1137
1138     ######################
1139     # Default parameters #
1140     ######################
1141
1142     branch: master # Sonar should always be run on master branch
1143     build-days-to-keep: 7
1144     build-timeout: 60
1145     cron: "H H * * 6" # run weekly
1146     disable-job: false
1147     git-url: "$GIT_URL/$PROJECT"
1148     github-url: "https://github.com"
1149     java-version: openjdk11
1150     java-opts: ""
1151     mvn-global-settings: global-settings
1152     mvn-goals: clean install
1153     mvn-opts: ""
1154     mvn-params: ""
1155     mvn-version: mvn35
1156     sonar-mvn-goal: "sonar:sonar"
1157     sonarcloud: false
1158     sonarcloud-project-key: ""
1159     sonarcloud-project-organization: ""
1160     sonarcloud-api-token: ""
1161     sonarcloud-qualitygate-wait: false
1162     # SonarCloud scan using jdk8 will become deprecated by Oct, 2020
1163     # Projects not compatible with jdk11 can set java-version to something else
1164     sonarcloud-java-version: openjdk11
1165     stream: master
1166     submodule-recursive: true
1167     submodule-timeout: 10
1168     submodule-disable: false
1169     scan-dev-branch: false
1170
1171     gerrit_sonar_triggers:
1172       - comment-added-contains-event:
1173           comment-contains-value: '^Patch Set\s+\d+:\s+run-sonar\s*$'
1174
1175     #####################
1176     # Job Configuration #
1177     #####################
1178
1179     disabled: "{disable-job}"
1180
1181     parameters:
1182       - lf-infra-parameters:
1183           project: "{project}"
1184           branch: "{branch}"
1185           stream: "{stream}"
1186       - lf-infra-maven-parameters:
1187           mvn-opts: "{mvn-opts}"
1188           mvn-params: "{mvn-params}"
1189           mvn-version: "{mvn-version}"
1190       - string:
1191           name: ARCHIVE_ARTIFACTS
1192           default: "{archive-artifacts}"
1193           description: Artifacts to archive to the logs server.
1194       - string:
1195           name: JAVA_OPTS
1196           default: "{java-opts}"
1197           description: |
1198             Java options. Example: -Xmx1024m
1199       - string:
1200           name: SONAR_MAVEN_GOAL
1201           default: "{sonar-mvn-goal}"
1202           description: |
1203             Maven goals to pass to the Sonar call. Typically sonar:sonar
1204             however to use a specific version of the sonar-maven-plugin we
1205             can call "org.codehaus.mojo:sonar-maven-plugin:3.3.0.603:sonar".
1206
1207     triggers:
1208       - timed: "{obj:cron}"
1209       - gerrit:
1210           server-name: "{gerrit-server-name}"
1211           trigger-on: "{obj:gerrit_sonar_triggers}"
1212           projects:
1213             - project-compare-type: "ANT"
1214               project-pattern: "{project}"
1215               branches:
1216                 - branch-compare-type: "ANT"
1217                   branch-pattern: "**/master"
1218           skip-vote:
1219             successful: true
1220             failed: true
1221             unstable: true
1222             notbuilt: true
1223
1224     publishers:
1225       - lf-jacoco-report
1226       - findbugs
1227       - lf-infra-publish
1228
1229 - mvn_sonar_builders: &mvn_sonar_builders
1230     name: mvn-sonar-builders
1231     builders:
1232       - lf-infra-pre-build
1233       # With SonarCloud
1234       - conditional-step:
1235           condition-kind: boolean-expression
1236           condition-expression: "{sonarcloud}"
1237           steps:
1238             - shell: echo 'Using SonarCloud'
1239             - lf-infra-maven-sonarcloud:
1240                 java-version: "{java-version}"
1241                 mvn-goals: "{mvn-goals}"
1242                 mvn-settings: "{mvn-settings}"
1243                 mvn-version: "{mvn-version}"
1244                 sonarcloud-project-key: "{sonarcloud-project-key}"
1245                 sonarcloud-project-organization: "{sonarcloud-project-organization}"
1246                 sonarcloud-api-token: "{sonarcloud-api-token}"
1247                 sonarcloud-java-version: "{sonarcloud-java-version}"
1248                 sonarcloud-qualitygate-wait: "{sonarcloud-qualitygate-wait}"
1249                 scan-dev-branch: "{scan-dev-branch}"
1250       # With SonarQube
1251       - conditional-step:
1252           condition-kind: not
1253           condition-operand:
1254             condition-kind: boolean-expression
1255             condition-expression: "{sonarcloud}"
1256           steps:
1257             - shell: echo 'Using SonarQube'
1258             - lf-infra-maven-sonar:
1259                 java-version: "{java-version}"
1260                 mvn-goals: "{mvn-goals}"
1261                 mvn-settings: "{mvn-settings}"
1262                 mvn-version: "{mvn-version}"
1263
1264 - mvn_sonar_builders_prescan_script: &mvn_sonar_builders_prescan_script
1265     name: mvn-sonar-builders-prescan-script
1266     builders:
1267       - shell: "{sonar-prescan-script}"
1268       - lf-infra-pre-build
1269       # With SonarCloud
1270       - conditional-step:
1271           condition-kind: boolean-expression
1272           condition-expression: "{sonarcloud}"
1273           steps:
1274             - shell: echo 'Using SonarCloud'
1275             - lf-infra-maven-sonarcloud:
1276                 java-version: "{java-version}"
1277                 mvn-goals: "{mvn-goals}"
1278                 mvn-settings: "{mvn-settings}"
1279                 mvn-version: "{mvn-version}"
1280                 sonarcloud-project-key: "{sonarcloud-project-key}"
1281                 sonarcloud-project-organization: "{sonarcloud-project-organization}"
1282                 sonarcloud-api-token: "{sonarcloud-api-token}"
1283                 sonarcloud-java-version: "{sonarcloud-java-version}"
1284                 sonarcloud-qualitygate-wait: "{sonarcloud-qualitygate-wait}"
1285                 scan-dev-branch: "{scan-dev-branch}"
1286       # With SonarQube
1287       - conditional-step:
1288           condition-kind: not
1289           condition-operand:
1290             condition-kind: boolean-expression
1291             condition-expression: "{sonarcloud}"
1292           steps:
1293             - shell: echo 'Using SonarQube'
1294             - lf-infra-maven-sonar:
1295                 java-version: "{java-version}"
1296                 mvn-goals: "{mvn-goals}"
1297                 mvn-settings: "{mvn-settings}"
1298                 mvn-version: "{mvn-version}"
1299
1300 - builder:
1301     name: lf-infra-maven-sbom-generator
1302     # Run Maven goals and trigger SPDX SBOM Generator tool
1303     builders:
1304       - inject:
1305           properties-content: |
1306             SBOM_FLAGS={sbom-flags}
1307       - shell: !include-raw-escape:
1308           - ../shell/sbom-generator.sh
1309
1310 - builder:
1311     name: lf-infra-maven-sonar
1312     # Run a Sonar build with Maven
1313     builders:
1314       - lf-maven-install:
1315           mvn-version: "{mvn-version}"
1316       - lf-update-java-alternatives:
1317           java-version: "{java-version}"
1318       - inject:
1319           # Switch this to the sonar wrapper when JJB 2.0 is available
1320           properties-content: |
1321             SONAR_HOST_URL=$SONAR_URL
1322             MAVEN_GOALS={mvn-goals}
1323       - lf-provide-maven-settings:
1324           global-settings-file: global-settings
1325           settings-file: "{mvn-settings}"
1326       - shell: !include-raw-escape:
1327           - ../shell/common-variables.sh
1328           - ../shell/maven-sonar.sh
1329       - lf-provide-maven-settings-cleanup
1330
1331 - builder:
1332     name: lf-infra-maven-sonarcloud
1333     # Run a Sonar build with Maven
1334     builders:
1335       - lf-maven-install:
1336           mvn-version: "{mvn-version}"
1337       - lf-update-java-alternatives:
1338           java-version: "{java-version}"
1339       - inject:
1340           # Switch this to the sonar wrapper when JJB 2.0 is available
1341           properties-content: |
1342             SONAR_HOST_URL=https://sonarcloud.io
1343             PROJECT_KEY={sonarcloud-project-key}
1344             PROJECT_ORGANIZATION={sonarcloud-project-organization}
1345             MAVEN_GOALS={mvn-goals}
1346             API_TOKEN={sonarcloud-api-token}
1347             SONARCLOUD_JAVA_VERSION={sonarcloud-java-version}
1348             SCAN_DEV_BRANCH={scan-dev-branch}
1349             SONARCLOUD_QUALITYGATE_WAIT={sonarcloud-qualitygate-wait}
1350       - lf-provide-maven-settings:
1351           global-settings-file: global-settings
1352           settings-file: "{mvn-settings}"
1353       - shell: !include-raw-escape:
1354           - ../shell/common-variables.sh
1355           - ../shell/maven-sonar.sh
1356       - lf-provide-maven-settings-cleanup
1357
1358 - job-template:
1359     name: "{project-name}-sonar"
1360     id: gerrit-maven-sonar
1361     <<: *lf_maven_common
1362     # yamllint disable-line rule:key-duplicates
1363     <<: *lf_maven_sonar
1364     <<: *mvn_sonar_builders
1365
1366     scm:
1367       - lf-infra-gerrit-scm:
1368           jenkins-ssh-credential: "{jenkins-ssh-credential}"
1369           git-url: "{git-url}"
1370           refspec: $GERRIT_REFSPEC
1371           branch: $GERRIT_BRANCH
1372           submodule-recursive: "{submodule-recursive}"
1373           submodule-timeout: "{submodule-timeout}"
1374           submodule-disable: "{submodule-disable}"
1375           choosing-strategy: default
1376
1377 - job-template:
1378     name: "{project-name}-sonar-verify"
1379     id: gerrit-maven-sonar-verify
1380     <<: *lf_maven_common
1381     # yamllint disable-line rule:key-duplicates
1382     <<: *lf_maven_sonar
1383     <<: *mvn_sonar_builders
1384
1385     sonarcloud: true
1386     scan-dev-branch: true
1387     sonarcloud-qualitygate-wait: false
1388
1389     gerrit_sonar_triggers:
1390       - patchset-created-event:
1391           exclude-drafts: true
1392           exclude-trivial-rebase: false
1393           exclude-no-code-change: false
1394       - draft-published-event
1395       - comment-added-contains-event:
1396           comment-contains-value: '^Patch Set\s+\d+:\s+(recheck|reverify)\s*$'
1397
1398     gerrit_trigger_file_paths:
1399       - compare-type: REG_EXP
1400         pattern: ".*"
1401
1402     triggers:
1403       - gerrit:
1404           server-name: "{gerrit-server-name}"
1405           trigger-on: "{obj:gerrit_sonar_triggers}"
1406           projects:
1407             - project-compare-type: "ANT"
1408               project-pattern: "{project}"
1409               branches:
1410                 - branch-compare-type: "ANT"
1411                   branch-pattern: "**/{branch}"
1412               file-paths: "{obj:gerrit_trigger_file_paths}"
1413
1414     scm:
1415       - lf-infra-gerrit-scm:
1416           jenkins-ssh-credential: "{jenkins-ssh-credential}"
1417           git-url: "{git-url}"
1418           refspec: $GERRIT_REFSPEC
1419           branch: $GERRIT_BRANCH
1420           submodule-recursive: "{submodule-recursive}"
1421           submodule-timeout: "{submodule-timeout}"
1422           submodule-disable: "{submodule-disable}"
1423           choosing-strategy: gerrit
1424
1425 - job-template:
1426     name: "{project-name}-sonar-prescan-script"
1427     id: gerrit-maven-sonar-prescan-script
1428     <<: *lf_maven_common
1429     # yamllint disable-line rule:key-duplicates
1430     <<: *lf_maven_sonar
1431     <<: *mvn_sonar_builders_prescan_script
1432
1433     scm:
1434       - lf-infra-gerrit-scm:
1435           jenkins-ssh-credential: "{jenkins-ssh-credential}"
1436           git-url: "{git-url}"
1437           refspec: $GERRIT_REFSPEC
1438           branch: $GERRIT_BRANCH
1439           submodule-recursive: "{submodule-recursive}"
1440           submodule-timeout: "{submodule-timeout}"
1441           submodule-disable: "{submodule-disable}"
1442           choosing-strategy: default
1443
1444 - job-template:
1445     name: "{project-name}-sonar"
1446     id: github-maven-sonar
1447     <<: *lf_maven_common
1448     # yamllint disable-line rule:key-duplicates
1449     <<: *lf_maven_sonar
1450
1451     properties:
1452       - lf-infra-properties:
1453           build-days-to-keep: "{build-days-to-keep}"
1454       - github:
1455           url: "{github-url}/{github-org}/{project}"
1456
1457     scm:
1458       - lf-infra-github-scm:
1459           url: "{git-clone-url}{github-org}/{project}"
1460           refspec: "+refs/pull/*:refs/remotes/origin/pr/*"
1461           branch: "$sha1"
1462           submodule-recursive: "{submodule-recursive}"
1463           submodule-timeout: "{submodule-timeout}"
1464           submodule-disable: "{submodule-disable}"
1465           choosing-strategy: default
1466           jenkins-ssh-credential: "{jenkins-ssh-credential}"
1467
1468     triggers:
1469       - timed: "{obj:cron}"
1470       - github-pull-request:
1471           trigger-phrase: "^run-sonar$"
1472           only-trigger-phrase: true
1473           status-context: "Maven Sonar"
1474           permit-all: true
1475           github-hooks: true
1476           org-list:
1477             - "{github-org}"
1478           white-list: "{obj:github_pr_allowlist}"
1479           admin-list: "{obj:github_pr_admin_list}"
1480           white-list-target-branches:
1481             - "{branch}"
1482
1483 - job-template:
1484     name: "{project-name}-sonar-prescan-script"
1485     id: github-maven-sonar-prescan-script
1486     <<: *lf_maven_common
1487     # yamllint disable-line rule:key-duplicates
1488     <<: *lf_maven_sonar
1489     <<: *mvn_sonar_builders_prescan_script
1490
1491     properties:
1492       - lf-infra-properties:
1493           build-days-to-keep: "{build-days-to-keep}"
1494       - github:
1495           url: "{github-url}/{github-org}/{project}"
1496
1497     scm:
1498       - lf-infra-github-scm:
1499           url: "{git-clone-url}{github-org}/{project}"
1500           refspec: "+refs/pull/*:refs/remotes/origin/pr/*"
1501           branch: "$sha1"
1502           submodule-recursive: "{submodule-recursive}"
1503           submodule-timeout: "{submodule-timeout}"
1504           submodule-disable: "{submodule-disable}"
1505           choosing-strategy: default
1506           jenkins-ssh-credential: "{jenkins-ssh-credential}"
1507
1508     triggers:
1509       - timed: "{obj:cron}"
1510       - github-pull-request:
1511           trigger-phrase: "^run-sonar$"
1512           only-trigger-phrase: true
1513           status-context: "Maven Sonar"
1514           permit-all: true
1515           github-hooks: true
1516           org-list:
1517             - "{github-org}"
1518           white-list: "{obj:github_pr_allowlist}"
1519           admin-list: "{obj:github_pr_admin_list}"
1520           white-list-target-branches:
1521             - "{branch}"
1522
1523 ################
1524 # Maven Verify #
1525 ################
1526
1527 - lf_maven_verify: &lf_maven_verify
1528     name: lf-maven-verify
1529
1530     ######################
1531     # Default parameters #
1532     ######################
1533
1534     branch: master
1535     build-days-to-keep: 7
1536     build-timeout: 60
1537     disable-job: false
1538     git-url: "$GIT_URL/$PROJECT"
1539     github-url: "https://github.com"
1540     java-version: openjdk11
1541     mvn-global-settings: global-settings
1542     mvn-goals: clean deploy
1543     mvn-opts: ""
1544     mvn-params: "-Dstream=$STREAM -Dmaven.source.skip=true"
1545     mvn-version: mvn35
1546     stream: master
1547     submodule-recursive: true
1548     submodule-timeout: 10
1549     submodule-disable: false
1550
1551     gerrit_verify_triggers:
1552       - patchset-created-event:
1553           exclude-drafts: true
1554           exclude-trivial-rebase: false
1555           exclude-no-code-change: false
1556       - draft-published-event
1557       - comment-added-contains-event:
1558           comment-contains-value: '^Patch Set\s+\d+:\s+(recheck|reverify)\s*$'
1559
1560     gerrit_trigger_file_paths:
1561       - compare-type: REG_EXP
1562         pattern: ".*"
1563
1564     # github_included_regions MUST match gerrit_trigger_file_paths
1565     github_included_regions:
1566       - ".*"
1567
1568     #####################
1569     # Job Configuration #
1570     #####################
1571
1572     concurrent: true
1573     disabled: "{disable-job}"
1574
1575     builders:
1576       - lf-infra-pre-build
1577       - lf-jacoco-nojava-workaround
1578       - lf-maven-install:
1579           mvn-version: "{mvn-version}"
1580       - lf-update-java-alternatives:
1581           java-version: "{java-version}"
1582       - lf-provide-maven-settings:
1583           global-settings-file: "{mvn-global-settings}"
1584           settings-file: "{mvn-settings}"
1585       - lf-maven-build:
1586           mvn-goals: "{mvn-goals}"
1587       - lf-provide-maven-settings-cleanup
1588
1589     publishers:
1590       - findbugs
1591       - lf-jacoco-report
1592       - lf-infra-publish
1593
1594 - job-template:
1595     name: "{project-name}-maven-verify-{stream}-{mvn-version}-{java-version}"
1596     id: gerrit-maven-verify
1597     <<: *lf_maven_common
1598     # yamllint disable-line rule:key-duplicates
1599     <<: *lf_maven_verify
1600
1601     scm:
1602       - lf-infra-gerrit-scm:
1603           jenkins-ssh-credential: "{jenkins-ssh-credential}"
1604           git-url: "{git-url}"
1605           refspec: "$GERRIT_REFSPEC"
1606           branch: "$GERRIT_BRANCH"
1607           submodule-recursive: "{submodule-recursive}"
1608           submodule-timeout: "{submodule-timeout}"
1609           submodule-disable: "{submodule-disable}"
1610           choosing-strategy: gerrit
1611
1612     triggers:
1613       - gerrit:
1614           server-name: "{gerrit-server-name}"
1615           trigger-on: "{obj:gerrit_verify_triggers}"
1616           projects:
1617             - project-compare-type: ANT
1618               project-pattern: "{project}"
1619               branches:
1620                 - branch-compare-type: ANT
1621                   branch-pattern: "**/{branch}"
1622               file-paths: "{obj:gerrit_trigger_file_paths}"
1623
1624 - job-template:
1625     name: "{project-name}-maven-verify-{stream}-{mvn-version}-{java-version}"
1626     id: github-maven-verify
1627     <<: *lf_maven_common
1628     # yamllint disable-line rule:key-duplicates
1629     <<: *lf_maven_verify
1630
1631     properties:
1632       - lf-infra-properties:
1633           build-days-to-keep: "{build-days-to-keep}"
1634       - github:
1635           url: "{github-url}/{github-org}/{project}"
1636
1637     scm:
1638       - lf-infra-github-scm:
1639           url: "{git-clone-url}{github-org}/{project}"
1640           refspec: "+refs/pull/*:refs/remotes/origin/pr/*"
1641           branch: "$sha1"
1642           submodule-recursive: "{submodule-recursive}"
1643           submodule-timeout: "{submodule-timeout}"
1644           submodule-disable: "{submodule-disable}"
1645           choosing-strategy: default
1646           jenkins-ssh-credential: "{jenkins-ssh-credential}"
1647
1648     triggers:
1649       - github-pull-request:
1650           trigger-phrase: "^(recheck|reverify)$"
1651           only-trigger-phrase: false
1652           status-context: "Maven Verify {mvn-version}-{java-version}"
1653           permit-all: true
1654           github-hooks: true
1655           white-list-target-branches:
1656             - "{branch}"
1657           included-regions: "{obj:github_included_regions}"
1658
1659 ###########################
1660 # Maven Verify for Docker #
1661 ###########################
1662
1663 - lf_maven_docker_verify: &lf_maven_docker_verify
1664     name: lf-maven-docker-verify
1665
1666     # image push not allowed during verification
1667     mvn-goals: clean install
1668
1669     builders:
1670       - lf-infra-pre-build
1671       - lf-jacoco-nojava-workaround
1672       - lf-maven-install:
1673           mvn-version: "{mvn-version}"
1674       - lf-update-java-alternatives:
1675           java-version: "{java-version}"
1676       - lf-infra-docker-login:
1677           global-settings-file: "{mvn-global-settings}"
1678           settings-file: "{mvn-settings}"
1679       # must provide maven settings AFTER docker due to its cleanup
1680       - lf-provide-maven-settings:
1681           global-settings-file: "{mvn-global-settings}"
1682           settings-file: "{mvn-settings}"
1683       - inject:
1684           properties-content: |
1685             CONTAINER_PULL_REGISTRY={container-public-registry}
1686       - lf-maven-build:
1687           mvn-goals: "{mvn-goals}"
1688       - lf-provide-maven-settings-cleanup
1689
1690 - job-template:
1691     name: "{project-name}-maven-docker-verify-{stream}-{mvn-version}-{java-version}"
1692     id: gerrit-maven-docker-verify
1693     <<: *lf_maven_common
1694     # yamllint disable-line rule:key-duplicates
1695     <<: *lf_maven_verify
1696     # yamllint disable-line rule:key-duplicates
1697     <<: *lf_maven_docker_verify
1698
1699     scm:
1700       - lf-infra-gerrit-scm:
1701           jenkins-ssh-credential: "{jenkins-ssh-credential}"
1702           git-url: "{git-url}"
1703           refspec: "$GERRIT_REFSPEC"
1704           branch: "$GERRIT_BRANCH"
1705           submodule-recursive: "{submodule-recursive}"
1706           submodule-timeout: "{submodule-timeout}"
1707           submodule-disable: "{submodule-disable}"
1708           choosing-strategy: gerrit
1709
1710     triggers:
1711       - gerrit:
1712           server-name: "{gerrit-server-name}"
1713           trigger-on: "{obj:gerrit_verify_triggers}"
1714           projects:
1715             - project-compare-type: ANT
1716               project-pattern: "{project}"
1717               branches:
1718                 - branch-compare-type: ANT
1719                   branch-pattern: "**/{branch}"
1720               file-paths: "{obj:gerrit_trigger_file_paths}"
1721
1722 - job-template:
1723     name: "{project-name}-maven-docker-verify-{stream}-{mvn-version}-{java-version}"
1724     id: github-maven-docker-verify
1725     <<: *lf_maven_common
1726     # yamllint disable-line rule:key-duplicates
1727     <<: *lf_maven_verify
1728     # yamllint disable-line rule:key-duplicates
1729     <<: *lf_maven_docker_verify
1730
1731     properties:
1732       - lf-infra-properties:
1733           build-days-to-keep: "{build-days-to-keep}"
1734       - github:
1735           url: "{github-url}/{github-org}/{project}"
1736
1737     scm:
1738       - lf-infra-github-scm:
1739           url: "{git-clone-url}{github-org}/{project}"
1740           refspec: "+refs/pull/*:refs/remotes/origin/pr/*"
1741           branch: "$sha1"
1742           submodule-recursive: "{submodule-recursive}"
1743           submodule-timeout: "{submodule-timeout}"
1744           submodule-disable: "{submodule-disable}"
1745           choosing-strategy: default
1746           jenkins-ssh-credential: "{jenkins-ssh-credential}"
1747
1748     triggers:
1749       - github-pull-request:
1750           trigger-phrase: "^(recheck|reverify)$"
1751           only-trigger-phrase: false
1752           status-context: "Maven Docker Verify {mvn-version}-{java-version}"
1753           permit-all: true
1754           github-hooks: true
1755           white-list-target-branches:
1756             - "{branch}"
1757           included-regions: "{obj:github_included_regions}"
1758
1759 #############################
1760 # Maven Verify Dependencies #
1761 #############################
1762
1763 - lf_maven_verify_dependencies: &lf_maven_verify_dependencies
1764     name: lf-maven-verify-dependencies
1765
1766     ######################
1767     # Default parameters #
1768     ######################
1769
1770     branch: master
1771     build-days-to-keep: 7
1772     build-timeout: 60
1773     disable-job: false
1774     git-url: "$GIT_URL/$PROJECT"
1775     github-url: "https://github.com"
1776     java-version: openjdk11
1777     mvn-global-settings: global-settings
1778     mvn-goals: clean deploy
1779     mvn-opts: ""
1780     mvn-params: "-Dstream=$STREAM"
1781     mvn-version: mvn35
1782     stream: master
1783     submodule-recursive: true
1784     submodule-timeout: 10
1785     submodule-disable: false
1786
1787     gerrit_verify_triggers:
1788       - comment-added-contains-event:
1789           comment-contains-value: "recheck: [0-9 ]+"
1790     gerrit_trigger_file_paths:
1791       - compare-type: ANT
1792         pattern: "**"
1793
1794     #####################
1795     # Job Configuration #
1796     #####################
1797
1798     concurrent: true
1799     disabled: "{disable-job}"
1800
1801     builders:
1802       - lf-infra-pre-build
1803       - lf-jacoco-nojava-workaround
1804       - lf-maven-install:
1805           mvn-version: "{mvn-version}"
1806       - lf-update-java-alternatives:
1807           java-version: "{java-version}"
1808       - lf-provide-maven-settings:
1809           global-settings-file: "{mvn-global-settings}"
1810           settings-file: "{mvn-settings}"
1811       - lf-fetch-dependent-patches
1812       - shell: !include-raw-escape:
1813           - ../shell/common-variables.sh
1814           - ../shell/maven-build-deps.sh
1815       - lf-maven-build:
1816           mvn-goals: "{mvn-goals}"
1817       - lf-provide-maven-settings-cleanup
1818
1819     publishers:
1820       - findbugs
1821       - lf-jacoco-report
1822       - lf-infra-publish
1823
1824 - job-template:
1825     name: "{project-name}-maven-verify-deps-{stream}-{mvn-version}-{java-version}"
1826     id: gerrit-maven-verify-dependencies
1827     <<: *lf_maven_common
1828     # yamllint disable-line rule:key-duplicates
1829     <<: *lf_maven_verify_dependencies
1830
1831     scm:
1832       - lf-infra-gerrit-scm:
1833           jenkins-ssh-credential: "{jenkins-ssh-credential}"
1834           git-url: "{git-url}"
1835           refspec: "$GERRIT_REFSPEC"
1836           branch: "$GERRIT_BRANCH"
1837           submodule-recursive: "{submodule-recursive}"
1838           submodule-timeout: "{submodule-timeout}"
1839           submodule-disable: "{submodule-disable}"
1840           choosing-strategy: gerrit
1841
1842     triggers:
1843       - gerrit:
1844           server-name: "{gerrit-server-name}"
1845           trigger-on: "{obj:gerrit_verify_triggers}"
1846           projects:
1847             - project-compare-type: ANT
1848               project-pattern: "{project}"
1849               branches:
1850                 - branch-compare-type: ANT
1851                   branch-pattern: "**/{branch}"
1852               file-paths: "{obj:gerrit_trigger_file_paths}"
1853           comment-text-parameter-mode: PLAIN