61743770448ed19f6f9958642b19dd7301025a1b
[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-escape:
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 Snyk CLI #
298 ##################
299
300 - _lf_maven_snyk_cli: &lf_maven_snyk_cli
301     name: lf-maven-snyk_cli
302
303     ######################
304     # Default parameters #
305     ######################
306
307     branch: master
308     build-days-to-keep: 30 # 30 days for troubleshooting purposes
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-global-settings: global-settings
315     mvn-goals: clean install
316     mvn-opts: ""
317     mvn-params: ""
318     mvn-version: mvn35
319     snyk-cli-options: ""
320     snyk-token-credential-id: snyk-token
321     snyk-org-credential-id: snyk-org
322     stream: master
323     submodule-recursive: true
324     submodule-timeout: 10
325     submodule-disable: false
326
327     gerrit_snyk_triggers:
328       - comment-added-contains-event:
329           comment-contains-value: '^Patch Set\s+\d+:\s+run-snyk\s*$'
330
331     parameters:
332       - lf-infra-parameters:
333           project: "{project}"
334           branch: "{branch}"
335           stream: "{stream}"
336       - lf-infra-maven-parameters:
337           mvn-opts: "{mvn-opts}"
338           mvn-params: "{mvn-params}"
339           mvn-version: "{mvn-version}"
340       - string:
341           name: SNYK_CLI_OPTIONS
342           default: "{snyk-cli-options}"
343           description: Additional Snyk CLI commands and options
344       - string:
345           name: ARCHIVE_ARTIFACTS
346           default: "{archive-artifacts}"
347           description: Artifacts to archive to the logs server.
348
349     wrappers:
350       - credentials-binding:
351           - text:
352               credential-id: "{snyk-token-credential-id}"
353               variable: SNYK_TOKEN
354           - text:
355               credential-id: "{snyk-org-credential-id}"
356               variable: SNYK_ORG
357
358     #####################
359     # Job Configuration #
360     #####################
361
362     disabled: "{disable-job}"
363
364     builders:
365       - lf-infra-pre-build
366       - lf-maven-install:
367           mvn-version: "{mvn-version}"
368       - lf-update-java-alternatives:
369           java-version: "{java-version}"
370       - lf-provide-maven-settings:
371           global-settings-file: "{mvn-global-settings}"
372           settings-file: "{mvn-settings}"
373       - lf-maven-build:
374           mvn-goals: "{mvn-goals}"
375       - lf-infra-snyk-cli-scanner
376       - lf-provide-maven-settings-cleanup
377       - shell: 'find . -regex ".*karaf/target" | xargs rm -rf'
378
379 - builder:
380     name: lf-infra-snyk-cli-scanner
381     # Download and run the Snyk CLI scanner
382     builders:
383       - shell: !include-raw-escape:
384           - ../shell/snyk-cli-scanner-run.sh
385
386 - job-template:
387     name: "{project-name}-maven-snyk-cli-{stream}"
388     id: gerrit-maven-snyk-cli
389     <<: *lf_maven_common
390     # yamllint disable-line rule:key-duplicates
391     <<: *lf_maven_snyk_cli
392
393     scm:
394       - lf-infra-gerrit-scm:
395           jenkins-ssh-credential: "{jenkins-ssh-credential}"
396           git-url: "{git-url}"
397           refspec: "$GERRIT_REFSPEC"
398           branch: "$GERRIT_BRANCH"
399           submodule-recursive: "{submodule-recursive}"
400           submodule-timeout: "{submodule-timeout}"
401           submodule-disable: "{submodule-disable}"
402           choosing-strategy: default
403
404     triggers:
405       # Build weekly on Saturdays
406       - timed: "H H * * 6"
407       - gerrit:
408           server-name: "{gerrit-server-name}"
409           trigger-on: "{obj:gerrit_snyk_triggers}"
410           projects:
411             - project-compare-type: ANT
412               project-pattern: "{project}"
413               branches:
414                 - branch-compare-type: ANT
415                   branch-pattern: "**/{branch}"
416           skip-vote:
417             successful: true
418             failed: true
419             unstable: true
420             notbuilt: true
421
422 - job-template:
423     name: "{project-name}-maven-snyk-cli-{stream}"
424     id: github-maven-snyk-cli
425     <<: *lf_maven_common
426     # yamllint disable-line rule:key-duplicates
427     <<: *lf_maven_snyk_cli
428
429     properties:
430       - lf-infra-properties:
431           build-days-to-keep: "{build-days-to-keep}"
432       - github:
433           url: "{github-url}/{github-org}/{project}"
434
435     scm:
436       - lf-infra-github-scm:
437           url: "{git-clone-url}{github-org}/{project}"
438           refspec: ""
439           branch: "refs/heads/{branch}"
440           submodule-recursive: "{submodule-recursive}"
441           submodule-timeout: "{submodule-timeout}"
442           submodule-disable: "{submodule-disable}"
443           choosing-strategy: default
444           jenkins-ssh-credential: "{jenkins-ssh-credential}"
445
446     triggers:
447       # Build weekly on Saturdays
448       - timed: "H H * * 6"
449       - github-pull-request:
450           trigger-phrase: "^run-snyk$"
451           only-trigger-phrase: true
452           status-context: "SNYK scan"
453           permit-all: true
454           github-hooks: true
455           org-list:
456             - "{github-org}"
457           white-list: "{obj:github_pr_allowlist}"
458           admin-list: "{obj:github_pr_admin_list}"
459           white-list-target-branches:
460             - "{branch}"
461
462 #########################
463 # Maven Javadoc Publish #
464 #########################
465
466 - _lf_maven_javadoc_publish: &lf_maven_javadoc_publish
467     name: lf-maven-javadoc-publish
468
469     ######################
470     # Default parameters #
471     ######################
472
473     branch: master
474     build-days-to-keep: 30 # 30 days in case a release takes long to get approved.
475     build-timeout: 60
476     disable-job: false
477     git-url: "$GIT_URL/$PROJECT"
478     github-url: "https://github.com"
479     java-version: openjdk11
480     mvn-dir: "."
481     mvn-global-settings: global-settings
482     mvn-opts: ""
483     mvn-params: ""
484     mvn-version: mvn35
485     stream: master
486     submodule-recursive: true
487     submodule-timeout: 10
488     submodule-disable: false
489
490     gerrit_merge_triggers:
491       - change-merged-event
492       - comment-added-contains-event:
493           comment-contains-value: '^Patch Set\s+\d+:\s+remerge\s*$'
494
495     #####################
496     # Job Configuration #
497     #####################
498
499     disabled: "{disable-job}"
500
501     builders:
502       - lf-infra-pre-build
503       - lf-maven-install:
504           mvn-version: "{mvn-version}"
505       - lf-update-java-alternatives:
506           java-version: "{java-version}"
507       - lf-provide-maven-settings:
508           global-settings-file: "{mvn-global-settings}"
509           settings-file: "{mvn-settings}"
510       - lf-infra-create-netrc:
511           server-id: "{mvn-site-id}"
512       - inject:
513           properties-content: |
514             DEPLOY_PATH={javadoc-path}
515             MAVEN_DIR={mvn-dir}
516       - shell: !include-raw-escape:
517           - ../shell/common-variables.sh
518           - ../shell/maven-javadoc-generate.sh
519           - ../shell/maven-javadoc-publish.sh
520       - lf-provide-maven-settings-cleanup
521
522 - job-template:
523     name: "{project-name}-maven-javadoc-publish-{stream}-{java-version}"
524     id: gerrit-maven-javadoc-publish
525     <<: *lf_maven_common
526     # yamllint disable-line rule:key-duplicates
527     <<: *lf_maven_javadoc_publish
528
529     git-url: "$GIT_URL/$GERRIT_PROJECT"
530
531     scm:
532       - lf-infra-gerrit-scm:
533           git-url: "{git-url}"
534           refspec: ""
535           branch: "{branch}"
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       - gerrit:
544           server-name: "{gerrit-server-name}"
545           trigger-on: "{obj:gerrit_merge_triggers}"
546           projects:
547             - project-compare-type: ANT
548               project-pattern: "{project}"
549               branches:
550                 - branch-compare-type: ANT
551                   branch-pattern: "**/{branch}"
552
553 - job-template:
554     name: "{project-name}-maven-javadoc-publish-{stream}-{java-version}"
555     id: github-maven-javadoc-publish
556     <<: *lf_maven_common
557     # yamllint disable-line rule:key-duplicates
558     <<: *lf_maven_javadoc_publish
559
560     properties:
561       - lf-infra-properties:
562           build-days-to-keep: "{build-days-to-keep}"
563       - github:
564           url: "{github-url}/{github-org}/{project}"
565
566     scm:
567       - lf-infra-github-scm:
568           url: "{git-clone-url}{github-org}/{project}"
569           refspec: ""
570           branch: "{branch}"
571           submodule-recursive: "{submodule-recursive}"
572           submodule-timeout: "{submodule-timeout}"
573           submodule-disable: "{submodule-disable}"
574           choosing-strategy: default
575           jenkins-ssh-credential: "{jenkins-ssh-credential}"
576
577     triggers:
578       - github
579       - pollscm:
580           cron: ""
581       - github-pull-request:
582           trigger-phrase: "^remerge$"
583           only-trigger-phrase: true
584           status-context: "Maven Javadoc Publish"
585           permit-all: true
586           github-hooks: true
587           org-list:
588             - "{github-org}"
589           white-list: "{obj:github_pr_allowlist}"
590           admin-list: "{obj:github_pr_admin_list}"
591           white-list-target-branches:
592             - "{branch}"
593
594 ########################
595 # Maven Javadoc Verify #
596 ########################
597
598 - _lf_maven_javadoc_verify: &lf_maven_javadoc_verify
599     name: lf-maven-javadoc-verify
600
601     ######################
602     # Default parameters #
603     ######################
604
605     branch: master
606     build-days-to-keep: 30 # 30 days in case a release takes long to get approved.
607     build-timeout: 60
608     disable-job: false
609     git-url: "$GIT_URL/$PROJECT"
610     github-url: "https://github.com"
611     java-version: openjdk11
612     mvn-dir: "."
613     mvn-global-settings: global-settings
614     mvn-opts: ""
615     mvn-params: ""
616     mvn-version: mvn35
617     stream: master
618     submodule-recursive: true
619     submodule-timeout: 10
620     submodule-disable: false
621
622     gerrit_verify_triggers:
623       - patchset-created-event:
624           exclude-drafts: true
625           exclude-trivial-rebase: false
626           exclude-no-code-change: false
627       - draft-published-event
628       - comment-added-contains-event:
629           comment-contains-value: '^Patch Set\s+\d+:\s+(recheck|reverify)\s*$'
630
631     #####################
632     # Job Configuration #
633     #####################
634
635     concurrent: true
636     disabled: "{disable-job}"
637
638     builders:
639       - lf-infra-pre-build
640       - lf-maven-install:
641           mvn-version: "{mvn-version}"
642       - lf-update-java-alternatives:
643           java-version: "{java-version}"
644       - lf-provide-maven-settings:
645           global-settings-file: "{mvn-global-settings}"
646           settings-file: "{mvn-settings}"
647       - inject:
648           properties-content: |
649             MAVEN_DIR={mvn-dir}
650       - shell: !include-raw-escape:
651           - ../shell/common-variables.sh
652           - ../shell/maven-javadoc-generate.sh
653       - lf-provide-maven-settings-cleanup
654
655 - job-template:
656     name: "{project-name}-maven-javadoc-verify-{stream}-{java-version}"
657     id: gerrit-maven-javadoc-verify
658     <<: *lf_maven_common
659     # yamllint disable-line rule:key-duplicates
660     <<: *lf_maven_javadoc_verify
661
662     scm:
663       - lf-infra-gerrit-scm:
664           jenkins-ssh-credential: "{jenkins-ssh-credential}"
665           git-url: "{git-url}"
666           refspec: "$GERRIT_REFSPEC"
667           branch: "$GERRIT_BRANCH"
668           submodule-recursive: "{submodule-recursive}"
669           submodule-timeout: "{submodule-timeout}"
670           submodule-disable: "{submodule-disable}"
671           choosing-strategy: gerrit
672
673     triggers:
674       - gerrit:
675           server-name: "{gerrit-server-name}"
676           trigger-on: "{obj:gerrit_verify_triggers}"
677           projects:
678             - project-compare-type: ANT
679               project-pattern: "{project}"
680               branches:
681                 - branch-compare-type: ANT
682                   branch-pattern: "**/{branch}"
683
684 - job-template:
685     name: "{project-name}-maven-javadoc-verify-{stream}-{java-version}"
686     id: github-maven-javadoc-verify
687     <<: *lf_maven_common
688     # yamllint disable-line rule:key-duplicates
689     <<: *lf_maven_javadoc_verify
690
691     properties:
692       - lf-infra-properties:
693           build-days-to-keep: "{build-days-to-keep}"
694       - github:
695           url: "{github-url}/{github-org}/{project}"
696
697     scm:
698       - lf-infra-github-scm:
699           url: "{git-clone-url}{github-org}/{project}"
700           refspec: "+refs/pull/*:refs/remotes/origin/pr/*"
701           branch: "$sha1"
702           submodule-recursive: "{submodule-recursive}"
703           submodule-timeout: "{submodule-timeout}"
704           submodule-disable: "{submodule-disable}"
705           choosing-strategy: default
706           jenkins-ssh-credential: "{jenkins-ssh-credential}"
707
708     triggers:
709       - github-pull-request:
710           trigger-phrase: ^(recheck|reverify)$
711           only-trigger-phrase: false
712           status-context: "Maven Javadoc Verify"
713           permit-all: true
714           github-hooks: true
715           white-list-target-branches:
716             - "{branch}"
717
718 ###############
719 # Maven Merge #
720 ###############
721
722 - _lf_maven_merge: &lf_maven_merge
723     name: lf-maven-merge
724
725     ######################
726     # Default parameters #
727     ######################
728
729     branch: master
730     build-days-to-keep: 30 # 30 days in case we need to troubleshoot
731     build-timeout: 60
732     cron: "@daily"
733     disable-job: false
734     git-url: "$GIT_URL/$PROJECT"
735     github-url: "https://github.com"
736     jacoco-exclude-pattern: >-
737       **/gen/**,
738       **/generated-sources/**,
739       **/yang-gen**,
740       **/pax/**,
741     java-version: openjdk11
742     mvn-global-settings: global-settings
743     mvn-goals: clean deploy
744     mvn-opts: ""
745     mvn-params: "-Dmerge"
746     mvn-version: mvn35
747     nexus-cut-dirs: 6 # Number of dirs in the Nexus path to remove for wget -r.
748     pre-build-script: "# pre-build script goes here"
749     post-build-script: "# post-build script goes here"
750     stream: master
751     submodule-recursive: true
752     submodule-timeout: 10
753     submodule-disable: false
754
755     gerrit_merge_triggers:
756       - change-merged-event
757       - comment-added-contains-event:
758           comment-contains-value: '^Patch Set\s+\d+:\s+remerge\s*$'
759
760     gerrit_trigger_file_paths:
761       - compare-type: REG_EXP
762         pattern: ".*"
763
764     # github_included_regions MUST match gerrit_trigger_file_paths
765     github_included_regions:
766       - ".*"
767
768     post_build_trigger: ""
769
770     #####################
771     # Job Configuration #
772     #####################
773
774     disabled: "{disable-job}"
775
776     builders:
777       - lf-infra-pre-build
778       - lf-jacoco-nojava-workaround
779       - lf-maven-install:
780           mvn-version: "{mvn-version}"
781       - lf-update-java-alternatives:
782           java-version: "{java-version}"
783       - lf-provide-maven-settings:
784           global-settings-file: "{mvn-global-settings}"
785           settings-file: "{mvn-settings}"
786       - lf-infra-create-netrc:
787           server-id: "{mvn-snapshot-id}"
788       - inject:
789           properties-content: |
790             NEXUS_CUT_DIRS={nexus-cut-dirs}
791             NEXUS_REPO={nexus-snapshot-repo}
792       - shell: !include-raw-escape: ../shell/maven-fetch-metadata.sh
793       - shell: "{pre-build-script}"
794       - lf-maven-build:
795           mvn-goals: "{mvn-goals}"
796       - shell: "{post-build-script}"
797       - lf-maven-deploy
798       - lf-provide-maven-settings-cleanup
799
800     publishers:
801       - findbugs
802       - lf-jacoco-report:
803           exclude-pattern: "{jacoco-exclude-pattern}"
804       - lf-infra-publish
805       - trigger-parameterized-builds: "{obj:post_build_trigger}"
806
807 - job-template:
808     name: "{project-name}-maven-merge-{stream}"
809     id: gerrit-maven-merge
810     <<: *lf_maven_common
811     # yamllint disable-line rule:key-duplicates
812     <<: *lf_maven_merge
813
814     scm:
815       - lf-infra-gerrit-scm:
816           jenkins-ssh-credential: "{jenkins-ssh-credential}"
817           git-url: "{git-url}"
818           refspec: "$GERRIT_REFSPEC"
819           branch: "$GERRIT_BRANCH"
820           submodule-recursive: "{submodule-recursive}"
821           submodule-timeout: "{submodule-timeout}"
822           submodule-disable: "{submodule-disable}"
823           choosing-strategy: default
824
825     triggers:
826       - timed: "{obj:cron}"
827       - gerrit:
828           server-name: "{gerrit-server-name}"
829           trigger-on: "{obj:gerrit_merge_triggers}"
830           projects:
831             - project-compare-type: ANT
832               project-pattern: "{project}"
833               branches:
834                 - branch-compare-type: ANT
835                   branch-pattern: "**/{branch}"
836               file-paths: "{obj:gerrit_trigger_file_paths}"
837
838 - job-template:
839     name: "{project-name}-maven-merge-{stream}"
840     id: github-maven-merge
841     <<: *lf_maven_common
842     # yamllint disable-line rule:key-duplicates
843     <<: *lf_maven_merge
844
845     properties:
846       - lf-infra-properties:
847           build-days-to-keep: "{build-days-to-keep}"
848       - github:
849           url: "{github-url}/{github-org}/{project}"
850
851     scm:
852       - lf-infra-github-scm:
853           url: "{git-clone-url}{github-org}/{project}"
854           refspec: ""
855           branch: "refs/heads/{branch}"
856           submodule-recursive: "{submodule-recursive}"
857           submodule-timeout: "{submodule-timeout}"
858           submodule-disable: "{submodule-disable}"
859           choosing-strategy: default
860           jenkins-ssh-credential: "{jenkins-ssh-credential}"
861
862     triggers:
863       - timed: "{obj:cron}"
864       - github
865       - pollscm:
866           cron: ""
867       - github-pull-request:
868           trigger-phrase: "^remerge$"
869           only-trigger-phrase: true
870           status-context: "Maven Merge"
871           permit-all: true
872           github-hooks: true
873           org-list:
874             - "{github-org}"
875           white-list: "{obj:github_pr_allowlist}"
876           admin-list: "{obj:github_pr_admin_list}"
877           white-list-target-branches:
878             - "{branch}"
879           included-regions: "{obj:github_included_regions}"
880
881 ##########################
882 # Maven Merge for Docker #
883 ##########################
884
885 - _lf_maven_docker_merge: &lf_maven_docker_merge
886     name: lf-maven-docker-merge
887
888     builders:
889       - lf-infra-pre-build
890       - lf-jacoco-nojava-workaround
891       - lf-maven-install:
892           mvn-version: "{mvn-version}"
893       - lf-infra-docker-login:
894           global-settings-file: "{mvn-global-settings}"
895           settings-file: "{mvn-settings}"
896       - lf-update-java-alternatives:
897           java-version: "{java-version}"
898       # must provide maven settings AFTER docker due to its cleanup
899       - lf-provide-maven-settings:
900           global-settings-file: "{mvn-global-settings}"
901           settings-file: "{mvn-settings}"
902       - lf-infra-create-netrc:
903           server-id: "{mvn-snapshot-id}"
904       - inject:
905           properties-content: |
906             NEXUS_CUT_DIRS={nexus-cut-dirs}
907             NEXUS_REPO={nexus-snapshot-repo}
908             CONTAINER_PULL_REGISTRY={container-public-registry}
909             CONTAINER_PUSH_REGISTRY={container-snapshot-registry}
910       - shell: !include-raw-escape: ../shell/maven-fetch-metadata.sh
911       - lf-maven-build:
912           mvn-goals: "{mvn-goals}"
913       # NO lf-maven-deploy
914       - lf-provide-maven-settings-cleanup
915
916 - job-template:
917     name: "{project-name}-maven-docker-merge-{stream}"
918     id: gerrit-maven-docker-merge
919     <<: *lf_maven_common
920     # yamllint disable-line rule:key-duplicates
921     <<: *lf_maven_merge
922     # yamllint disable-line rule:key-duplicates
923     <<: *lf_maven_docker_merge
924
925     scm:
926       - lf-infra-gerrit-scm:
927           jenkins-ssh-credential: "{jenkins-ssh-credential}"
928           git-url: "{git-url}"
929           refspec: "$GERRIT_REFSPEC"
930           branch: "$GERRIT_BRANCH"
931           submodule-recursive: "{submodule-recursive}"
932           submodule-timeout: "{submodule-timeout}"
933           submodule-disable: "{submodule-disable}"
934           choosing-strategy: default
935
936     triggers:
937       - gerrit:
938           server-name: "{gerrit-server-name}"
939           trigger-on: "{obj:gerrit_merge_triggers}"
940           projects:
941             - project-compare-type: ANT
942               project-pattern: "{project}"
943               branches:
944                 - branch-compare-type: ANT
945                   branch-pattern: "**/{branch}"
946               file-paths: "{obj:gerrit_trigger_file_paths}"
947
948 - job-template:
949     name: "{project-name}-maven-docker-merge-{stream}"
950     id: github-maven-docker-merge
951     <<: *lf_maven_common
952     # yamllint disable-line rule:key-duplicates
953     <<: *lf_maven_merge
954     # yamllint disable-line rule:key-duplicates
955     <<: *lf_maven_docker_merge
956
957     properties:
958       - lf-infra-properties:
959           build-days-to-keep: "{build-days-to-keep}"
960       - github:
961           url: "{github-url}/{github-org}/{project}"
962
963     scm:
964       - lf-infra-github-scm:
965           url: "{git-clone-url}{github-org}/{project}"
966           refspec: ""
967           branch: "refs/heads/{branch}"
968           submodule-recursive: "{submodule-recursive}"
969           submodule-timeout: "{submodule-timeout}"
970           submodule-disable: "{submodule-disable}"
971           choosing-strategy: default
972           jenkins-ssh-credential: "{jenkins-ssh-credential}"
973
974     triggers:
975       - github
976       - pollscm:
977           cron: ""
978       - github-pull-request:
979           trigger-phrase: "^remerge$"
980           only-trigger-phrase: true
981           status-context: "Maven Docker Merge"
982           permit-all: true
983           github-hooks: true
984           org-list:
985             - "{github-org}"
986           white-list: "{obj:github_pr_allowlist}"
987           admin-list: "{obj:github_pr_admin_list}"
988           white-list-target-branches:
989             - "{branch}"
990           included-regions: "{obj:github_included_regions}"
991
992 ###############
993 # Maven Stage #
994 ###############
995
996 - _lf_maven_stage: &lf_maven_stage
997     name: lf-maven-stage
998
999     ######################
1000     # Default parameters #
1001     ######################
1002
1003     branch: master
1004     build-days-to-keep: 30 # 30 days in case a release takes long to get approved.
1005     build-timeout: 60
1006     cron: ""
1007     disable-job: false
1008     git-url: "$GIT_URL/$PROJECT"
1009     github-url: "https://github.com"
1010     java-version: openjdk11
1011     maven-versions-plugin: false
1012     version-properties-file: version.properties
1013     mvn-central: false
1014     mvn-global-settings: global-settings
1015     mvn-goals: clean deploy
1016     mvn-opts: ""
1017     mvn-params: ""
1018     mvn-version: mvn35
1019     ossrh-profile-id: ""
1020     mvn-pom: ""
1021     sbom-flags: ""
1022     sbom-path: "$WORKSPACE"
1023     sbom-generator: false
1024     sbom-generator-version: "v0.0.15"
1025     sign-artifacts: false
1026     sign-mode: serial
1027     stream: master
1028     submodule-recursive: true
1029     submodule-timeout: 10
1030     submodule-disable: false
1031
1032     gerrit_release_triggers:
1033       - comment-added-contains-event:
1034           comment-contains-value: '^Patch Set\s+\d+:\s+stage-(maven-)?release\s*$'
1035
1036     gerrit_trigger_file_paths:
1037       - compare-type: ANT
1038         pattern: "**"
1039
1040     # github_included_regions MUST match gerrit_trigger_file_paths
1041     github_included_regions:
1042       - ".*"
1043
1044     #####################
1045     # Job Configuration #
1046     #####################
1047
1048     disabled: "{disable-job}"
1049
1050     parameters:
1051       - lf-infra-parameters:
1052           project: "{project}"
1053           branch: "{branch}"
1054           stream: "{stream}"
1055       - lf-infra-maven-parameters:
1056           mvn-opts: "{mvn-opts}"
1057           mvn-params: "{mvn-params}"
1058           mvn-version: "{mvn-version}"
1059           staging-profile-id: "{staging-profile-id}"
1060       - bool:
1061           name: MAVEN_VERSIONS_PLUGIN
1062           default: "{maven-versions-plugin}"
1063           description: Use maven-versions-plugin to update pom versions.
1064       - string:
1065           name: ARCHIVE_ARTIFACTS
1066           default: "{archive-artifacts}"
1067           description: Artifacts to archive to the logs server.
1068       - string:
1069           name: STAGING_PROFILE_ID
1070           default: "{staging-profile-id}"
1071           description: Nexus staging profile ID.
1072       - string:
1073           name: SBOM_GENERATOR_VERSION
1074           default: "{sbom-generator-version}"
1075           description: SBOM generator version to download and run.
1076       - string:
1077           name: SBOM_PATH
1078           default: "{sbom-path}"
1079           description: path where SBOM needs to be executed.
1080
1081     builders:
1082       - lf-infra-pre-build
1083       - lf-jacoco-nojava-workaround
1084       - lf-maven-install:
1085           mvn-version: "{mvn-version}"
1086       - lf-update-java-alternatives:
1087           java-version: "{java-version}"
1088       - lf-provide-maven-settings:
1089           global-settings-file: "{mvn-global-settings}"
1090           settings-file: "{mvn-settings}"
1091       - lf-maven-versions-plugin:
1092           maven-versions-plugin: "{maven-versions-plugin}"
1093           version-properties-file: "{version-properties-file}"
1094           mvn-version: "{mvn-version}"
1095           mvn-pom: "{mvn-pom}"
1096           mvn-settings: "{mvn-settings}"
1097       - shell: !include-raw-escape: ../shell/maven-patch-release.sh
1098       - lf-maven-build:
1099           mvn-goals: "{mvn-goals}"
1100       # With SBOM Generator
1101       - conditional-step:
1102           condition-kind: boolean-expression
1103           condition-expression: "{sbom-generator}"
1104           steps:
1105             - shell: echo 'Running SBOM Generator'
1106             - lf-infra-maven-sbom-generator:
1107                 sbom-flags: "{sbom-flags}"
1108       - lf-sigul-sign-dir:
1109           sign-artifacts: "{sign-artifacts}"
1110           sign-dir: "$WORKSPACE/m2repo"
1111           sign-mode: "{sign-mode}"
1112       - lf-maven-stage:
1113           mvn-global-settings: "{mvn-global-settings}"
1114           mvn-settings: "{mvn-settings}"
1115           mvn-staging-id: "{mvn-staging-id}"
1116       - lf-maven-central:
1117           mvn-central: "{mvn-central}"
1118           mvn-global-settings: "{mvn-global-settings}"
1119           mvn-settings: "{mvn-settings}"
1120           ossrh-profile-id: "{ossrh-profile-id}"
1121       - lf-provide-maven-settings-cleanup
1122
1123 - job-template:
1124     name: "{project-name}-maven-stage-{stream}"
1125     id: gerrit-maven-stage
1126     <<: *lf_maven_common
1127     # yamllint disable-line rule:key-duplicates
1128     <<: *lf_maven_stage
1129
1130     scm:
1131       - lf-infra-gerrit-scm:
1132           jenkins-ssh-credential: "{jenkins-ssh-credential}"
1133           git-url: "{git-url}"
1134           refspec: "$GERRIT_REFSPEC"
1135           branch: "$GERRIT_BRANCH"
1136           submodule-recursive: "{submodule-recursive}"
1137           submodule-timeout: "{submodule-timeout}"
1138           submodule-disable: "{submodule-disable}"
1139           choosing-strategy: default
1140
1141     triggers:
1142       - timed: "{obj:cron}"
1143       - gerrit:
1144           server-name: "{gerrit-server-name}"
1145           trigger-on: "{obj:gerrit_release_triggers}"
1146           projects:
1147             - project-compare-type: ANT
1148               project-pattern: "{project}"
1149               branches:
1150                 - branch-compare-type: ANT
1151                   branch-pattern: "**/{branch}"
1152               file-paths: "{obj:gerrit_trigger_file_paths}"
1153
1154 - job-template:
1155     name: "{project-name}-maven-stage-{stream}"
1156     id: github-maven-stage
1157     <<: *lf_maven_common
1158     # yamllint disable-line rule:key-duplicates
1159     <<: *lf_maven_stage
1160
1161     properties:
1162       - lf-infra-properties:
1163           build-days-to-keep: "{build-days-to-keep}"
1164       - github:
1165           url: "{github-url}/{github-org}/{project}"
1166
1167     scm:
1168       - lf-infra-github-scm:
1169           url: "{git-clone-url}{github-org}/{project}"
1170           refspec: "+refs/pull/*:refs/remotes/origin/pr/*"
1171           branch: "{branch}"
1172           submodule-recursive: "{submodule-recursive}"
1173           submodule-timeout: "{submodule-timeout}"
1174           submodule-disable: "{submodule-disable}"
1175           choosing-strategy: default
1176           jenkins-ssh-credential: "{jenkins-ssh-credential}"
1177
1178     triggers:
1179       - timed: "{obj:cron}"
1180       - github-pull-request:
1181           trigger-phrase: "^stage-(maven-)?release$"
1182           only-trigger-phrase: true
1183           status-context: "Maven Release"
1184           permit-all: true
1185           github-hooks: true
1186           white-list-target-branches:
1187             - "{branch}"
1188           included-regions: "{obj:github_included_regions}"
1189
1190 ##########################
1191 # Maven Stage for Docker #
1192 ##########################
1193
1194 - _lf_maven_docker_stage: &lf_maven_docker_stage
1195     name: lf-maven-docker-stage
1196
1197     builders:
1198       - lf-infra-pre-build
1199       - lf-jacoco-nojava-workaround
1200       - lf-maven-install:
1201           mvn-version: "{mvn-version}"
1202       - lf-update-java-alternatives:
1203           java-version: "{java-version}"
1204       - lf-infra-docker-login:
1205           global-settings-file: "{mvn-global-settings}"
1206           settings-file: "{mvn-settings}"
1207       # must provide maven settings AFTER docker-login due to its cleanup
1208       - lf-provide-maven-settings:
1209           global-settings-file: "{mvn-global-settings}"
1210           settings-file: "{mvn-settings}"
1211       - lf-maven-versions-plugin:
1212           maven-versions-plugin: "{maven-versions-plugin}"
1213           version-properties-file: "{version-properties-file}"
1214           mvn-version: "{mvn-version}"
1215           mvn-pom: "{mvn-pom}"
1216           mvn-settings: "{mvn-settings}"
1217       - shell: !include-raw-escape: ../shell/maven-patch-release.sh
1218       - inject:
1219           properties-content: |
1220             CONTAINER_PULL_REGISTRY={container-public-registry}
1221             CONTAINER_PUSH_REGISTRY={container-staging-registry}
1222       - lf-maven-build:
1223           mvn-goals: "{mvn-goals}"
1224       # With SBOM Generator
1225       - conditional-step:
1226           condition-kind: boolean-expression
1227           condition-expression: "{sbom-generator}"
1228           steps:
1229             - shell: echo 'Running SBOM Generator'
1230             - lf-infra-maven-sbom-generator:
1231                 sbom-flags: "{sbom-flags}"
1232       - lf-sigul-sign-dir:
1233           sign-artifacts: "{sign-artifacts}"
1234           sign-dir: "$WORKSPACE/m2repo"
1235           sign-mode: "{sign-mode}"
1236       # NO lf-maven-stage
1237       # NO lf-maven-central
1238       - lf-provide-maven-settings-cleanup
1239
1240     gerrit_release_docker_triggers:
1241       - comment-added-contains-event:
1242           comment-contains-value: '^Patch Set\s+\d+:\s+stage-(docker-)?release\s*$'
1243
1244 - job-template:
1245     name: "{project-name}-maven-docker-stage-{stream}"
1246     id: gerrit-maven-docker-stage
1247     <<: *lf_maven_common
1248     # yamllint disable-line rule:key-duplicates
1249     <<: *lf_maven_stage
1250     # yamllint disable-line rule:key-duplicates
1251     <<: *lf_maven_docker_stage
1252
1253     scm:
1254       - lf-infra-gerrit-scm:
1255           jenkins-ssh-credential: "{jenkins-ssh-credential}"
1256           git-url: "{git-url}"
1257           refspec: "$GERRIT_REFSPEC"
1258           branch: "$GERRIT_BRANCH"
1259           submodule-recursive: "{submodule-recursive}"
1260           submodule-timeout: "{submodule-timeout}"
1261           submodule-disable: "{submodule-disable}"
1262           choosing-strategy: default
1263
1264     triggers:
1265       - timed: "{obj:cron}"
1266       - gerrit:
1267           server-name: "{gerrit-server-name}"
1268           trigger-on: "{obj:gerrit_release_docker_triggers}"
1269           projects:
1270             - project-compare-type: ANT
1271               project-pattern: "{project}"
1272               branches:
1273                 - branch-compare-type: ANT
1274                   branch-pattern: "**/{branch}"
1275               file-paths: "{obj:gerrit_trigger_file_paths}"
1276
1277 - job-template:
1278     name: "{project-name}-maven-docker-stage-{stream}"
1279     id: github-maven-docker-stage
1280     <<: *lf_maven_common
1281     # yamllint disable-line rule:key-duplicates
1282     <<: *lf_maven_stage
1283     # yamllint disable-line rule:key-duplicates
1284     <<: *lf_maven_docker_stage
1285
1286     properties:
1287       - lf-infra-properties:
1288           build-days-to-keep: "{build-days-to-keep}"
1289       - github:
1290           url: "{github-url}/{github-org}/{project}"
1291
1292     scm:
1293       - lf-infra-github-scm:
1294           url: "{git-clone-url}{github-org}/{project}"
1295           refspec: "+refs/pull/*:refs/remotes/origin/pr/*"
1296           branch: "{branch}"
1297           submodule-recursive: "{submodule-recursive}"
1298           submodule-timeout: "{submodule-timeout}"
1299           submodule-disable: "{submodule-disable}"
1300           choosing-strategy: default
1301           jenkins-ssh-credential: "{jenkins-ssh-credential}"
1302
1303     triggers:
1304       - timed: "{obj:cron}"
1305       - github-pull-request:
1306           trigger-phrase: "^stage-(docker-)?release$"
1307           only-trigger-phrase: true
1308           status-context: "Maven Release"
1309           permit-all: true
1310           github-hooks: true
1311           white-list-target-branches:
1312             - "{branch}"
1313           included-regions: "{obj:github_included_regions}"
1314
1315 ###############
1316 # Maven Sonar #
1317 ###############
1318
1319 - _lf_maven_sonar: &lf_maven_sonar
1320     name: lf-maven-sonar
1321
1322     ######################
1323     # Default parameters #
1324     ######################
1325
1326     branch: master # Sonar should always be run on master branch
1327     build-days-to-keep: 7
1328     build-timeout: 60
1329     cron: "H H * * 6" # run weekly
1330     disable-job: false
1331     git-url: "$GIT_URL/$PROJECT"
1332     github-url: "https://github.com"
1333     jacoco-exclude-pattern: >-
1334       **/gen/**,
1335       **/generated-sources/**,
1336       **/yang-gen**,
1337       **/pax/**,
1338     java-version: openjdk11
1339     java-opts: ""
1340     mvn-global-settings: global-settings
1341     mvn-goals: clean install
1342     mvn-opts: ""
1343     mvn-params: ""
1344     mvn-version: mvn35
1345     sonar-mvn-goal: "sonar:sonar"
1346     sonarcloud: false
1347     sonarcloud-project-key: ""
1348     sonarcloud-project-organization: ""
1349     sonarcloud-api-token-cred-id: sonarcloud-api-token
1350     sonarcloud-qualitygate-wait: false
1351     # Projects not compatible with jdk17 can set java-version to something else
1352     sonarcloud-java-version: openjdk17
1353     stream: master
1354     submodule-recursive: true
1355     submodule-timeout: 10
1356     submodule-disable: false
1357     scan-dev-branch: false
1358
1359     gerrit_sonar_triggers:
1360       - comment-added-contains-event:
1361           comment-contains-value: '^Patch Set\s+\d+:\s+run-sonar\s*$'
1362
1363     #####################
1364     # Job Configuration #
1365     #####################
1366
1367     disabled: "{disable-job}"
1368
1369     parameters:
1370       - lf-infra-parameters:
1371           project: "{project}"
1372           branch: "{branch}"
1373           stream: "{stream}"
1374       - lf-infra-maven-parameters:
1375           mvn-opts: "{mvn-opts}"
1376           mvn-params: "{mvn-params}"
1377           mvn-version: "{mvn-version}"
1378       - string:
1379           name: ARCHIVE_ARTIFACTS
1380           default: "{archive-artifacts}"
1381           description: Artifacts to archive to the logs server.
1382       - string:
1383           name: JAVA_OPTS
1384           default: "{java-opts}"
1385           description: |
1386             Java options. Example: -Xmx1024m
1387       - string:
1388           name: SONAR_MAVEN_GOAL
1389           default: "{sonar-mvn-goal}"
1390           description: |
1391             Maven goals to pass to the Sonar call. Typically sonar:sonar
1392             however to use a specific version of the sonar-maven-plugin we
1393             can call "org.codehaus.mojo:sonar-maven-plugin:3.3.0.603:sonar".
1394
1395     wrappers:
1396       - credentials-binding:
1397           - text:
1398               credential-id: "{sonarcloud-api-token-cred-id}"
1399               variable: API_TOKEN
1400
1401     triggers:
1402       - timed: "{obj:cron}"
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: "**/master"
1412           skip-vote:
1413             successful: true
1414             failed: true
1415             unstable: true
1416             notbuilt: true
1417
1418     publishers:
1419       - lf-jacoco-report:
1420           exclude-pattern: "{jacoco-exclude-pattern}"
1421       - findbugs
1422       - lf-infra-publish
1423
1424 - _mvn_sonar_builders: &mvn_sonar_builders
1425     name: mvn-sonar-builders
1426     builders:
1427       - lf-infra-pre-build
1428       # With SonarCloud
1429       - conditional-step:
1430           condition-kind: boolean-expression
1431           condition-expression: "{sonarcloud}"
1432           steps:
1433             - shell: echo 'Using SonarCloud'
1434             - lf-infra-maven-sonarcloud:
1435                 java-version: "{java-version}"
1436                 mvn-goals: "{mvn-goals}"
1437                 mvn-settings: "{mvn-settings}"
1438                 mvn-version: "{mvn-version}"
1439                 sonarcloud-project-key: "{sonarcloud-project-key}"
1440                 sonarcloud-project-organization: "{sonarcloud-project-organization}"
1441                 sonarcloud-java-version: "{sonarcloud-java-version}"
1442                 sonarcloud-qualitygate-wait: "{sonarcloud-qualitygate-wait}"
1443                 scan-dev-branch: "{scan-dev-branch}"
1444       # With SonarQube
1445       - conditional-step:
1446           condition-kind: not
1447           condition-operand:
1448             condition-kind: boolean-expression
1449             condition-expression: "{sonarcloud}"
1450           steps:
1451             - shell: echo 'Using SonarQube'
1452             - lf-infra-maven-sonar:
1453                 java-version: "{java-version}"
1454                 mvn-goals: "{mvn-goals}"
1455                 mvn-settings: "{mvn-settings}"
1456                 mvn-version: "{mvn-version}"
1457
1458 - _mvn_sonar_builders_prescan_script: &mvn_sonar_builders_prescan_script
1459     name: mvn-sonar-builders-prescan-script
1460     builders:
1461       - shell: "{sonar-prescan-script}"
1462       - lf-infra-pre-build
1463       # With SonarCloud
1464       - conditional-step:
1465           condition-kind: boolean-expression
1466           condition-expression: "{sonarcloud}"
1467           steps:
1468             - shell: echo 'Using SonarCloud'
1469             - lf-infra-maven-sonarcloud:
1470                 java-version: "{java-version}"
1471                 mvn-goals: "{mvn-goals}"
1472                 mvn-settings: "{mvn-settings}"
1473                 mvn-version: "{mvn-version}"
1474                 sonarcloud-project-key: "{sonarcloud-project-key}"
1475                 sonarcloud-project-organization: "{sonarcloud-project-organization}"
1476                 sonarcloud-java-version: "{sonarcloud-java-version}"
1477                 sonarcloud-qualitygate-wait: "{sonarcloud-qualitygate-wait}"
1478                 scan-dev-branch: "{scan-dev-branch}"
1479       # With SonarQube
1480       - conditional-step:
1481           condition-kind: not
1482           condition-operand:
1483             condition-kind: boolean-expression
1484             condition-expression: "{sonarcloud}"
1485           steps:
1486             - shell: echo 'Using SonarQube'
1487             - lf-infra-maven-sonar:
1488                 java-version: "{java-version}"
1489                 mvn-goals: "{mvn-goals}"
1490                 mvn-settings: "{mvn-settings}"
1491                 mvn-version: "{mvn-version}"
1492
1493 - builder:
1494     name: lf-infra-maven-sbom-generator
1495     # Run Maven goals and trigger SPDX SBOM Generator tool
1496     builders:
1497       - inject:
1498           properties-content: |
1499             SBOM_FLAGS={sbom-flags}
1500       - shell: !include-raw-escape:
1501           - ../shell/sbom-generator.sh
1502
1503 - builder:
1504     name: lf-infra-maven-sonar
1505     # Run a Sonar build with Maven
1506     builders:
1507       - lf-maven-install:
1508           mvn-version: "{mvn-version}"
1509       - lf-update-java-alternatives:
1510           java-version: "{java-version}"
1511       - inject:
1512           # Switch this to the sonar wrapper when JJB 2.0 is available
1513           properties-content: |
1514             SONAR_HOST_URL=$SONAR_URL
1515             MAVEN_GOALS={mvn-goals}
1516       - lf-provide-maven-settings:
1517           global-settings-file: global-settings
1518           settings-file: "{mvn-settings}"
1519       - shell: !include-raw-escape:
1520           - ../shell/common-variables.sh
1521           - ../shell/maven-sonar.sh
1522       - lf-provide-maven-settings-cleanup
1523
1524 - builder:
1525     name: lf-infra-maven-sonarcloud
1526     # Run a Sonar build with Maven
1527     builders:
1528       - lf-maven-install:
1529           mvn-version: "{mvn-version}"
1530       - lf-update-java-alternatives:
1531           java-version: "{java-version}"
1532       - inject:
1533           # Switch this to the sonar wrapper when JJB 2.0 is available
1534           properties-content: |
1535             SONAR_HOST_URL=https://sonarcloud.io
1536             PROJECT_KEY={sonarcloud-project-key}
1537             PROJECT_ORGANIZATION={sonarcloud-project-organization}
1538             MAVEN_GOALS={mvn-goals}
1539             SONARCLOUD_JAVA_VERSION={sonarcloud-java-version}
1540             SCAN_DEV_BRANCH={scan-dev-branch}
1541             SONARCLOUD_QUALITYGATE_WAIT={sonarcloud-qualitygate-wait}
1542       - lf-provide-maven-settings:
1543           global-settings-file: global-settings
1544           settings-file: "{mvn-settings}"
1545       - shell: !include-raw-escape:
1546           - ../shell/common-variables.sh
1547           - ../shell/maven-sonar.sh
1548       - lf-provide-maven-settings-cleanup
1549
1550 - job-template:
1551     name: "{project-name}-sonar"
1552     id: gerrit-maven-sonar
1553     <<: *lf_maven_common
1554     # yamllint disable-line rule:key-duplicates
1555     <<: *lf_maven_sonar
1556     <<: *mvn_sonar_builders
1557
1558     scm:
1559       - lf-infra-gerrit-scm:
1560           jenkins-ssh-credential: "{jenkins-ssh-credential}"
1561           git-url: "{git-url}"
1562           refspec: $GERRIT_REFSPEC
1563           branch: $GERRIT_BRANCH
1564           submodule-recursive: "{submodule-recursive}"
1565           submodule-timeout: "{submodule-timeout}"
1566           submodule-disable: "{submodule-disable}"
1567           choosing-strategy: default
1568
1569 - job-template:
1570     name: "{project-name}-sonar-verify"
1571     id: gerrit-maven-sonar-verify
1572     <<: *lf_maven_common
1573     # yamllint disable-line rule:key-duplicates
1574     <<: *lf_maven_sonar
1575     <<: *mvn_sonar_builders
1576
1577     sonarcloud: true
1578     scan-dev-branch: true
1579     sonarcloud-qualitygate-wait: false
1580
1581     gerrit_sonar_triggers:
1582       - patchset-created-event:
1583           exclude-drafts: true
1584           exclude-trivial-rebase: false
1585           exclude-no-code-change: false
1586       - draft-published-event
1587       - comment-added-contains-event:
1588           comment-contains-value: '^Patch Set\s+\d+:\s+(recheck|reverify)\s*$'
1589
1590     gerrit_trigger_file_paths:
1591       - compare-type: REG_EXP
1592         pattern: ".*"
1593
1594     triggers:
1595       - gerrit:
1596           server-name: "{gerrit-server-name}"
1597           trigger-on: "{obj:gerrit_sonar_triggers}"
1598           projects:
1599             - project-compare-type: "ANT"
1600               project-pattern: "{project}"
1601               branches:
1602                 - branch-compare-type: "ANT"
1603                   branch-pattern: "**/{branch}"
1604               file-paths: "{obj:gerrit_trigger_file_paths}"
1605
1606     scm:
1607       - lf-infra-gerrit-scm:
1608           jenkins-ssh-credential: "{jenkins-ssh-credential}"
1609           git-url: "{git-url}"
1610           refspec: $GERRIT_REFSPEC
1611           branch: $GERRIT_BRANCH
1612           submodule-recursive: "{submodule-recursive}"
1613           submodule-timeout: "{submodule-timeout}"
1614           submodule-disable: "{submodule-disable}"
1615           choosing-strategy: gerrit
1616
1617 - job-template:
1618     name: "{project-name}-sonar-prescan-script"
1619     id: gerrit-maven-sonar-prescan-script
1620     <<: *lf_maven_common
1621     # yamllint disable-line rule:key-duplicates
1622     <<: *lf_maven_sonar
1623     <<: *mvn_sonar_builders_prescan_script
1624
1625     scm:
1626       - lf-infra-gerrit-scm:
1627           jenkins-ssh-credential: "{jenkins-ssh-credential}"
1628           git-url: "{git-url}"
1629           refspec: $GERRIT_REFSPEC
1630           branch: $GERRIT_BRANCH
1631           submodule-recursive: "{submodule-recursive}"
1632           submodule-timeout: "{submodule-timeout}"
1633           submodule-disable: "{submodule-disable}"
1634           choosing-strategy: default
1635
1636 - job-template:
1637     name: "{project-name}-sonar"
1638     id: github-maven-sonar
1639     <<: *lf_maven_common
1640     # yamllint disable-line rule:key-duplicates
1641     <<: *lf_maven_sonar
1642
1643     properties:
1644       - lf-infra-properties:
1645           build-days-to-keep: "{build-days-to-keep}"
1646       - github:
1647           url: "{github-url}/{github-org}/{project}"
1648
1649     scm:
1650       - lf-infra-github-scm:
1651           url: "{git-clone-url}{github-org}/{project}"
1652           refspec: "+refs/pull/*:refs/remotes/origin/pr/*"
1653           branch: "$sha1"
1654           submodule-recursive: "{submodule-recursive}"
1655           submodule-timeout: "{submodule-timeout}"
1656           submodule-disable: "{submodule-disable}"
1657           choosing-strategy: default
1658           jenkins-ssh-credential: "{jenkins-ssh-credential}"
1659
1660     triggers:
1661       - timed: "{obj:cron}"
1662       - github-pull-request:
1663           trigger-phrase: "^run-sonar$"
1664           only-trigger-phrase: true
1665           status-context: "Maven Sonar"
1666           permit-all: true
1667           github-hooks: true
1668           org-list:
1669             - "{github-org}"
1670           white-list: "{obj:github_pr_allowlist}"
1671           admin-list: "{obj:github_pr_admin_list}"
1672           white-list-target-branches:
1673             - "{branch}"
1674
1675 - job-template:
1676     name: "{project-name}-sonar-prescan-script"
1677     id: github-maven-sonar-prescan-script
1678     <<: *lf_maven_common
1679     # yamllint disable-line rule:key-duplicates
1680     <<: *lf_maven_sonar
1681     <<: *mvn_sonar_builders_prescan_script
1682
1683     properties:
1684       - lf-infra-properties:
1685           build-days-to-keep: "{build-days-to-keep}"
1686       - github:
1687           url: "{github-url}/{github-org}/{project}"
1688
1689     scm:
1690       - lf-infra-github-scm:
1691           url: "{git-clone-url}{github-org}/{project}"
1692           refspec: "+refs/pull/*:refs/remotes/origin/pr/*"
1693           branch: "$sha1"
1694           submodule-recursive: "{submodule-recursive}"
1695           submodule-timeout: "{submodule-timeout}"
1696           submodule-disable: "{submodule-disable}"
1697           choosing-strategy: default
1698           jenkins-ssh-credential: "{jenkins-ssh-credential}"
1699
1700     triggers:
1701       - timed: "{obj:cron}"
1702       - github-pull-request:
1703           trigger-phrase: "^run-sonar$"
1704           only-trigger-phrase: true
1705           status-context: "Maven Sonar"
1706           permit-all: true
1707           github-hooks: true
1708           org-list:
1709             - "{github-org}"
1710           white-list: "{obj:github_pr_allowlist}"
1711           admin-list: "{obj:github_pr_admin_list}"
1712           white-list-target-branches:
1713             - "{branch}"
1714
1715 ################
1716 # Maven Verify #
1717 ################
1718
1719 - _lf_maven_verify: &lf_maven_verify
1720     name: lf-maven-verify
1721
1722     ######################
1723     # Default parameters #
1724     ######################
1725
1726     branch: master
1727     build-days-to-keep: 7
1728     build-timeout: 60
1729     disable-job: false
1730     git-url: "$GIT_URL/$PROJECT"
1731     github-url: "https://github.com"
1732     jacoco-exclude-pattern: >-
1733       **/gen/**,
1734       **/generated-sources/**,
1735       **/yang-gen**,
1736       **/pax/**
1737     java-version: openjdk11
1738     mvn-global-settings: global-settings
1739     mvn-goals: clean deploy
1740     mvn-opts: ""
1741     mvn-params: "-Dstream=$STREAM -Dmaven.source.skip=true"
1742     mvn-version: mvn35
1743     pre-build-script: "# pre-build script goes here"
1744     post-build-script: "# post-build script goes here"
1745     stream: master
1746     submodule-recursive: true
1747     submodule-timeout: 10
1748     submodule-disable: false
1749
1750     gerrit_verify_triggers:
1751       - patchset-created-event:
1752           exclude-drafts: true
1753           exclude-trivial-rebase: false
1754           exclude-no-code-change: false
1755       - draft-published-event
1756       - comment-added-contains-event:
1757           comment-contains-value: '^Patch Set\s+\d+:\s+(recheck|reverify)\s*$'
1758
1759     gerrit_trigger_file_paths:
1760       - compare-type: REG_EXP
1761         pattern: ".*"
1762
1763     # github_included_regions MUST match gerrit_trigger_file_paths
1764     github_included_regions:
1765       - ".*"
1766
1767     #####################
1768     # Job Configuration #
1769     #####################
1770
1771     concurrent: true
1772     disabled: "{disable-job}"
1773
1774     builders:
1775       - lf-infra-pre-build
1776       - lf-jacoco-nojava-workaround
1777       - lf-maven-install:
1778           mvn-version: "{mvn-version}"
1779       - lf-update-java-alternatives:
1780           java-version: "{java-version}"
1781       - lf-provide-maven-settings:
1782           global-settings-file: "{mvn-global-settings}"
1783           settings-file: "{mvn-settings}"
1784       - shell: "{pre-build-script}"
1785       - lf-maven-build:
1786           mvn-goals: "{mvn-goals}"
1787       - shell: "{post-build-script}"
1788       - lf-provide-maven-settings-cleanup
1789
1790     publishers:
1791       - findbugs
1792       - lf-jacoco-report:
1793           exclude-pattern: "{jacoco-exclude-pattern}"
1794       - lf-infra-publish
1795
1796 - job-template:
1797     name: "{project-name}-maven-verify-{stream}-{mvn-version}-{java-version}"
1798     id: gerrit-maven-verify
1799     <<: *lf_maven_common
1800     # yamllint disable-line rule:key-duplicates
1801     <<: *lf_maven_verify
1802
1803     scm:
1804       - lf-infra-gerrit-scm:
1805           jenkins-ssh-credential: "{jenkins-ssh-credential}"
1806           git-url: "{git-url}"
1807           refspec: "$GERRIT_REFSPEC"
1808           branch: "$GERRIT_BRANCH"
1809           submodule-recursive: "{submodule-recursive}"
1810           submodule-timeout: "{submodule-timeout}"
1811           submodule-disable: "{submodule-disable}"
1812           choosing-strategy: gerrit
1813
1814     triggers:
1815       - gerrit:
1816           server-name: "{gerrit-server-name}"
1817           trigger-on: "{obj:gerrit_verify_triggers}"
1818           projects:
1819             - project-compare-type: ANT
1820               project-pattern: "{project}"
1821               branches:
1822                 - branch-compare-type: ANT
1823                   branch-pattern: "**/{branch}"
1824               file-paths: "{obj:gerrit_trigger_file_paths}"
1825
1826 - job-template:
1827     name: "{project-name}-maven-verify-{stream}-{mvn-version}-{java-version}"
1828     id: github-maven-verify
1829     <<: *lf_maven_common
1830     # yamllint disable-line rule:key-duplicates
1831     <<: *lf_maven_verify
1832
1833     properties:
1834       - lf-infra-properties:
1835           build-days-to-keep: "{build-days-to-keep}"
1836       - github:
1837           url: "{github-url}/{github-org}/{project}"
1838
1839     scm:
1840       - lf-infra-github-scm:
1841           url: "{git-clone-url}{github-org}/{project}"
1842           refspec: "+refs/pull/*:refs/remotes/origin/pr/*"
1843           branch: "$sha1"
1844           submodule-recursive: "{submodule-recursive}"
1845           submodule-timeout: "{submodule-timeout}"
1846           submodule-disable: "{submodule-disable}"
1847           choosing-strategy: default
1848           jenkins-ssh-credential: "{jenkins-ssh-credential}"
1849
1850     triggers:
1851       - github-pull-request:
1852           trigger-phrase: "^(recheck|reverify)$"
1853           only-trigger-phrase: false
1854           status-context: "Maven Verify {mvn-version}-{java-version}"
1855           permit-all: true
1856           github-hooks: true
1857           white-list-target-branches:
1858             - "{branch}"
1859           included-regions: "{obj:github_included_regions}"
1860
1861 ###########################
1862 # Maven Verify for Docker #
1863 ###########################
1864
1865 - _lf_maven_docker_verify: &lf_maven_docker_verify
1866     name: lf-maven-docker-verify
1867
1868     # image push not allowed during verification
1869     mvn-goals: clean install
1870
1871     builders:
1872       - lf-infra-pre-build
1873       - lf-jacoco-nojava-workaround
1874       - lf-maven-install:
1875           mvn-version: "{mvn-version}"
1876       - lf-update-java-alternatives:
1877           java-version: "{java-version}"
1878       - lf-infra-docker-login:
1879           global-settings-file: "{mvn-global-settings}"
1880           settings-file: "{mvn-settings}"
1881       # must provide maven settings AFTER docker due to its cleanup
1882       - lf-provide-maven-settings:
1883           global-settings-file: "{mvn-global-settings}"
1884           settings-file: "{mvn-settings}"
1885       - inject:
1886           properties-content: |
1887             CONTAINER_PULL_REGISTRY={container-public-registry}
1888       - lf-maven-build:
1889           mvn-goals: "{mvn-goals}"
1890       - lf-provide-maven-settings-cleanup
1891
1892 - job-template:
1893     name: "{project-name}-maven-docker-verify-{stream}-{mvn-version}-{java-version}"
1894     id: gerrit-maven-docker-verify
1895     <<: *lf_maven_common
1896     # yamllint disable-line rule:key-duplicates
1897     <<: *lf_maven_verify
1898     # yamllint disable-line rule:key-duplicates
1899     <<: *lf_maven_docker_verify
1900
1901     scm:
1902       - lf-infra-gerrit-scm:
1903           jenkins-ssh-credential: "{jenkins-ssh-credential}"
1904           git-url: "{git-url}"
1905           refspec: "$GERRIT_REFSPEC"
1906           branch: "$GERRIT_BRANCH"
1907           submodule-recursive: "{submodule-recursive}"
1908           submodule-timeout: "{submodule-timeout}"
1909           submodule-disable: "{submodule-disable}"
1910           choosing-strategy: gerrit
1911
1912     triggers:
1913       - gerrit:
1914           server-name: "{gerrit-server-name}"
1915           trigger-on: "{obj:gerrit_verify_triggers}"
1916           projects:
1917             - project-compare-type: ANT
1918               project-pattern: "{project}"
1919               branches:
1920                 - branch-compare-type: ANT
1921                   branch-pattern: "**/{branch}"
1922               file-paths: "{obj:gerrit_trigger_file_paths}"
1923
1924 - job-template:
1925     name: "{project-name}-maven-docker-verify-{stream}-{mvn-version}-{java-version}"
1926     id: github-maven-docker-verify
1927     <<: *lf_maven_common
1928     # yamllint disable-line rule:key-duplicates
1929     <<: *lf_maven_verify
1930     # yamllint disable-line rule:key-duplicates
1931     <<: *lf_maven_docker_verify
1932
1933     properties:
1934       - lf-infra-properties:
1935           build-days-to-keep: "{build-days-to-keep}"
1936       - github:
1937           url: "{github-url}/{github-org}/{project}"
1938
1939     scm:
1940       - lf-infra-github-scm:
1941           url: "{git-clone-url}{github-org}/{project}"
1942           refspec: "+refs/pull/*:refs/remotes/origin/pr/*"
1943           branch: "$sha1"
1944           submodule-recursive: "{submodule-recursive}"
1945           submodule-timeout: "{submodule-timeout}"
1946           submodule-disable: "{submodule-disable}"
1947           choosing-strategy: default
1948           jenkins-ssh-credential: "{jenkins-ssh-credential}"
1949
1950     triggers:
1951       - github-pull-request:
1952           trigger-phrase: "^(recheck|reverify)$"
1953           only-trigger-phrase: false
1954           status-context: "Maven Docker Verify {mvn-version}-{java-version}"
1955           permit-all: true
1956           github-hooks: true
1957           white-list-target-branches:
1958             - "{branch}"
1959           included-regions: "{obj:github_included_regions}"
1960
1961 #############################
1962 # Maven Verify Dependencies #
1963 #############################
1964
1965 - _lf_maven_verify_dependencies: &lf_maven_verify_dependencies
1966     name: lf-maven-verify-dependencies
1967
1968     ######################
1969     # Default parameters #
1970     ######################
1971
1972     branch: master
1973     build-days-to-keep: 7
1974     build-timeout: 60
1975     disable-job: false
1976     git-url: "$GIT_URL/$PROJECT"
1977     github-url: "https://github.com"
1978     jacoco-exclude-pattern: >-
1979       **/gen/**,
1980       **/generated-sources/**,
1981       **/yang-gen**,
1982       **/pax/**
1983     java-version: openjdk11
1984     mvn-global-settings: global-settings
1985     mvn-goals: clean deploy
1986     mvn-opts: ""
1987     mvn-params: "-Dstream=$STREAM"
1988     mvn-version: mvn35
1989     stream: master
1990     submodule-recursive: true
1991     submodule-timeout: 10
1992     submodule-disable: false
1993
1994     gerrit_verify_triggers:
1995       - comment-added-contains-event:
1996           comment-contains-value: "recheck: [0-9 ]+"
1997     gerrit_trigger_file_paths:
1998       - compare-type: ANT
1999         pattern: "**"
2000
2001     #####################
2002     # Job Configuration #
2003     #####################
2004
2005     concurrent: true
2006     disabled: "{disable-job}"
2007
2008     builders:
2009       - lf-infra-pre-build
2010       - lf-jacoco-nojava-workaround
2011       - lf-maven-install:
2012           mvn-version: "{mvn-version}"
2013       - lf-update-java-alternatives:
2014           java-version: "{java-version}"
2015       - lf-provide-maven-settings:
2016           global-settings-file: "{mvn-global-settings}"
2017           settings-file: "{mvn-settings}"
2018       - lf-fetch-dependent-patches
2019       - shell: !include-raw-escape:
2020           - ../shell/common-variables.sh
2021           - ../shell/maven-build-deps.sh
2022       - lf-maven-build:
2023           mvn-goals: "{mvn-goals}"
2024       - lf-provide-maven-settings-cleanup
2025
2026     publishers:
2027       - findbugs
2028       - lf-jacoco-report:
2029           exclude-pattern: "{jacoco-exclude-pattern}"
2030       - lf-infra-publish
2031
2032 - job-template:
2033     name: "{project-name}-maven-verify-deps-{stream}-{mvn-version}-{java-version}"
2034     id: gerrit-maven-verify-dependencies
2035     <<: *lf_maven_common
2036     # yamllint disable-line rule:key-duplicates
2037     <<: *lf_maven_verify_dependencies
2038
2039     scm:
2040       - lf-infra-gerrit-scm:
2041           jenkins-ssh-credential: "{jenkins-ssh-credential}"
2042           git-url: "{git-url}"
2043           refspec: "$GERRIT_REFSPEC"
2044           branch: "$GERRIT_BRANCH"
2045           submodule-recursive: "{submodule-recursive}"
2046           submodule-timeout: "{submodule-timeout}"
2047           submodule-disable: "{submodule-disable}"
2048           choosing-strategy: gerrit
2049
2050     triggers:
2051       - gerrit:
2052           server-name: "{gerrit-server-name}"
2053           trigger-on: "{obj:gerrit_verify_triggers}"
2054           projects:
2055             - project-compare-type: ANT
2056               project-pattern: "{project}"
2057               branches:
2058                 - branch-compare-type: ANT
2059                   branch-pattern: "**/{branch}"
2060               file-paths: "{obj:gerrit_trigger_file_paths}"
2061           comment-text-parameter-mode: PLAIN