9f740462a68bde5f9921a6f73cb44d01a4fb09f8
[releng/global-jjb.git] / jjb / lf-macros.yaml
1 ---
2 ############
3 # BUILDERS #
4 ############
5
6 # To take advantage of this macro, have your build write
7 # out the file 'gerrit_comment.txt' with information to post
8 # back to gerrit and include this macro in the list of builders.
9 - builder:
10     name: comment-to-gerrit
11     builders:
12       - shell: !include-raw: ../shell/comment-to-gerrit.sh
13
14 - builder:
15     name: lf-fetch-dependent-patches
16     builders:
17       - shell: !include-raw: ../shell/gerrit-fetch-dependencies.sh
18       - inject:
19           properties-file: $WORKSPACE/.dependency.properties
20
21 - builder:
22     name: lf-license-check
23     builders:
24       - inject:
25           properties-content: |
26             FILE_PATTERNS={file-patterns}
27             SPDX_DISABLE={spdx-disable}
28             LHC_VERSION={lhc-version}
29             LICENSE_EXCLUDE_PATHS={license-exclude-paths}
30             LICENSES_ALLOWED={licenses-allowed}
31       - shell: !include-raw-escape:
32           - ../shell/license-check.sh
33
34 - builder:
35     name: lf-infra-capture-instance-metadata
36     builders:
37       - shell: !include-raw:
38           - ../shell/capture-instance-metadata.sh
39
40 - builder:
41     name: lf-infra-create-netrc
42     builders:
43       - inject:
44           properties-content: "SERVER_ID={server-id}"
45       - shell: !include-raw-escape: ../shell/create-netrc.sh
46
47 - builder:
48     name: lf-infra-docker-login
49     builders:
50       - lf-provide-maven-settings:
51           global-settings-file: "{global-settings-file}"
52           settings-file: "{settings-file}"
53       - shell: !include-raw-escape: ../shell/docker-login.sh
54       - lf-provide-maven-settings-cleanup
55
56 - builder:
57     name: lf-infra-gpg-verify-git-signature
58     # TODO: Verify signature after downloading users public key from a locally
59     # created repository instead of the public keymesh. This requires a process
60     # in place to get ODL developers public keys into a local repository without
61     # increasing the job thoughput.
62     builders:
63       - shell: !include-raw: ../shell/gpg-verify-git-signature.sh
64
65 - builder:
66     name: lf-infra-pre-build
67     builders:
68       - shell: !include-raw-escape: ../shell/python-tools-install.sh
69
70 - builder:
71     name: lf-infra-ship-logs
72     builders:
73       # Ensure no pre-existing .netrc files are overriding logs config
74       - lf-provide-maven-settings-cleanup
75       - config-file-provider:
76           files:
77             - file-id: "jenkins-log-archives-settings"
78               variable: "SETTINGS_FILE"
79       - conditional-step:
80           condition-kind: regex-match
81           regex: "^.*logs-s3.*"
82           label: $S3_BUCKET
83           on-evaluation-failure: dont-run
84           steps:
85             - config-file-provider:
86                 files:
87                   - file-id: "jenkins-s3-log-ship"
88                     target: $HOME/.aws/credentials
89       - lf-infra-create-netrc:
90           server-id: logs
91       - shell: !include-raw:
92           # Ensure python-tools are installed in case job template does not
93           # call the lf-infra-pre-build macro.
94           - ../shell/python-tools-install.sh
95       - shell: !include-raw:
96           - ../shell/sudo-logs.sh
97       - shell: !include-raw:
98           - ../shell/job-cost.sh
99       - shell: !include-raw:
100           - ../shell/logs-deploy.sh
101       - shell: !include-raw:
102           - ../shell/logs-clear-credentials.sh
103       - description-setter:
104           regexp: "(^(Nexus|S3) build logs: .*)"
105
106 - builder:
107     name: lf-infra-package-listing
108     builders:
109       - shell: !include-raw:
110           - ../shell/package-listing.sh
111
112 - builder:
113     name: lf-infra-packer-build
114     builders:
115       - conditional-step:
116           condition-kind: boolean-expression
117           condition-expression: "{openstack}"
118           steps:
119             - config-file-provider:
120                 files:
121                   - file-id: clouds-yaml
122                     target: "$HOME/.config/openstack/clouds.yaml"
123             - inject:
124                 properties-content: OS_CLOUD={openstack-cloud}
125       - config-file-provider:
126           files:
127             - file-id: "{packer-cloud-settings}"
128               variable: CLOUDENV
129       - inject:
130           properties-content: |
131             PACKER_BUILDER={packer-builder}
132             PACKER_PLATFORM={platform}
133             PACKER_TEMPLATE={template}
134             PACKER_VERSION={packer-version}
135             UPDATE_CLOUD_IMAGE={update-cloud-image}
136       - shell: !include-raw-escape:
137           - ../shell/packer-install.sh
138           - ../shell/packer-build.sh
139       - shell: !include-raw:
140           - ../shell/packer-clear-credentials.sh
141
142 - builder:
143     name: lf-infra-packer-validate
144     builders:
145       - conditional-step:
146           condition-kind: boolean-expression
147           condition-expression: "{openstack}"
148           steps:
149             - config-file-provider:
150                 files:
151                   - file-id: clouds-yaml
152                     target: "$HOME/.config/openstack/clouds.yaml"
153             - inject:
154                 properties-content: OS_CLOUD={openstack-cloud}
155       - config-file-provider:
156           files:
157             - file-id: "{packer-cloud-settings}"
158               variable: CLOUDENV
159       - inject:
160           properties-content: |
161             PACKER_BUILDER={packer-builder}
162             PACKER_VERSION={packer-version}
163       - shell: !include-raw-escape:
164           - ../shell/packer-install.sh
165           - ../shell/packer-validate.sh
166       - shell: !include-raw:
167           - ../shell/packer-clear-credentials.sh
168
169 - builder:
170     name: lf-infra-update-packer-images
171     builders:
172       - shell: !include-raw: ../shell/update-cloud-images.sh
173
174 - builder:
175     name: lf-infra-push-gerrit-patch
176     builders:
177       - inject:
178           properties-content: |
179             PROJECT={project}
180             GERRIT_COMMIT_MESSAGE={gerrit-commit-message}
181             GERRIT_HOST={gerrit-host}
182             GERRIT_TOPIC={gerrit-topic}
183             GERRIT_USER={gerrit-user}
184             REVIEWERS_EMAIL={reviewers-email}
185       - shell: !include-raw-escape: ../shell/gerrit-push-patch.sh
186
187 - builder:
188     name: lf-infra-sysstat
189     builders:
190       - shell: !include-raw:
191           - ../shell/sysstat.sh
192
193 - builder:
194     name: lf-jacoco-nojava-workaround
195     builders:
196       - shell: "mkdir -p $WORKSPACE/target/classes $WORKSPACE/jacoco/classes"
197
198 - builder:
199     name: lf-infra-deploy-maven-file
200     builders:
201       - lf-maven-install:
202           mvn-version: "{mvn-version}"
203       - lf-provide-maven-settings:
204           global-settings-file: "{global-settings-file}"
205           settings-file: "{settings-file}"
206       - inject:
207           properties-content: |
208             MAVEN_REPO_URL={maven-repo-url}
209             REPO_ID={repo-id}
210             GROUP_ID={group-id}
211             UPLOAD_FILES_PATH={upload-files-dir}
212       - shell: !include-raw-escape:
213           - ../shell/common-variables.sh
214           - ../shell/deploy-maven-file.sh
215       - lf-provide-maven-settings-cleanup
216
217 - builder:
218     name: lf-maven-central
219     builders:
220       - conditional-step:
221           condition-kind: boolean-expression
222           condition-expression: "{mvn-central}"
223           steps:
224             - lf-provide-maven-settings:
225                 global-settings-file: "{mvn-global-settings}"
226                 settings-file: "{mvn-settings}"
227             - lf-infra-create-netrc:
228                 server-id: "ossrh"
229             - inject:
230                 properties-content: "OSSRH_PROFILE_ID={ossrh-profile-id}"
231             - shell: !include-raw-escape: ../shell/maven-central.sh
232             - lf-provide-maven-settings-cleanup
233
234 - builder:
235     name: lf-packagecloud-file-provider
236     builders:
237       - config-file-provider:
238           files:
239             - file-id: ".packagecloud"
240               target: "$HOME/.packagecloud"
241       - config-file-provider:
242           files:
243             - file-id: "packagecloud_api"
244               target: "$HOME/packagecloud_api"
245
246 - builder:
247     name: lf-packagecloud-push
248     builders:
249       - inject:
250           properties-content: |
251             BUILD_DIR={build-dir}
252             PACKAGECLOUD_ACCOUNT={packagecloud-account}
253             PACKAGECLOUD_REPO={packagecloud-repo}
254             DEBIAN_DISTRIBUTION_VERSIONS={debian-distribution-versions}
255             RPM_DISTRIBUTION_VERSIONS={rpm-distribution-versions}
256       - shell: !include-raw-escape: ../shell/packagecloud-push.sh
257
258 - builder:
259     name: lf-maven-install
260     builders:
261       # Create a $HOME/.wgetrc to make the Maven download quiet.
262       - shell: 'echo "quiet=on" > "$HOME/.wgetrc"'
263       - maven-target:
264           maven-version: "{mvn-version}"
265           goals: "--version"
266       - shell: 'rm "$HOME/.wgetrc"'
267
268 - builder:
269     name: lf-provide-maven-settings
270     builders:
271       - config-file-provider:
272           files:
273             - file-id: "{global-settings-file}"
274               variable: "GLOBAL_SETTINGS_FILE"
275             - file-id: "{settings-file}"
276               variable: "SETTINGS_FILE"
277
278 - builder:
279     name: lf-provide-maven-settings-cleanup
280     builders:
281       - shell: |
282           #!/bin/bash
283           set +e  # DO NOT cause build failure if any of the rm calls fail.
284
285           rm -f "$GLOBAL_SETTINGS_FILE" "$SETTINGS_FILE"
286
287           # In some cases we use the lf-provide-maven-settings macro to produce
288           # a "$HOME/.netrc" file containing credentials. Remove that file here
289           # too if it exists.
290           rm -f "$HOME/.netrc"
291
292           # DO NOT fail build if any of the above lines fail.
293           exit 0
294
295 - builder:
296     name: lf-rtd-trigger-build
297     builders:
298       - inject:
299           properties-content: |
300             RTD_BUILD_URL={rtd-build-url}
301             RTD_TOKEN={rtd-token}
302       - shell: !include-raw-escape: ../shell/rtd-trigger-build.sh
303
304 - builder:
305     name: lf-rtd-verify
306     builders:
307       - inject:
308           properties-content: |
309             DOC_DIR={doc-dir}
310             PYTHON={python-version}
311       - shell: !include-raw-escape: ../shell/tox-install.sh
312       - shell: !include-raw-escape: ../shell/rtd-verify.sh
313
314 - builder:
315     name: lf-rtdv3-build
316     builders:
317       - inject:
318           properties-content: |
319             DEFAULT_VERSION={default-version}
320       - shell: !include-raw-escape: ../shell/rtdv3.sh
321
322 - builder:
323     name: check-info-votes
324     builders:
325       - inject:
326           properties-content: JENKINS_SSH_CREDENTIAL={jenkins-ssh-credential}
327       - shell: !include-raw-escape: ../shell/check-info-votes.sh
328
329 - builder:
330     name: lf-release
331     builders:
332       - config-file-provider:
333           files:
334             - file-id: lftoolsini
335               target: "$HOME/.config/lftools/lftools.ini"
336       - shell: !include-raw: ../shell/release-job.sh
337
338 - builder:
339     name: lf-sigul-sign-dir
340     # Requires that Jenkins be configured with SIGUL_BRIDGE_IP as a global
341     # Environment variable
342     builders:
343       - conditional-step:
344           condition-kind: boolean-expression
345           condition-expression: "{sign-artifacts}"
346           steps:
347             - config-file-provider:
348                 files:
349                   - file-id: sigul-config
350                     variable: SIGUL_CONFIG
351                   - file-id: sigul-password
352                     variable: SIGUL_PASSWORD
353                   - file-id: sigul-pki
354                     variable: SIGUL_PKI
355             - shell: !include-raw-escape: ../shell/sigul-configuration.sh
356             - shell: !include-raw-escape: ../shell/sigul-install.sh
357             - inject:
358                 properties-content: |
359                   SIGN_DIR={sign-dir}
360                   SIGN_MODE={sign-mode}
361             - shell: !include-raw-escape:
362                 - ../shell/sigul-sign-dir.sh
363             - shell: !include-raw-escape: ../shell/sigul-configuration-cleanup.sh
364
365 - builder:
366     name: lf-infra-provide-docker-cleanup
367     builders:
368       - shell: |
369           #!/bin/bash
370           set +e  # DO NOT cause build failure if docker rmi fails
371           docker rmi -f $(docker images -a -q)
372           exit 0
373
374 - builder:
375     name: lf-infra-sonar
376     # Run a Sonar Jenkins Plugin
377     builders:
378       - sonar:
379           sonar-name: Sonar
380           scanner-name: SonarQubeScanner
381           task: "{sonar-task}"
382           project: "{sonar-project-file}"
383           properties: "{sonar-properties}"
384           java-opts: "{sonar-java-opts}"
385           additional-arguments: "{sonar-additional-args}"
386
387 - builder:
388     name: lf-infra-sonar-with-prescan
389     # Run a Sonar Jenkins Plugin
390     builders:
391       - lf-sonar-prescan # Must be defined by caller
392       - sonar:
393           sonar-name: Sonar
394           scanner-name: SonarQubeScanner
395           task: "{sonar-task}"
396           project: "{sonar-project-file}"
397           properties: "{sonar-properties}"
398           java-opts: "{sonar-java-opts}"
399           additional-arguments: "{sonar-additional-args}"
400
401 - builder:
402     name: lf-infra-pipeline-verify
403     builders:
404       - shell: !include-raw-escape: ../shell/pipeline-linter.sh
405
406 ##############
407 # PARAMETERS #
408 ##############
409
410 - parameter:
411     name: lf-autotools-parameters
412     # Parameters for configure-make builds.
413     parameters:
414       - string:
415           name: CONFIGURE_OPTS
416           default: "{configure-opts}"
417           description: |
418             Options to pass to configure.
419             Example: --build=i686-pc-linux-gnu
420       - string:
421           name: INSTALL_PREFIX
422           default: "{install-prefix}"
423           description: |
424             Install prefix for configure.
425             Usually a workspace subdirectory.
426       - string:
427           name: MAKE_OPTS
428           default: "{make-opts}"
429           description: |
430             Options to pass to make.
431             Example: -j8 all
432
433 - parameter:
434     name: lf-clm-parameters
435     parameters:
436       - string:
437           name: NEXUS_IQ_STAGE
438           default: "{nexus-iq-stage}"
439           description: |
440             Stage the policy evaluation will be run against on the Nexus IQ Server.
441
442 - parameter:
443     name: lf-cmake-parameters
444     # Parameters useful in CMake builds.
445     parameters:
446       - string:
447           name: BUILD_DIR
448           default: "{build-dir}"
449           description: "Directory to build the project in."
450       - string:
451           name: CMAKE_OPTS
452           default: "{cmake-opts}"
453           description: |
454             Options to pass to CMAKE.
455             Example: -DCMAKE_INSTALL_PREFIX=$WORKSPACE/target/output
456       - string:
457           name: INSTALL_PREFIX
458           default: "{install-prefix}"
459           description: "Install prefix for C/C++ builds. Example: /usr/local"
460       - string:
461           name: MAKE_OPTS
462           default: "{make-opts}"
463           description: "Options to pass to make. Example: -j8"
464
465 - parameter:
466     name: lf-infra-maven-parameters
467     parameters:
468       - string:
469           name: M2_HOME
470           # Sets an env var for shell scripts to be able to call the dynamically
471           # installed maven without having to calculate the M2_HOME themselves.
472           default: "/w/tools/hudson.tasks.Maven_MavenInstallation/{mvn-version}"
473           description: "Maven selector to be used by shell scripts"
474       - string:
475           name: MAVEN_OPTS
476           default: "{mvn-opts}"
477           description: |
478             Maven Java opts. Example: -Xmx1024m -XX:MaxPermSize=256m
479       - string:
480           name: MAVEN_PARAMS
481           default: "{mvn-params}"
482           description: |
483             Maven parameters to pass to the mvn command.
484       - string:
485           name: MVN
486           # Sets an env var for shell scripts to be able to call the dynamically
487           # installed maven without having to calculate the path themselves.
488           # yamllint disable-line rule:line-length
489           default: "/w/tools/hudson.tasks.Maven_MavenInstallation/{mvn-version}/bin/mvn"
490           description: "Maven selector to be used by shell scripts"
491
492 - parameter:
493     name: lf-infra-openstack-parameters
494     parameters:
495       - string:
496           name: OS_CLOUD
497           default: "{os-cloud}"
498           description: |
499             The name of a cloud configuration in clouds.yaml. OS_CLOUD is a
500             variable name that is significant to openstack client as a
501             environment variable. Please refer to the documentation for
502             further details.
503             https://docs.openstack.org/developer/python-openstackclient/
504
505 - parameter:
506     name: lf-infra-parameters
507     # Standard parameters used in the LF CI environments. Gerrit variables are
508     # not used by GitHub projects, but defining them isn't harmful.
509     parameters:
510       - string:
511           name: PROJECT
512           default: "{project}"
513           description: |
514             Parameter to identify a SCM project to build. This is typically
515             the project repo path. For example: ofextensions/circuitsw
516       - string:
517           name: STREAM
518           default: "{stream}"
519           description: |
520             Stream is often set to the same name as 'branch' but can
521             sometimes be used as a name representing a project's release code
522             name.
523       - string:
524           name: GERRIT_PROJECT
525           default: "{project}"
526           description: |
527             Gerrit Trigger provided parameter to identify Gerrit project that
528             triggered the build. This is typically the project repo path as
529             exists in Gerrit. For example: ofextensions/circuitsw
530
531             If using Gerrit, in a manual build this should match the PROJECT
532             parameter above.
533       - string:
534           name: GERRIT_BRANCH
535           default: "{branch}"
536           description: |
537             Gerrit Trigger provided parameter to identify a Gerrit branch.
538
539             If using Gerrit, in a manual build override with the branch to
540             build against.
541       - string:
542           name: GERRIT_REFSPEC
543           default: "refs/heads/{branch}"
544           description: |
545             Gerrit Trigger provided parameter to identify a refspec to fetch
546             from Gerrit.
547
548             If using Gerrit, in a manual build override with a refspec.
549             https://git-scm.com/book/en/v2/Git-Internals-The-Refspec
550             For example: 'refs/heads/master'
551       - string:
552           name: sha1
553           default: "origin/{branch}"
554           description: |
555             GitHub PR Trigger provided parameter for specifying the commit
556             to checkout.
557
558             If using GitHub, in a manual build override with a branch path or
559             sha1 hash to a specific commit. For example: 'origin/master'
560
561 - parameter:
562     name: lf-infra-node-parameters
563     parameters:
564       - string:
565           name: NODE_DIR
566           default: "{node-dir}"
567           description: Path to a Node project directory.
568       - string:
569           name: NODE_VERSION
570           default: "{node-version}"
571           description: Version of NodeJS to install.
572
573 - parameter:
574     name: lf-infra-tox-parameters
575     parameters:
576       - string:
577           name: TOX_DIR
578           default: "{tox-dir}"
579           description: |
580             Path to directory containing tox.ini file.
581       - string:
582           name: TOX_ENVS
583           default: "{tox-envs}"
584           description: |
585             Tox environments to run build against.
586             Example: docs,py2,py3
587
588 - parameter:
589     name: lf-build-with-parameters-maven-release
590     parameters:
591       - string:
592           name: VERSION
593           default: ""
594           description: "Version to release, for example: 1.0.0"
595       - string:
596           name: GIT_TAG
597           default: ""
598           description: "Tag to push to git repo; optional, defaults to VERSION"
599       - string:
600           name: LOG_DIR
601           default: ""
602           description: "Log dir, for example: project-maven-stage-master/17/"
603       - string:
604           name: OVERRIDE_SEMVER_REGEX
605           default: ""
606           description: "Override Semantic Version (SemVer) Regular Expression. Ex: '.*'"
607       - choice:
608           name: DISTRIBUTION_TYPE
609           choices:
610             - None
611             - container
612             - maven
613           description: "Set to maven for build with parameters"
614       - bool:
615           name: USE_RELEASE_FILE
616           default: "{use-release-file}"
617           description: "Set to False for job built with parameters"
618
619 ##############
620 # PROPERTIES #
621 ##############
622
623 - property:
624     name: lf-infra-properties
625     properties:
626       - build-discarder:
627           # Allow build data to be stored at a length configured by the
628           # downstream project.
629           days-to-keep: "{build-days-to-keep}"
630           # Do not allow artifacts to be stored in Jenkins.
631           artifact-num-to-keep: 0
632
633 ##############
634 # PUBLISHERS #
635 ##############
636
637 - publisher:
638     name: lf-jacoco-report
639     publishers:
640       - jacoco:
641           exec-pattern: "**/**.exec"
642           class-pattern: "**/classes"
643           source-pattern: "**/src/main/java"
644           # yamllint disable-line rule:line-length
645           exclusion-pattern: "**/gen/**,**/generated-sources/**,**/yang-gen**,**/pax/**"
646           status-update: true
647           targets:
648             - branch:
649                 healthy: 10
650                 unhealthy: 20
651             - method:
652                 healthy: 50
653                 unhealthy: 40
654
655 - publisher:
656     name: lf-infra-publish
657     # lf-infra macro to finish up a build.
658     #
659     # Handles the following:
660     #   - Shipping logs to Nexus logs site repository
661     #   - Cleanup workspace
662     publishers:
663       - postbuildscript:
664           builders:
665             - role: BOTH
666               build-on:
667                 - ABORTED
668                 - FAILURE
669                 - NOT_BUILT
670                 - SUCCESS
671                 - UNSTABLE
672               build-steps:
673                 - lf-infra-sysstat
674                 - lf-infra-package-listing
675                 - lf-infra-capture-instance-metadata
676                 - lf-infra-ship-logs
677           mark-unstable-if-failed: true
678       - workspace-cleanup:
679           exclude:
680             # Do not clean up *.jenkins-trigger files for jobs that use a
681             # properties file as input for triggering another build.
682             - "**/*.jenkins-trigger"
683           fail-build: false
684
685 - publisher:
686     name: lf-infra-publish-windows
687     # lf-infra macro to finish up a build.
688     #
689     # Handles the following:
690     #   - Shipping logs to Nexus logs site repository
691     #   - Cleanup workspace
692     publishers:
693       # TODO: RELENG-1228 Develop log shipping script for Windows systems
694       # - postbuildscript:
695       #     builders:
696       #       - role: BOTH
697       #         build-on:
698       #           - ABORTED
699       #           - FAILURE
700       #           - NOT_BUILT
701       #           - SUCCESS
702       #           - UNSTABLE
703       #         build-steps:
704       #           - lf-infra-ship-logs-windows
705       #     mark-unstable-if-failed: true
706       - workspace-cleanup:
707           exclude:
708             # Do not clean up *.jenkins-trigger files for jobs that use a
709             # properties file as input for triggering another build.
710             - "**/*.jenkins-trigger"
711           fail-build: false
712
713 - publisher:
714     name: global-jjb-email-notification
715     publishers:
716       - email-ext:
717           recipients: "{email-recipients}"
718           reply-to: ""
719           content-type: default
720           subject: "{email-prefix} $PROJECT_NAME - Build # $BUILD_NUMBER - $BUILD_STATUS!"
721           body: |
722             $PROJECT_NAME - Build # $BUILD_NUMBER - $BUILD_STATUS:
723
724             Please refer to the logs server URL for console logs when possible
725             and use the Jenkins Build URL as a last resort.
726
727             Jenkins Build URL:
728             $BUILD_URL
729           unstable: true
730           fixed: true
731           send-to:
732             - recipients
733
734 #######
735 # SCM #
736 #######
737
738 - scm:
739     name: lf-infra-gerrit-scm
740     scm:
741       - git:
742           credentials-id: "{jenkins-ssh-credential}"
743           url: "{git-url}"
744           refspec: "{refspec}"
745           branches:
746             - "refs/heads/{branch}"
747           skip-tag: true
748           wipe-workspace: true
749           submodule:
750             disable: "{submodule-disable}"
751             recursive: "{submodule-recursive}"
752             timeout: "{submodule-timeout}"
753           choosing-strategy: "{choosing-strategy}"
754
755 - scm:
756     name: lf-infra-github-scm
757     scm:
758       - git:
759           credentials-id: "{jenkins-ssh-credential}"
760           url: "{url}"
761           refspec: "{refspec}"
762           branches:
763             - "{branch}"
764           skip-tag: true
765           wipe-workspace: true
766           submodule:
767             disable: "{submodule-disable}"
768             recursive: "{submodule-recursive}"
769             timeout: "{submodule-timeout}"
770           choosing-strategy: "{choosing-strategy}"
771
772 ############
773 # WRAPPERS #
774 ############
775
776 - wrapper:
777     name: lf-infra-wrappers-common
778     wrappers:
779       - mask-passwords
780       - timeout:
781           type: absolute
782           timeout: "{build-timeout}"
783           timeout-var: "BUILD_TIMEOUT"
784           fail: true
785       - timestamps
786       - openstack:
787           single-use: true
788
789 - wrapper:
790     name: lf-infra-wrappers
791     wrappers:
792       - lf-infra-wrappers-common:
793           build-timeout: "{build-timeout}"
794       - config-file-provider:
795           files:
796             - file-id: npmrc
797               target: "$HOME/.npmrc"
798             - file-id: pipconf
799               target: "$HOME/.config/pip/pip.conf"
800       - ssh-agent-credentials:
801           users:
802             - "{jenkins-ssh-credential}"
803
804 - wrapper:
805     name: lf-infra-wrappers-windows
806     wrappers:
807       - lf-infra-wrappers-common:
808           build-timeout: "{build-timeout}"