Fix: Update lf-infra-sonar macro to use JDK version
[releng/global-jjb.git] / jjb / lf-python-jobs.yaml
1 ---
2 ##########
3 # Macros #
4 ##########
5
6 - builder:
7     name: lf-infra-nexus-iq-python-cli
8     builders:
9       - inject:
10           properties-content: |
11             NEXUS_IQ_PROJECT_NAME={nexus-iq-project-name}
12             REQUIREMENTS_FILE={requirements-file}
13       - shell: !include-raw-escape: ../shell/nexus-iq-python-cli.sh
14
15 - builder:
16     name: lf-infra-tox-install
17     builders:
18       - inject:
19           properties-content: "PYTHON={python-version}"
20       - shell: !include-raw-escape: ../shell/tox-install.sh
21
22 - builder:
23     name: lf-infra-tox-run
24     builders:
25       - inject:
26           properties-content: "PARALLEL={parallel}"
27       - shell: !include-raw-escape: ../shell/tox-run.sh
28
29 ####################
30 # COMMON FUNCTIONS #
31 ####################
32
33 - _lf_python_common: &lf_python_common
34     name: lf-python-common
35
36     ######################
37     # Default parameters #
38     ######################
39
40     archive-artifacts: >
41       **/*.log
42
43     #####################
44     # Job Configuration #
45     #####################
46
47     project-type: freestyle
48     node: "{build-node}"
49
50     properties:
51       - lf-infra-properties:
52           build-days-to-keep: "{build-days-to-keep}"
53
54     parameters:
55       - lf-infra-parameters:
56           project: "{project}"
57           branch: "{branch}"
58           stream: "{stream}"
59
60     wrappers:
61       - lf-infra-wrappers:
62           build-timeout: "{build-timeout}"
63           jenkins-ssh-credential: "{jenkins-ssh-credential}"
64
65     publishers:
66       - lf-infra-publish
67
68 ####################
69 # Tox Nexus IQ CLM #
70 ####################
71
72 - _lf_tox_nexus_iq_clm: &lf_tox_nexus_iq_clm
73     name: lf-tox-nexus-iq-clm
74
75     ######################
76     # Default parameters #
77     ######################
78
79     branch: master
80     build-days-to-keep: 7
81     build-timeout: 15
82     cron: "@weekly"
83     disable-job: false
84     git-url: "$GIT_URL/$PROJECT"
85     github-url: "https://github.com"
86     java-version: openjdk11 # Scanner is a jar
87     nexus-iq-cli-version: 1.140.0-01
88     nexus-iq-namespace: "" # Recommend a trailing dash when set. Example: odl-
89     nexus-target-build: "**/*"
90     pre-build-script: "# pre-build script goes here"
91     python-version: python3
92     requirements-file: requirements.txt
93     stream: master
94     submodule-recursive: true
95     submodule-timeout: 10
96     submodule-disable: false
97     tox-dir: "."
98     tox-envs: "clm"
99
100     #####################
101     # Job Configuration #
102     #####################
103
104     disabled: "{disable-job}"
105
106     parameters:
107       - lf-infra-parameters:
108           project: "{project}"
109           branch: "{branch}"
110           stream: "{stream}"
111       - lf-infra-tox-parameters:
112           tox-dir: "{tox-dir}"
113           tox-envs: "{tox-envs}"
114       - string:
115           name: ARCHIVE_ARTIFACTS
116           default: "{archive-artifacts}"
117           description: Artifacts to archive to the logs server.
118       - string:
119           name: NEXUS_IQ_CLI_VERSION
120           default: "{nexus-iq-cli-version}"
121           description: Nexus IQ CLI jar to download and run.
122       - string:
123           name: NEXUS_TARGET_BUILD
124           default: "{nexus-target-build}"
125           description: File or dir to scan by Nexus CLI.
126
127     wrappers:
128       - lf-infra-wrappers:
129           build-timeout: "{build-timeout}"
130           jenkins-ssh-credential: "{jenkins-ssh-credential}"
131       - credentials-binding:
132           - username-password-separated:
133               credential-id: nexus-iq-xc-clm
134               username: NEXUS_IQ_USER
135               password: NEXUS_IQ_PASSWORD
136
137     builders:
138       - lf-infra-pre-build
139       - lf-update-java-alternatives:
140           java-version: "{java-version}"
141       - lf-infra-tox-install:
142           python-version: "{python-version}"
143       - shell: "{pre-build-script}"
144       - lf-infra-tox-run:
145           parallel: false
146       - lf-infra-nexus-iq-python-cli:
147           nexus-iq-project-name: "{nexus-iq-namespace}{project-name}"
148           requirements-file: "{requirements-file}"
149
150 - job-template:
151     name: "{project-name}-tox-nexus-iq-clm"
152     id: gerrit-tox-nexus-iq-clm
153     <<: *lf_python_common
154     <<: *lf_tox_nexus_iq_clm
155
156     ######################
157     # Default parameters #
158     ######################
159
160     gerrit_nexus_iq_triggers:
161       - comment-added-contains-event:
162           comment-contains-value: '^Patch Set\s+\d+:\s+run-clm\s*$'
163
164     #####################
165     # Job Configuration #
166     #####################
167
168     scm:
169       - lf-infra-gerrit-scm:
170           jenkins-ssh-credential: "{jenkins-ssh-credential}"
171           git-url: "{git-url}"
172           refspec: "$GERRIT_REFSPEC"
173           branch: "$GERRIT_BRANCH"
174           submodule-recursive: "{submodule-recursive}"
175           submodule-timeout: "{submodule-timeout}"
176           submodule-disable: "{submodule-disable}"
177           choosing-strategy: default
178
179     triggers:
180       - timed: "{obj:cron}"
181       - gerrit:
182           server-name: "{gerrit-server-name}"
183           trigger-on: "{obj:gerrit_nexus_iq_triggers}"
184           projects:
185             - project-compare-type: ANT
186               project-pattern: "{project}"
187               branches:
188                 - branch-compare-type: ANT
189                   branch-pattern: "**/{branch}"
190           skip-vote:
191             successful: true
192             failed: true
193             unstable: true
194             notbuilt: true
195
196 - job-template:
197     name: "{project-name}-tox-nexus-iq"
198     id: github-tox-nexus-iq-clm
199     <<: *lf_python_common
200     <<: *lf_tox_nexus_iq_clm
201
202     properties:
203       - lf-infra-properties:
204           build-days-to-keep: "{build-days-to-keep}"
205       - github:
206           url: "{github-url}/{github-org}/{project}"
207
208     scm:
209       - lf-infra-github-scm:
210           url: "{git-clone-url}{github-org}/{project}"
211           refspec: ""
212           branch: "refs/heads/{branch}"
213           submodule-recursive: "{submodule-recursive}"
214           submodule-timeout: "{submodule-timeout}"
215           submodule-disable: "{submodule-disable}"
216           choosing-strategy: default
217           jenkins-ssh-credential: "{jenkins-ssh-credential}"
218
219     triggers:
220       - timed: "{obj:cron}"
221       - github-pull-request:
222           trigger-phrase: "^run-clm$"
223           only-trigger-phrase: false
224           status-context: "CLM"
225           permit-all: true
226           github-hooks: true
227           white-list-target-branches:
228             - "{branch}"
229
230 ###################
231 # Python Snyk CLI #
232 ###################
233
234 - _lf_python_snyk_cli: &lf_python_snyk_cli
235     name: lf-python-snyk_cli
236
237     ######################
238     # Default parameters #
239     ######################
240
241     branch: master
242     build-days-to-keep: 30 # 30 days for troubleshooting purposes
243     build-timeout: 60
244     disable-job: false
245     git-url: "$GIT_URL/$PROJECT"
246     github-url: "https://github.com"
247     java-version: openjdk11
248     parallel: false
249     pre-build-script: "# pre-build script goes here"
250     python-version: python3
251     snyk-cli-options: ""
252     snyk-token-credential-id: snyk-token
253     snyk-org-credential-id: snyk-org
254     stream: master
255     submodule-recursive: true
256     submodule-timeout: 10
257     submodule-disable: false
258     tox-dir: "."
259     tox-envs: ""
260
261     gerrit_snyk_triggers:
262       - comment-added-contains-event:
263           comment-contains-value: '^Patch Set\s+\d+:\s+run-snyk\s*$'
264
265     parameters:
266       - lf-infra-parameters:
267           project: "{project}"
268           branch: "{branch}"
269           stream: "{stream}"
270       - string:
271           name: SNYK_CLI_OPTIONS
272           default: "{snyk-cli-options}"
273           description: Additional Snyk CLI commands and options
274       - lf-infra-tox-parameters:
275           tox-dir: "{tox-dir}"
276           tox-envs: "{tox-envs}"
277
278     wrappers:
279       - credentials-binding:
280           - text:
281               credential-id: "{snyk-token-credential-id}"
282               variable: SNYK_TOKEN
283           - text:
284               credential-id: "{snyk-org-credential-id}"
285               variable: SNYK_ORG
286
287     #####################
288     # Job Configuration #
289     #####################
290
291     disabled: "{disable-job}"
292
293     builders:
294       - lf-infra-pre-build
295       - lf-infra-tox-install:
296           python-version: "{python-version}"
297       - shell: "{pre-build-script}"
298       - lf-infra-tox-run:
299           parallel: "{parallel}"
300       - lf-infra-snyk-cli-scanner
301
302 - job-template:
303     name: "{project-name}-python-snyk-cli-{stream}"
304     id: gerrit-python-snyk-cli
305     # yamllint disable-line rule:key-duplicates
306     <<: *lf_python_snyk_cli
307
308     scm:
309       - lf-infra-gerrit-scm:
310           jenkins-ssh-credential: "{jenkins-ssh-credential}"
311           git-url: "{git-url}"
312           refspec: "$GERRIT_REFSPEC"
313           branch: "$GERRIT_BRANCH"
314           submodule-recursive: "{submodule-recursive}"
315           submodule-timeout: "{submodule-timeout}"
316           submodule-disable: "{submodule-disable}"
317           choosing-strategy: default
318
319     triggers:
320       # Build weekly on Saturdays
321       - timed: "H H * * 6"
322       - gerrit:
323           server-name: "{gerrit-server-name}"
324           trigger-on: "{obj:gerrit_snyk_triggers}"
325           projects:
326             - project-compare-type: ANT
327               project-pattern: "{project}"
328               branches:
329                 - branch-compare-type: ANT
330                   branch-pattern: "**/{branch}"
331           skip-vote:
332             successful: true
333             failed: true
334             unstable: true
335             notbuilt: true
336
337 - job-template:
338     name: "{project-name}-python-snyk-cli-{stream}"
339     id: github-python-snyk-cli
340     # yamllint disable-line rule:key-duplicates
341     <<: *lf_python_snyk_cli
342
343     properties:
344       - lf-infra-properties:
345           build-days-to-keep: "{build-days-to-keep}"
346       - github:
347           url: "{github-url}/{github-org}/{project}"
348
349     scm:
350       - lf-infra-github-scm:
351           url: "{git-clone-url}{github-org}/{project}"
352           refspec: ""
353           branch: "refs/heads/{branch}"
354           submodule-recursive: "{submodule-recursive}"
355           submodule-timeout: "{submodule-timeout}"
356           submodule-disable: "{submodule-disable}"
357           choosing-strategy: default
358           jenkins-ssh-credential: "{jenkins-ssh-credential}"
359
360     triggers:
361       # Build weekly on Saturdays
362       - timed: "H H * * 6"
363       - github-pull-request:
364           trigger-phrase: "^run-snyk$"
365           only-trigger-phrase: true
366           status-context: "SNYK scan"
367           permit-all: true
368           github-hooks: true
369           org-list:
370             - "{github-org}"
371           white-list: "{obj:github_pr_allowlist}"
372           admin-list: "{obj:github_pr_admin_list}"
373           white-list-target-branches:
374             - "{branch}"
375
376 #########################
377 # Python Sonar with CLI #
378 #########################
379
380 - _lf_cli_sonar: &lf_cli_sonar
381     name: lf-cli-sonar
382
383     ######################
384     # Default parameters #
385     ######################
386
387     branch: master # Sonar should always be run on master branch
388     build-days-to-keep: 7
389     build-timeout: 60
390     cron: "H H * * *" # run daily
391     disable-job: false
392     git-url: "$GIT_URL/$PROJECT"
393     github-url: "https://github.com"
394     # SonarCloud scan using jdk8 will become deprecated by Oct, 2020
395     # Projects not compatible with jdk11 can set java-version to something else
396     java-version: openjdk11
397     parallel: true
398     pre-build-script: "# pre-build script goes here"
399     python-version: python3
400     stream: master
401     sonar-scanner-version: "4.7.0.2747"
402     sonar-scanner-home: "$WORKSPACE/.sonar/sonar-scanner-$SONAR_SCANNER_VERSION-linux"
403     sonar-scanner-opts: "-server"
404     submodule-recursive: true
405     submodule-timeout: 10
406     submodule-disable: false
407     tox-dir: "."
408     tox-envs: ""
409
410     gerrit_trigger_file_paths:
411       - compare-type: REG_EXP
412         pattern: ".*"
413
414     # github_included_regions MUST match gerrit_trigger_file_paths
415     github_included_regions:
416       - ".*"
417
418     #####################
419     # Job Configuration #
420     #####################
421
422     disabled: "{disable-job}"
423
424     parameters:
425       - lf-infra-parameters:
426           project: "{project}"
427           branch: "{branch}"
428           stream: "{stream}"
429       - lf-infra-sonar-cli-parameters:
430           tox-dir: "{tox-dir}"
431           tox-envs: "{tox-envs}"
432           sonar-scanner-version: "{sonar-scanner-version}"
433           sonar-scanner-home: "{sonar-scanner-home}"
434           sonar-scanner-opts: "{sonar-scanner-opts}"
435       - string:
436           name: ARCHIVE_ARTIFACTS
437           default: "{archive-artifacts}"
438           description: Artifacts to archive to the logs server.
439     wrappers:
440       - credentials-binding:
441           - text:
442               credential-id: sonar-token-{project-name}
443               variable: SONAR_TOKEN
444     builders:
445       - lf-infra-pre-build
446       - lf-infra-tox-install:
447           python-version: "{python-version}"
448       - shell: "{pre-build-script}"
449       - lf-infra-tox-run:
450           parallel: "{parallel}"
451       # With Sonar CLI
452       - inject:
453           properties-content: |
454             SONARCLOUD_PROJECT_ORGANIZATION={sonarcloud-project-organization}
455             SONARCLOUD_PROJECT_KEY={sonarcloud-project-key}
456       - shell: !include-raw-escape: ../shell/sonar-cli.sh
457
458     publishers:
459       - lf-infra-publish
460
461 - job-template:
462     name: "{project-name}-cli-sonar"
463     id: gerrit-cli-sonar
464     <<: *lf_python_common
465     <<: *lf_cli_sonar
466
467     ######################
468     # Default parameters #
469     ######################
470
471     gerrit_sonar_triggers:
472       - comment-added-contains-event:
473           comment-contains-value: '^Patch Set\s+\d+:\s+run-sonar\s*$'
474
475     #####################
476     # Job Configuration #
477     #####################
478
479     scm:
480       - lf-infra-gerrit-scm:
481           jenkins-ssh-credential: "{jenkins-ssh-credential}"
482           git-url: "{git-url}"
483           refspec: $GERRIT_REFSPEC
484           branch: $GERRIT_BRANCH
485           submodule-recursive: "{submodule-recursive}"
486           submodule-timeout: "{submodule-timeout}"
487           submodule-disable: "{submodule-disable}"
488           choosing-strategy: default
489
490     triggers:
491       - timed: "{obj:cron}"
492       - gerrit:
493           server-name: "{gerrit-server-name}"
494           trigger-on: "{obj:gerrit_sonar_triggers}"
495           projects:
496             - project-compare-type: "ANT"
497               project-pattern: "{project}"
498               branches:
499                 - branch-compare-type: "ANT"
500                   branch-pattern: "**/{branch}"
501               file-paths: "{obj:gerrit_trigger_file_paths}"
502           skip-vote:
503             successful: true
504             failed: true
505             unstable: true
506             notbuilt: true
507
508 - job-template:
509     name: "{project-name}-cli-sonar"
510     id: github-cli-sonar
511     <<: *lf_python_common
512     <<: *lf_cli_sonar
513
514     properties:
515       - lf-infra-properties:
516           build-days-to-keep: "{build-days-to-keep}"
517       - github:
518           url: "{github-url}/{github-org}/{project}"
519
520     scm:
521       - lf-infra-github-scm:
522           url: "{git-clone-url}{github-org}/{project}"
523           refspec: "+refs/pull/*:refs/remotes/origin/pr/*"
524           branch: "$sha1"
525           submodule-recursive: "{submodule-recursive}"
526           submodule-timeout: "{submodule-timeout}"
527           submodule-disable: "{submodule-disable}"
528           choosing-strategy: default
529           jenkins-ssh-credential: "{jenkins-ssh-credential}"
530
531     triggers:
532       - github-pull-request:
533           trigger-phrase: "^run-sonar$"
534           only-trigger-phrase: false
535           status-context: "Python Sonar"
536           permit-all: true
537           github-hooks: true
538           white-list-target-branches:
539             - "{branch}"
540           included-regions: "{obj:github_included_regions}"
541
542 #########################
543 # Python Sonar with Tox #
544 #########################
545
546 - _lf_tox_sonar: &lf_tox_sonar
547     name: lf-tox-sonar
548
549     ######################
550     # Default parameters #
551     ######################
552
553     branch: master # Sonar should always be run on master branch
554     build-days-to-keep: 7
555     build-timeout: 60
556     cron: "H H * * *" # run daily
557     disable-job: false
558     git-url: "$GIT_URL/$PROJECT"
559     github-url: "https://github.com"
560     java-version: openjdk11
561     mvn-global-settings: global-settings
562     mvn-goals: validate
563     mvn-opts: ""
564     mvn-params: ""
565     mvn-settings: ""
566     mvn-version: mvn35
567     parallel: true
568     pre-build-script: "# pre-build script goes here"
569     python-version: python3
570     sonar-mvn-goal: "sonar:sonar"
571     sonarcloud: false
572     sonarcloud-project-key: ""
573     sonarcloud-project-organization: ""
574     sonarcloud-api-token-cred-id: sonarcloud-api-token
575     sonarcloud-qualitygate-wait: false
576     # Projects not compatible with jdk17 can set java-version to something else
577     sonarcloud-java-version: openjdk17
578     stream: master
579     submodule-recursive: true
580     submodule-timeout: 10
581     submodule-disable: false
582     tox-dir: "."
583     tox-envs: ""
584     scan-dev-branch: false
585
586     gerrit_trigger_file_paths:
587       - compare-type: REG_EXP
588         pattern: ".*"
589
590     # github_included_regions MUST match gerrit_trigger_file_paths
591     github_included_regions:
592       - ".*"
593
594     #####################
595     # Job Configuration #
596     #####################
597
598     disabled: "{disable-job}"
599
600     parameters:
601       - lf-infra-parameters:
602           project: "{project}"
603           branch: "{branch}"
604           stream: "{stream}"
605       - lf-infra-maven-parameters:
606           mvn-opts: "{mvn-opts}"
607           mvn-params: "{mvn-params}"
608           mvn-version: "{mvn-version}"
609       - lf-infra-tox-parameters:
610           tox-dir: "{tox-dir}"
611           tox-envs: "{tox-envs}"
612       - string:
613           name: ARCHIVE_ARTIFACTS
614           default: "{archive-artifacts}"
615           description: Artifacts to archive to the logs server.
616       - string:
617           name: MVN
618           # Sets an env var for shell scripts to be able to call the dynamically
619           # installed maven without having to calculate the path themselves.
620           # yamllint disable-line rule:line-length
621           default: "/w/tools/hudson.tasks.Maven_MavenInstallation/{mvn-version}/bin/mvn"
622           description: "Maven selector to be used by shell scripts"
623       - string:
624           name: SONAR_MAVEN_GOAL
625           default: "{sonar-mvn-goal}"
626           description: |
627             Maven goals to pass to the Sonar call. Typically sonar:sonar
628             however to use a specific version of the sonar-maven-plugin we
629             can call "org.codehaus.mojo:sonar-maven-plugin:3.3.0.603:sonar".
630
631     wrappers:
632       - credentials-binding:
633           - text:
634               credential-id: "{sonarcloud-api-token-cred-id}"
635               variable: API_TOKEN
636
637     builders:
638       - lf-infra-pre-build
639       - lf-infra-tox-install:
640           python-version: "{python-version}"
641       - shell: "{pre-build-script}"
642       - lf-infra-tox-run:
643           parallel: "{parallel}"
644       - lf-provide-maven-settings:
645           global-settings-file: "{mvn-global-settings}"
646           settings-file: "{mvn-settings}"
647       # With SonarCloud
648       - conditional-step:
649           condition-kind: boolean-expression
650           condition-expression: "{sonarcloud}"
651           steps:
652             - shell: echo 'Using SonarCloud'
653             - lf-infra-maven-sonarcloud:
654                 java-version: "{java-version}"
655                 mvn-goals: "{mvn-goals}"
656                 mvn-settings: "{mvn-settings}"
657                 mvn-version: "{mvn-version}"
658                 sonarcloud-project-key: "{sonarcloud-project-key}"
659                 # yamllint disable-line rule:line-length
660                 sonarcloud-project-organization: "{sonarcloud-project-organization}"
661                 sonarcloud-java-version: "{sonarcloud-java-version}"
662                 sonarcloud-qualitygate-wait: "{sonarcloud-qualitygate-wait}"
663                 scan-dev-branch: "{scan-dev-branch}"
664       # With SonarQube
665       - conditional-step:
666           condition-kind: not
667           condition-operand:
668             condition-kind: boolean-expression
669             condition-expression: "{sonarcloud}"
670           steps:
671             - shell: echo 'Using SonarQube'
672             - lf-infra-maven-sonar:
673                 java-version: "{java-version}"
674                 mvn-goals: "{mvn-goals}"
675                 mvn-settings: "{mvn-settings}"
676                 mvn-version: "{mvn-version}"
677
678     publishers:
679       - lf-infra-publish
680
681 - job-template:
682     name: "{project-name}-tox-sonar"
683     id: gerrit-tox-sonar
684     <<: *lf_python_common
685     <<: *lf_tox_sonar
686
687     ######################
688     # Default parameters #
689     ######################
690
691     gerrit_sonar_triggers:
692       - comment-added-contains-event:
693           comment-contains-value: '^Patch Set\s+\d+:\s+run-sonar\s*$'
694
695     #####################
696     # Job Configuration #
697     #####################
698
699     scm:
700       - lf-infra-gerrit-scm:
701           jenkins-ssh-credential: "{jenkins-ssh-credential}"
702           git-url: "{git-url}"
703           refspec: $GERRIT_REFSPEC
704           branch: $GERRIT_BRANCH
705           submodule-recursive: "{submodule-recursive}"
706           submodule-timeout: "{submodule-timeout}"
707           submodule-disable: "{submodule-disable}"
708           choosing-strategy: default
709
710     triggers:
711       - timed: "{obj:cron}"
712       - gerrit:
713           server-name: "{gerrit-server-name}"
714           trigger-on: "{obj:gerrit_sonar_triggers}"
715           projects:
716             - project-compare-type: "ANT"
717               project-pattern: "{project}"
718               branches:
719                 - branch-compare-type: "ANT"
720                   branch-pattern: "**/{branch}"
721               file-paths: "{obj:gerrit_trigger_file_paths}"
722           skip-vote:
723             successful: true
724             failed: true
725             unstable: true
726             notbuilt: true
727
728 - job-template:
729     name: "{project-name}-tox-sonar"
730     id: github-tox-sonar
731     <<: *lf_python_common
732     <<: *lf_tox_sonar
733
734     properties:
735       - lf-infra-properties:
736           build-days-to-keep: "{build-days-to-keep}"
737       - github:
738           url: "{github-url}/{github-org}/{project}"
739
740     scm:
741       - lf-infra-github-scm:
742           url: "{git-clone-url}{github-org}/{project}"
743           refspec: "+refs/pull/*:refs/remotes/origin/pr/*"
744           branch: "$sha1"
745           submodule-recursive: "{submodule-recursive}"
746           submodule-timeout: "{submodule-timeout}"
747           submodule-disable: "{submodule-disable}"
748           choosing-strategy: default
749           jenkins-ssh-credential: "{jenkins-ssh-credential}"
750
751     triggers:
752       - github-pull-request:
753           trigger-phrase: "^run-sonar$"
754           only-trigger-phrase: false
755           status-context: "Python Sonar"
756           permit-all: true
757           github-hooks: true
758           white-list-target-branches:
759             - "{branch}"
760           included-regions: "{obj:github_included_regions}"
761
762 #################
763 # Tox SonarQube #
764 #################
765
766 - _lf_tox_sonarqube: &lf_tox_sonarqube
767     name: lf-tox-sonarqube
768
769     ######################
770     # Default parameters #
771     ######################
772
773     archive-artifacts: >
774       **/*.log
775     branch: master # Sonar should always be run on master branch
776     build-days-to-keep: 7
777     build-timeout: 15
778     cron: "@weekly"
779     disable-job: false
780     git-url: "$GIT_URL/$PROJECT"
781     github-url: "https://github.com"
782     parallel: false
783     pre-build-script: "# pre-build script goes here"
784     python-version: python3
785     stream: master
786     submodule-recursive: true
787     submodule-timeout: 10
788     submodule-disable: false
789     tox-dir: "."
790     tox-envs: ""
791     # Sonar properties
792     sonar-additional-args: ""
793     sonar-java-opts: ""
794     sonar-project-file: "sonar-project.properties"
795     sonar-properties: ""
796     sonar-task: ""
797     sonar-jdk: openjdk17
798
799     #####################
800     # Job Configuration #
801     #####################
802
803     project-type: freestyle
804     node: "{build-node}"
805     disabled: "{disable-job}"
806
807     properties:
808       - lf-infra-properties:
809           build-days-to-keep: "{build-days-to-keep}"
810
811     wrappers:
812       - lf-infra-wrappers:
813           build-timeout: "{build-timeout}"
814           jenkins-ssh-credential: "{jenkins-ssh-credential}"
815
816     parameters:
817       - lf-infra-parameters:
818           project: "{project}"
819           branch: "{branch}"
820           stream: "{stream}"
821       - lf-infra-tox-parameters:
822           tox-dir: "{tox-dir}"
823           tox-envs: "{tox-envs}"
824       - string:
825           name: ARCHIVE_ARTIFACTS
826           default: "{archive-artifacts}"
827           description: Artifacts to archive to the logs server.
828
829     builders:
830       - lf-infra-pre-build
831       - lf-infra-tox-install:
832           python-version: "{python-version}"
833       - shell: "{pre-build-script}"
834       - lf-infra-tox-run:
835           parallel: "{parallel}"
836       - lf-infra-sonar:
837           sonar-task: "{sonar-task}"
838           sonar-project-file: "{sonar-project-file}"
839           sonar-properties: "{sonar-properties}"
840           sonar-java-opts: "{sonar-java-opts}"
841           sonar-additional-args: "{sonar-additional-args}"
842           sonar-jdk: "{sonar-jdk}"
843
844     publishers:
845       - lf-infra-publish
846
847 - job-template:
848     name: "{project-name}-tox-sonarqube"
849     id: gerrit-tox-sonarqube
850     concurrent: false
851     <<: *lf_tox_sonarqube
852
853     ######################
854     # Default parameters #
855     ######################
856
857     gerrit_sonar_triggers:
858       - comment-added-contains-event:
859           comment-contains-value: '^Patch Set\s+\d+:\s+run-sonar\s*$'
860
861     scm:
862       - lf-infra-gerrit-scm:
863           branch: "$GERRIT_BRANCH"
864           jenkins-ssh-credential: "{jenkins-ssh-credential}"
865           git-url: "{git-url}"
866           refspec: "$GERRIT_REFSPEC"
867           submodule-recursive: "{submodule-recursive}"
868           submodule-timeout: "{submodule-timeout}"
869           submodule-disable: "{submodule-disable}"
870           choosing-strategy: default
871
872     triggers:
873       - timed: "{obj:cron}"
874       - gerrit:
875           server-name: "{gerrit-server-name}"
876           trigger-on: "{obj:gerrit_sonar_triggers}"
877           projects:
878             - project-compare-type: "ANT"
879               project-pattern: "{project}"
880               branches:
881                 - branch-compare-type: "ANT"
882                   branch-pattern: "**/{branch}"
883
884 - job-template:
885     name: "{project-name}-tox-sonarqube"
886     id: github-tox-sonarqube
887     concurrent: false
888     <<: *lf_tox_sonarqube
889
890     scm:
891       - lf-infra-github-scm:
892           branch: "$sha1"
893           jenkins-ssh-credential: "{jenkins-ssh-credential}"
894           url: "{git-clone-url}{github-org}/{project}"
895           refspec: "+refs/pull/*:refs/remotes/origin/pr/*"
896           submodule-recursive: "{submodule-recursive}"
897           submodule-timeout: "{submodule-timeout}"
898           submodule-disable: "{submodule-disable}"
899           choosing-strategy: default
900
901     triggers:
902       - github-pull-request:
903           trigger-phrase: "^run-sonar$"
904           only-trigger-phrase: false
905           status-context: "Tox Sonarqube"
906           permit-all: true
907           github-hooks: true
908           white-list-target-branches:
909             - "{branch}"
910
911 ##############
912 # Tox Common #
913 ##############
914
915 - _lf_tox_common: &lf_tox_common
916     name: lf-tox-common
917
918     ######################
919     # Default parameters #
920     ######################
921
922     branch: master
923     build-days-to-keep: 7
924     build-timeout: 15
925     disable-job: false
926     git-url: "$GIT_URL/$GERRIT_PROJECT"
927     github-url: "https://github.com"
928     parallel: false
929     pre-build-script: "# pre-build script goes here"
930     python-version: python3
931     stream: master
932     submodule-recursive: true
933     submodule-timeout: 10
934     submodule-disable: false
935     tox-dir: "."
936     tox-envs: ""
937
938     gerrit_trigger_file_paths:
939       - compare-type: REG_EXP
940         pattern: ".*"
941
942     # github_included_regions MUST match gerrit_trigger_file_paths
943     github_included_regions:
944       - ".*"
945
946     #####################
947     # Job Configuration #
948     #####################
949
950     project-type: freestyle
951     node: "{build-node}"
952     concurrent: true
953     disabled: "{disable-job}"
954
955     properties:
956       - lf-infra-properties:
957           build-days-to-keep: "{build-days-to-keep}"
958
959     parameters:
960       - lf-infra-parameters:
961           project: "{project}"
962           branch: "{branch}"
963           stream: "{stream}"
964       - lf-infra-tox-parameters:
965           tox-dir: "{tox-dir}"
966           tox-envs: "{tox-envs}"
967
968     wrappers:
969       - lf-infra-wrappers:
970           build-timeout: "{build-timeout}"
971           jenkins-ssh-credential: "{jenkins-ssh-credential}"
972
973     builders:
974       - lf-infra-pre-build
975       - lf-infra-tox-install:
976           python-version: "{python-version}"
977       - shell: "{pre-build-script}"
978       - lf-infra-tox-run:
979           parallel: "{parallel}"
980
981     publishers:
982       - lf-infra-publish
983
984 - job-template:
985     # Python projects typically use tox to run testing.
986     name: "{project-name}-tox-verify-{stream}"
987     id: gerrit-tox-verify
988     <<: *lf_tox_common
989
990     ######################
991     # Default parameters #
992     ######################
993
994     gerrit-skip-vote: false
995     gerrit_verify_triggers:
996       - patchset-created-event:
997           exclude-drafts: true
998           exclude-trivial-rebase: false
999           exclude-no-code-change: false
1000       - draft-published-event
1001       - comment-added-contains-event:
1002           comment-contains-value: '^Patch Set\s+\d+:\s+(recheck|reverify)\s*$'
1003
1004     #####################
1005     # Job Configuration #
1006     #####################
1007
1008     scm:
1009       - lf-infra-gerrit-scm:
1010           jenkins-ssh-credential: "{jenkins-ssh-credential}"
1011           git-url: "{git-url}"
1012           refspec: "$GERRIT_REFSPEC"
1013           branch: "$GERRIT_BRANCH"
1014           submodule-recursive: "{submodule-recursive}"
1015           submodule-timeout: "{submodule-timeout}"
1016           submodule-disable: "{submodule-disable}"
1017           choosing-strategy: gerrit
1018
1019     triggers:
1020       - gerrit:
1021           server-name: "{gerrit-server-name}"
1022           trigger-on: "{obj:gerrit_verify_triggers}"
1023           projects:
1024             - project-compare-type: ANT
1025               project-pattern: "{project}"
1026               branches:
1027                 - branch-compare-type: ANT
1028                   branch-pattern: "**/{branch}"
1029               file-paths: "{obj:gerrit_trigger_file_paths}"
1030           skip-vote:
1031             successful: "{gerrit-skip-vote}"
1032             failed: "{gerrit-skip-vote}"
1033             unstable: "{gerrit-skip-vote}"
1034             notbuilt: "{gerrit-skip-vote}"
1035
1036 - job-template:
1037     # Python projects typically use tox to run testing.
1038     name: "{project-name}-tox-verify-{stream}"
1039     id: github-tox-verify
1040     <<: *lf_tox_common
1041
1042     properties:
1043       - lf-infra-properties:
1044           build-days-to-keep: "{build-days-to-keep}"
1045       - github:
1046           url: "{github-url}/{github-org}/{project}"
1047
1048     scm:
1049       - lf-infra-github-scm:
1050           url: "{git-clone-url}{github-org}/{project}"
1051           refspec: "+refs/pull/*:refs/remotes/origin/pr/*"
1052           branch: "$sha1"
1053           submodule-recursive: "{submodule-recursive}"
1054           submodule-timeout: "{submodule-timeout}"
1055           submodule-disable: "{submodule-disable}"
1056           choosing-strategy: default
1057           jenkins-ssh-credential: "{jenkins-ssh-credential}"
1058
1059     triggers:
1060       - github-pull-request:
1061           trigger-phrase: "^(recheck|reverify)$"
1062           only-trigger-phrase: false
1063           status-context: "Tox Verify"
1064           permit-all: true
1065           github-hooks: true
1066           white-list-target-branches:
1067             - "{branch}"
1068           included-regions: "{obj:github_included_regions}"
1069
1070 - job-template:
1071     # Run tox after merge of gerrit change set
1072     name: "{project-name}-tox-merge-{stream}"
1073     id: gerrit-tox-merge
1074     <<: *lf_tox_common
1075
1076     ######################
1077     # Default parameters #
1078     ######################
1079
1080     gerrit_merge_triggers:
1081       - change-merged-event
1082       - comment-added-contains-event:
1083           comment-contains-value: '^Patch Set\s+\d+:\s+remerge\s*$'
1084
1085     #####################
1086     # Job Configuration #
1087     #####################
1088
1089     scm:
1090       - lf-infra-gerrit-scm:
1091           jenkins-ssh-credential: "{jenkins-ssh-credential}"
1092           git-url: "{git-url}"
1093           refspec: "$GERRIT_REFSPEC"
1094           branch: "$GERRIT_BRANCH"
1095           submodule-recursive: "{submodule-recursive}"
1096           submodule-timeout: "{submodule-timeout}"
1097           submodule-disable: "{submodule-disable}"
1098           # merge jobs always build from tip
1099           choosing-strategy: default
1100
1101     triggers:
1102       - gerrit:
1103           server-name: "{gerrit-server-name}"
1104           trigger-on: "{obj:gerrit_merge_triggers}"
1105           projects:
1106             - project-compare-type: ANT
1107               project-pattern: "{project}"
1108               branches:
1109                 - branch-compare-type: ANT
1110                   branch-pattern: "**/{branch}"
1111               file-paths: "{obj:gerrit_trigger_file_paths}"
1112
1113 - job-template:
1114     # Run tox after merge of github pull request
1115     name: "{project-name}-tox-merge-{stream}"
1116     id: github-tox-merge
1117     <<: *lf_tox_common
1118
1119     properties:
1120       - lf-infra-properties:
1121           build-days-to-keep: "{build-days-to-keep}"
1122       - github:
1123           url: "{github-url}/{github-org}/{project}"
1124
1125     scm:
1126       - lf-infra-github-scm:
1127           url: "{git-clone-url}{github-org}/{project}"
1128           refspec: ""
1129           branch: "refs/heads/{branch}"
1130           submodule-recursive: "{submodule-recursive}"
1131           submodule-timeout: "{submodule-timeout}"
1132           submodule-disable: "{submodule-disable}"
1133           choosing-strategy: default
1134           jenkins-ssh-credential: "{jenkins-ssh-credential}"
1135
1136     triggers:
1137       - github-pull-request:
1138           trigger-phrase: "^remerge$"
1139           only-trigger-phrase: true
1140           status-context: "Tox Merge"
1141           permit-all: true
1142           github-hooks: true
1143           org-list:
1144             - "{github-org}"
1145           white-list: "{obj:github_pr_allowlist}"
1146           admin-list: "{obj:github_pr_admin_list}"
1147           white-list-target-branches:
1148             - "{branch}"
1149           included-regions: "{obj:github_included_regions}"
1150
1151 ########
1152 # PyPI #
1153 ########
1154
1155 - _lf_pypi_common: &lf_pypi_common
1156     name: lf-pypi-common
1157
1158     ######################
1159     # Default parameters #
1160     ######################
1161
1162     archive-artifacts: >
1163       **/*.log
1164     branch: master
1165     build-days-to-keep: 7
1166     build-timeout: 15
1167     disable-job: false
1168     dist-binary: true
1169     git-url: "$GIT_URL/$GERRIT_PROJECT"
1170     github-url: "https://github.com"
1171     parallel: false
1172     pre-build-script: "# pre-build script goes here"
1173     python-version: python3
1174     stream: master
1175     submodule-disable: false
1176     submodule-recursive: true
1177     submodule-timeout: 10
1178     tox-dir: "."
1179     tox-envs: ""
1180
1181     gerrit_trigger_file_paths:
1182       - compare-type: REG_EXP
1183         pattern: ".*"
1184
1185     # github_included_regions MUST match gerrit_trigger_file_paths
1186     github_included_regions:
1187       - ".*"
1188
1189     #####################
1190     # Job Configuration #
1191     #####################
1192
1193     project-type: freestyle
1194     node: "{build-node}"
1195     disabled: "{disable-job}"
1196
1197     properties:
1198       - lf-infra-properties:
1199           build-days-to-keep: "{build-days-to-keep}"
1200
1201     parameters:
1202       - lf-infra-parameters:
1203           project: "{project}"
1204           branch: "{branch}"
1205           stream: "{stream}"
1206       - lf-infra-tox-parameters:
1207           tox-dir: "{tox-dir}"
1208           tox-envs: "{tox-envs}"
1209       - bool:
1210           name: BUILD_BDIST_WHEEL
1211           default: "{dist-binary}"
1212           description: "Set to True (checked) to build a binary distribution"
1213       - bool:
1214           name: DRY_RUN
1215           default: false
1216           description: "Set to True (checked) to skip uploading artifacts"
1217
1218     wrappers:
1219       - lf-infra-wrappers:
1220           build-timeout: "{build-timeout}"
1221           jenkins-ssh-credential: "{jenkins-ssh-credential}"
1222
1223     publishers:
1224       - lf-infra-publish
1225
1226 - _lf_pypi_verify_builders: &lf_pypi_verify_builders
1227     name: lf-pypi-verify-builders
1228
1229     builders:
1230       - lf-infra-pre-build
1231       - lf-infra-tox-install:
1232           python-version: "{python-version}"
1233       - shell: "{pre-build-script}"
1234       - lf-infra-tox-run:
1235           parallel: "{parallel}"
1236       - shell: !include-raw-escape: ../shell/pypi-dist-build.sh
1237
1238 - _lf_pypi_publish_builders: &lf_pypi_publish_builders
1239     name: lf-pypi-publish-builders
1240
1241     builders:
1242       - lf-infra-pre-build
1243       - lf-infra-tox-install:
1244           python-version: "{python-version}"
1245       - shell: "{pre-build-script}"
1246       - lf-infra-tox-run:
1247           parallel: "{parallel}"
1248       - shell: !include-raw-escape: ../shell/pypi-dist-build.sh
1249       - config-file-provider:
1250           files:
1251             - file-id: pypirc
1252               target: "$HOME/.pypirc"
1253       - inject:
1254           properties-content: "REPOSITORY={pypi-repo}"
1255       - shell: !include-raw-escape: ../shell/pypi-upload.sh
1256
1257 - job-template:
1258     name: "{project-name}-pypi-verify-{stream}"
1259     id: gerrit-pypi-verify
1260     <<: *lf_pypi_common
1261     <<: *lf_pypi_verify_builders
1262
1263     scm:
1264       - lf-infra-gerrit-scm:
1265           jenkins-ssh-credential: "{jenkins-ssh-credential}"
1266           git-url: "{git-url}"
1267           refspec: "$GERRIT_REFSPEC"
1268           branch: "$GERRIT_BRANCH"
1269           submodule-recursive: "{submodule-recursive}"
1270           submodule-timeout: "{submodule-timeout}"
1271           submodule-disable: "{submodule-disable}"
1272           choosing-strategy: gerrit
1273
1274     triggers:
1275       - gerrit:
1276           server-name: "{gerrit-server-name}"
1277           trigger-on:
1278             - patchset-created-event:
1279                 exclude-drafts: true
1280                 exclude-trivial-rebase: false
1281                 exclude-no-code-change: false
1282             - draft-published-event
1283             - comment-added-contains-event:
1284                 # yamllint disable-line rule:line-length
1285                 comment-contains-value: '^Patch Set\s+\d+:\s+(recheck|reverify)\s*$'
1286           projects:
1287             - project-compare-type: ANT
1288               project-pattern: "{project}"
1289               branches:
1290                 - branch-compare-type: ANT
1291                   branch-pattern: "**/{branch}"
1292               file-paths: "{obj:gerrit_trigger_file_paths}"
1293
1294 - job-template:
1295     name: "{project-name}-pypi-verify-{stream}"
1296     id: github-pypi-verify
1297     <<: *lf_pypi_common
1298     <<: *lf_pypi_verify_builders
1299
1300     properties:
1301       - github:
1302           url: "{github-url}/{github-org}/{project}"
1303
1304     scm:
1305       - lf-infra-github-scm:
1306           url: "{git-clone-url}{github-org}/{project}"
1307           refspec: "+refs/pull/*:refs/remotes/origin/pr/*"
1308           branch: "$sha1"
1309           submodule-recursive: "{submodule-recursive}"
1310           submodule-timeout: "{submodule-timeout}"
1311           submodule-disable: "{submodule-disable}"
1312           choosing-strategy: default
1313           jenkins-ssh-credential: "{jenkins-ssh-credential}"
1314
1315     triggers:
1316       - github-pull-request:
1317           trigger-phrase: "^(recheck|reverify)$"
1318           only-trigger-phrase: false
1319           status-context: "PyPI Verify"
1320           permit-all: true
1321           github-hooks: true
1322           white-list-target-branches:
1323             - "{branch}"
1324           included-regions: "{obj:github_included_regions}"
1325
1326 - job-template:
1327     name: "{project-name}-pypi-merge-{stream}"
1328     id: gerrit-pypi-merge
1329     <<: *lf_pypi_common
1330     <<: *lf_pypi_publish_builders
1331
1332     cron: "" # avoid for pypi which rejects duplicates
1333     pypi-repo: pypi-test
1334
1335     scm:
1336       - lf-infra-gerrit-scm:
1337           jenkins-ssh-credential: "{jenkins-ssh-credential}"
1338           git-url: "{git-url}"
1339           refspec: "$GERRIT_REFSPEC"
1340           branch: "$GERRIT_BRANCH"
1341           submodule-recursive: "{submodule-recursive}"
1342           submodule-timeout: "{submodule-timeout}"
1343           submodule-disable: "{submodule-disable}"
1344           # merge jobs always build from tip
1345           choosing-strategy: default
1346
1347     triggers:
1348       - timed: "{obj:cron}"
1349       - gerrit:
1350           server-name: "{gerrit-server-name}"
1351           trigger-on:
1352             - change-merged-event
1353             - comment-added-contains-event:
1354                 comment-contains-value: '^Patch Set\s+\d+:\s+remerge\s*$'
1355           projects:
1356             - project-compare-type: ANT
1357               project-pattern: "{project}"
1358               branches:
1359                 - branch-compare-type: ANT
1360                   branch-pattern: "**/{branch}"
1361               file-paths: "{obj:gerrit_trigger_file_paths}"
1362
1363 - job-template:
1364     name: "{project-name}-pypi-merge-{stream}"
1365     id: github-pypi-merge
1366     <<: *lf_pypi_common
1367     <<: *lf_pypi_publish_builders
1368
1369     cron: ""
1370     pypi-repo: pypi-test
1371
1372     properties:
1373       - github:
1374           url: "{github-url}/{github-org}/{project}"
1375
1376     scm:
1377       - lf-infra-github-scm:
1378           url: "{git-clone-url}{github-org}/{project}"
1379           refspec: ""
1380           branch: "refs/heads/{branch}"
1381           submodule-recursive: "{submodule-recursive}"
1382           submodule-timeout: "{submodule-timeout}"
1383           submodule-disable: "{submodule-disable}"
1384           choosing-strategy: default
1385           jenkins-ssh-credential: "{jenkins-ssh-credential}"
1386
1387     triggers:
1388       - timed: "{obj:cron}"
1389       - github-pull-request:
1390           trigger-phrase: "^remerge$"
1391           only-trigger-phrase: false
1392           status-context: "Merge"
1393           permit-all: true
1394           github-hooks: true
1395           org-list:
1396             - "{github-org}"
1397           white-list: "{obj:github_pr_allowlist}"
1398           admin-list: "{obj:github_pr_admin_list}"
1399           white-list-target-branches:
1400             - "{branch}"
1401           included-regions: "{obj:github_included_regions}"
1402
1403 - job-template:
1404     name: "{project-name}-pypi-stage-{stream}"
1405     id: gerrit-pypi-stage
1406     <<: *lf_pypi_common
1407     <<: *lf_pypi_publish_builders
1408
1409     cron: ""
1410     pypi-repo: pypi-test
1411
1412     gerrit_stage_triggers:
1413       - comment-added-contains-event:
1414           comment-contains-value: '^Patch Set\s+\d+:\s+stage-release\s*$'
1415
1416     scm:
1417       - lf-infra-gerrit-scm:
1418           jenkins-ssh-credential: "{jenkins-ssh-credential}"
1419           git-url: "{git-url}"
1420           refspec: "$GERRIT_REFSPEC"
1421           branch: "$GERRIT_BRANCH"
1422           submodule-recursive: "{submodule-recursive}"
1423           submodule-timeout: "{submodule-timeout}"
1424           submodule-disable: "{submodule-disable}"
1425           # stage jobs always build from tip
1426           choosing-strategy: default
1427
1428     triggers:
1429       - timed: "{obj:cron}"
1430       - gerrit:
1431           server-name: "{gerrit-server-name}"
1432           trigger-on: "{obj:gerrit_stage_triggers}"
1433           projects:
1434             - project-compare-type: ANT
1435               project-pattern: "{project}"
1436               branches:
1437                 - branch-compare-type: ANT
1438                   branch-pattern: "**/{branch}"
1439               file-paths: "{obj:gerrit_trigger_file_paths}"
1440
1441 - job-template:
1442     name: "{project-name}-pypi-stage-{stream}"
1443     id: github-pypi-stage
1444     <<: *lf_pypi_common
1445     <<: *lf_pypi_publish_builders
1446
1447     cron: ""
1448     pypi-repo: pypi-test
1449
1450     properties:
1451       - github:
1452           url: "{github-url}/{github-org}/{project}"
1453
1454     scm:
1455       - lf-infra-github-scm:
1456           url: "{git-clone-url}{github-org}/{project}"
1457           refspec: ""
1458           branch: "refs/heads/{branch}"
1459           submodule-recursive: "{submodule-recursive}"
1460           submodule-timeout: "{submodule-timeout}"
1461           submodule-disable: "{submodule-disable}"
1462           choosing-strategy: default
1463           jenkins-ssh-credential: "{jenkins-ssh-credential}"
1464
1465     triggers:
1466       - timed: "{obj:cron}"
1467       - github-pull-request:
1468           trigger-phrase: "^stage-release$"
1469           only-trigger-phrase: true
1470           status-context: "Release"
1471           permit-all: true
1472           github-hooks: true
1473           white-list-target-branches:
1474             - "{branch}"
1475           included-regions: "{obj:github_included_regions}"