Support Windows Scripts in JJB and Packer Jobs
[releng/global-jjb.git] / jjb / lf-ci-jobs.yaml
1 ---
2 - job-group:
3     name: '{project-name}-ci-jobs'
4
5     jobs:
6       - gerrit-jenkins-cfg-merge
7       - gerrit-jjb-deploy-job
8       - gerrit-jjb-merge
9       - gerrit-jjb-verify
10
11 - job-group:
12     name: '{project-name}-github-ci-jobs'
13
14     jobs:
15       - github-jenkins-cfg-merge
16       - github-jjb-deploy-job
17       - github-jjb-merge
18       - github-jjb-verify
19
20 - job-group:
21     name: '{project-name}-info-yaml-jobs'
22
23     jobs:
24       - gerrit-info-yaml-verify
25
26 - job-group:
27     name: '{project-name}-github-info-yaml-jobs'
28
29     jobs:
30       - github-info-yaml-verify
31
32 - job-group:
33     name: '{project-name}-packer-jobs'
34
35     jobs:
36       - gerrit-packer-merge
37       - gerrit-packer-verify
38
39
40 - job-group:
41     name: '{project-name}-github-packer-jobs'
42
43     jobs:
44       - github-packer-merge
45       - github-packer-verify
46
47 ####################
48 # COMMON FUNCTIONS #
49 ####################
50
51 - builder:
52     name: lf-infra-jjbini
53     builders:
54       - config-file-provider:
55           files:
56             - file-id: jjbini
57               target: '$HOME/.config/jenkins_jobs/jenkins_jobs.ini'
58
59 - builder:
60     name: lf-infra-jjbini-sandbox
61     # TODO: Consolidate this into jjbini when JJB2.0 is available.
62     builders:
63       - config-file-provider:
64           files:
65             - file-id: jjbini-sandbox
66               target: '$HOME/.config/jenkins_jobs/jenkins_jobs.ini'
67
68 - lf_packer: &lf_packer_common
69     name: lf-packer-common
70     # Provide configuration common in packer jobs.
71
72     ######################
73     # Default parameters #
74     ######################
75
76     branch: master
77     build-timeout: 90
78     cron: '@monthly'
79     stream: master
80     submodule-recursive: true
81     packer-cloud-settings: packer-cloud-env
82     packer-version: 1.2.3
83
84     #####################
85     # Job Configuration #
86     #####################
87
88     project-type: freestyle
89     node: '{build-node}'
90
91     properties:
92       - lf-infra-properties:
93           project: '{project}'
94           build-days-to-keep: 7
95
96     parameters:
97       - lf-infra-parameters:
98           project: '{project}'
99           stream: '{stream}'
100           branch: '{branch}'
101           lftools-version: '{lftools-version}'
102       - lf-packer-parameters:
103           packer-version: '{packer-version}'
104
105     wrappers:
106       - lf-infra-wrappers:
107           build-timeout: '{build-timeout}'
108           jenkins-ssh-credential: '{jenkins-ssh-credential}'
109
110     publishers:
111       - lf-infra-publish
112
113 - parameter:
114     name: lf-infra-jjb-parameters
115     parameters:
116       - string:
117           name: JJB_VERSION
118           default: '{jjb-version}'
119           description: Jenkins Job Builder version to download and install.
120
121 - parameter:
122     name: lf-packer-parameters
123     parameters:
124       - string:
125           name: PACKER_VERSION
126           default: '{packer-version}'
127           description: Packer version to download and install.
128
129 - lf_jjb_common: &lf_jjb_common
130     name: lf-jjb-common
131
132     ######################
133     # Default parameters #
134     ######################
135
136     branch: master
137     build-timeout: 10
138     jjb-version: 2.0.5
139     stream: master
140     submodule-recursive: true
141
142     gerrit_trigger_file_paths:
143       - compare-type: REG_EXP
144         pattern: '.*\.groovy'
145       - compare-type: REG_EXP
146         pattern: '.*\.sh'
147       - compare-type: REG_EXP
148         pattern: '.*\.bat'
149       - compare-type: REG_EXP
150         pattern: '.*\.ps1'
151       - compare-type: REG_EXP
152         pattern: '.*\.(yaml|yml)'
153       - compare-type: REG_EXP
154         pattern: '.*\/global-jjb'
155
156     # github_included_regions MUST match gerrit_trigger_file_paths
157     github_included_regions:
158       - '.*\.groovy'
159       - '.*\.sh'
160       - '.*\.bat'
161       - '.*\.ps1'
162       - '.*\.(yaml|yml)'
163       - '.*\/global-jjb'
164
165     #####################
166     # Job Configuration #
167     #####################
168
169     project-type: freestyle
170     node: '{build-node}'
171
172     properties:
173       - lf-infra-properties:
174           project: '{project}'
175           build-days-to-keep: 7
176
177     parameters:
178       - lf-infra-parameters:
179           project: '{project}'
180           stream: '{stream}'
181           branch: '{branch}'
182           lftools-version: '{lftools-version}'
183       - lf-infra-jjb-parameters:
184           jjb-version: '{jjb-version}'
185
186     wrappers:
187       - lf-infra-wrappers:
188           build-timeout: '{build-timeout}'
189           jenkins-ssh-credential: '{jenkins-ssh-credential}'
190
191     publishers:
192       - lf-infra-publish
193
194 ######################
195 # Gerrit Branch Lock #
196 ######################
197
198 - job-template:
199     name: '{project-name}-gerrit-branch-lock-{stream}'
200     id: gerrit-branch-lock
201
202     ######################
203     # Default parameters #
204     ######################
205
206     branch: master
207     git-url: '$GIT_URL/$GERRIT_PROJECT'
208     stream: master
209     gerrit_merge_triggers:
210       - comment-added-contains-event:
211           comment-contains-value: (un)?lock branch$
212
213     #####################
214     # Job Configuration #
215     #####################
216
217     project-type: freestyle
218     node: '{build-node}'
219
220     properties:
221       - lf-infra-properties:
222           project: '{project}'
223           build-days-to-keep: 1
224
225     parameters:
226       - lf-infra-parameters:
227           project: '{project}'
228           stream: '{stream}'
229           branch: '{branch}'
230           lftools-version: '{lftools-version}'
231
232     wrappers:
233       - lf-infra-wrappers:
234           build-timeout: 5
235           jenkins-ssh-credential: '{jenkins-ssh-credential}'
236
237     scm:
238       - lf-infra-gerrit-scm:
239           git-url: '{git-url}'
240           refspec: ''
241           branch: '{branch}'
242           submodule-recursive: false
243           choosing-strategy: default
244           jenkins-ssh-credential: '{jenkins-ssh-credential}'
245
246     triggers:
247       - gerrit:
248           server-name: '{gerrit-server-name}'
249           trigger-on: '{obj:gerrit_merge_triggers}'
250           projects:
251             - project-compare-type: ANT
252               project-pattern: '{project}'
253               branches:
254                 - branch-compare-type: ANT
255                   branch-pattern: '**/{branch}'
256
257     builders:
258       - shell: !include-raw-escape: ../shell/gerrit-branch-lock.sh
259
260
261     publishers:
262       - lf-infra-publish
263
264 ##########################################
265 # Jenkins Configuration Management Merge #
266 ##########################################
267
268 - builder:
269     name: lf-jenkins-cfg-clouds
270     builders:
271       - lf-infra-jjbini
272       - inject:
273           properties-content: 'jenkins_silos={jenkins-silos}'
274       - shell: !include-raw-escape: ../shell/jenkins-configure-clouds.sh
275       - shell: rm "$HOME/.config/jenkins_jobs/jenkins_jobs.ini"
276
277 - builder:
278     name: lf-jenkins-cfg-global-vars
279     builders:
280       - lf-infra-jjbini
281       - inject:
282           properties-content: 'jenkins_silos={jenkins-silos}'
283       - shell: !include-raw-escape: ../shell/jenkins-configure-global-vars.sh
284       - shell: rm "$HOME/.config/jenkins_jobs/jenkins_jobs.ini"
285
286 - lf_jenkins_configuration: &lf_jenkins_cfg_merge
287     name: lf-jenkins-cfg-merge
288
289     ######################
290     # Default parameters #
291     ######################
292
293     branch: master
294     cron: '@daily'
295     git-url: '$GIT_URL/$GERRIT_PROJECT'
296     jenkins-silos: production sandbox
297
298     gerrit_merge_triggers:
299       - change-merged-event
300       - comment-added-contains-event:
301           comment-contains-value: remerge$
302
303     gerrit_trigger_file_paths:
304       - compare-type: REG_EXP
305         pattern: 'jenkins-config\/.*'
306
307     # github_included_regions MUST match gerrit_trigger_file_paths
308     github_included_regions:
309       - 'jenkins-config\/.*'
310
311     #####################
312     # Job Configuration #
313     #####################
314
315     project-type: freestyle
316     node: '{build-node}'
317     concurrent: false
318
319     properties:
320       - lf-infra-properties:
321           project: '{project}'
322           build-days-to-keep: 1
323
324     parameters:
325       - lf-infra-parameters:
326           project: '{project}'
327           stream: ''
328           branch: master
329           lftools-version: '{lftools-version}'
330
331     wrappers:
332       - lf-infra-wrappers:
333           build-timeout: 10
334           jenkins-ssh-credential: '{jenkins-ssh-credential}'
335
336     builders:
337       - shell: !include-raw-escape:
338           - ../shell/lftools-install.sh
339       - lf-jenkins-cfg-global-vars:
340           jenkins-silos: '{jenkins-silos}'
341       - lf-jenkins-cfg-clouds:
342           jenkins-silos: '{jenkins-silos}'
343
344     publishers:
345       - lf-infra-publish
346
347 - job-template:
348     name: '{project-name}-jenkins-cfg-merge'
349     id: gerrit-jenkins-cfg-merge
350     <<: *lf_jenkins_cfg_merge
351
352     scm:
353       - lf-infra-gerrit-scm:
354           git-url: '{git-url}'
355           refspec: 'refs/heads/{branch}'
356           branch: '{branch}'
357           submodule-recursive: true
358           choosing-strategy: default
359           jenkins-ssh-credential: '{jenkins-ssh-credential}'
360
361     triggers:
362       - timed: '{obj:cron}'
363       - gerrit:
364           server-name: '{gerrit-server-name}'
365           trigger-on: '{obj:gerrit_merge_triggers}'
366           projects:
367             - project-compare-type: ANT
368               project-pattern: '{project}'
369               branches:
370                 - branch-compare-type: ANT
371                   branch-pattern: '**/{branch}'
372               file-paths: '{obj:gerrit_trigger_file_paths}'
373
374 - job-template:
375     name: '{project-name}-jenkins-cfg-merge'
376     id: github-jenkins-cfg-merge
377     <<: *lf_jenkins_cfg_merge
378
379     properties:
380       - github:
381           url: '{git-url}/{github-org}/{project}'
382
383     scm:
384       - lf-infra-github-scm:
385           url: '{git-clone-url}{github-org}/{project}'
386           refspec: ''
387           branch: 'refs/heads/{branch}'
388           submodule-recursive: true
389           choosing-strategy: default
390           jenkins-ssh-credential: '{jenkins-ssh-credential}'
391
392     triggers:
393       - timed: '{obj:cron}'
394       - github
395       - pollscm:
396           cron: ''
397       - github-pull-request:
398           trigger-phrase: '^remerge$'
399           only-trigger-phrase: true
400           status-context: 'Jenkins CFG Merge'
401           permit-all: false
402           github-hooks: true
403           org-list:
404             - '{github-org}'
405           white-list: '{obj:github_pr_whitelist}'
406           admin-list: '{obj:github_pr_admin_list}'
407           included-regions: '{obj:github_included_regions}'
408
409 ##################
410 # JJB DEPLOY JOB #
411 ##################
412
413 - lf_jjb_deploy_job: &lf_jjb_deploy_job
414     name: lf-jjb-deploy-job
415
416     ######################
417     # Default parameters #
418     ######################
419
420     branch: master
421     git-url: '$GIT_URL/$GERRIT_PROJECT'
422     stream: master
423     gerrit_jjb_deploy_job_triggers:
424       - comment-added-contains-event:
425           comment-contains-value: 'jjb-deploy[:]* (?!\*+$).+$'
426
427     #####################
428     # Job Configuration #
429     #####################
430
431     project-type: freestyle
432     node: '{build-node}'
433     concurrent: true
434
435     properties:
436       - lf-infra-properties:
437           project: '{project}'
438           build-days-to-keep: 1
439
440     parameters:
441       - lf-infra-parameters:
442           project: '{project}'
443           stream: '{stream}'
444           branch: '{branch}'
445           lftools-version: '{lftools-version}'
446
447     wrappers:
448       - lf-infra-wrappers:
449           build-timeout: 5
450           jenkins-ssh-credential: '{jenkins-ssh-credential}'
451
452     builders:
453       - lf-pip-install:
454           pip-packages: jenkins-job-builder
455       - lf-infra-jjbini-sandbox
456       - shell: !include-raw-escape: ../shell/jjb-deploy-job.sh
457
458     publishers:
459       - lf-infra-publish
460
461 - job-template:
462     name: '{project-name}-jjb-deploy-job'
463     id: gerrit-jjb-deploy-job
464     <<: *lf_jjb_deploy_job
465
466     scm:
467       - lf-infra-gerrit-scm:
468           git-url: '{git-url}'
469           refspec: 'refs/heads/{branch}'
470           branch: '{branch}'
471           submodule-recursive: true
472           choosing-strategy: default
473           jenkins-ssh-credential: '{jenkins-ssh-credential}'
474
475     triggers:
476       - gerrit:
477           server-name: '{gerrit-server-name}'
478           trigger-on: '{obj:gerrit_jjb_deploy_job_triggers}'
479           projects:
480             - project-compare-type: ANT
481               project-pattern: '**'
482               branches:
483                 - branch-compare-type: ANT
484                   branch-pattern: '**'
485           skip-vote:
486             success: true
487             failed: true
488             unstable: true
489             notbuilt: true
490
491 - job-template:
492     name: '{project-name}-jjb-deploy-job'
493     id: github-jjb-deploy-job
494     <<: *lf_jjb_deploy_job
495
496     properties:
497       - github:
498           url: '{git-url}/{github-org}/{project}'
499
500     scm:
501       - lf-infra-github-scm:
502           url: '{git-clone-url}{github-org}/{project}'
503           refspec: '+refs/pull/*:refs/remotes/origin/pr/*'
504           branch: '$sha1'
505           submodule-recursive: true
506           choosing-strategy: default
507           jenkins-ssh-credential: '{jenkins-ssh-credential}'
508
509     triggers:
510       - github-pull-request:
511           trigger-phrase: '^jjb-deploy (?!\*+$).+$'
512           only-trigger-phrase: true
513           status-context: 'JJB Deploy Job'
514           permit-all: true
515           github-hooks: true
516
517 #############
518 # JJB Merge #
519 #############
520
521 - lf_jjb_merge: &lf_jjb_merge
522     name: lf-jjb-merge
523
524     ######################
525     # Default parameters #
526     ######################
527
528     gerrit_merge_triggers:
529       - change-merged-event
530       - comment-added-contains-event:
531           comment-contains-value: remerge$
532
533     #####################
534     # Job Configuration #
535     #####################
536
537     builders:
538       - lf-infra-jjbini
539       - shell: !include-raw-escape:
540           - ../shell/jjb-install.sh
541           - ../shell/jjb-merge-job.sh
542           - ../shell/jjb-cleanup.sh
543
544 - job-template:
545     name: '{project-name}-jjb-merge'
546     id: gerrit-jjb-merge
547     <<: *lf_jjb_common
548     # yamllint disable-line rule:key-duplicates
549     <<: *lf_jjb_merge
550
551     git-url: '$GIT_URL/$GERRIT_PROJECT'
552
553     scm:
554       - lf-infra-gerrit-scm:
555           git-url: '{git-url}'
556           refspec: ''
557           branch: '{branch}'
558           submodule-recursive: '{submodule-recursive}'
559           choosing-strategy: default
560           jenkins-ssh-credential: '{jenkins-ssh-credential}'
561
562     triggers:
563       - gerrit:
564           server-name: '{gerrit-server-name}'
565           trigger-on: '{obj:gerrit_merge_triggers}'
566           projects:
567             - project-compare-type: ANT
568               project-pattern: '{project}'
569               branches:
570                 - branch-compare-type: ANT
571                   branch-pattern: '**/{branch}'
572               file-paths: '{obj:gerrit_trigger_file_paths}'
573
574 - job-template:
575     name: '{project-name}-jjb-merge'
576     id: github-jjb-merge
577     <<: *lf_jjb_common
578     # yamllint disable-line rule:key-duplicates
579     <<: *lf_jjb_merge
580
581     #####################
582     # Job Configuration #
583     #####################
584
585     properties:
586       - github:
587           url: '{git-url}/{github-org}/{project}'
588
589     scm:
590       - lf-infra-github-scm:
591           url: '{git-clone-url}{github-org}/{project}'
592           refspec: ''
593           branch: 'refs/heads/{branch}'
594           submodule-recursive: '{submodule-recursive}'
595           choosing-strategy: default
596           jenkins-ssh-credential: '{jenkins-ssh-credential}'
597
598     triggers:
599       - github
600       - pollscm:
601           cron: ''
602       - github-pull-request:
603           trigger-phrase: '^remerge$'
604           only-trigger-phrase: true
605           status-context: 'JJB Merge'
606           permit-all: false
607           github-hooks: true
608           org-list:
609             - '{github-org}'
610           white-list: '{obj:github_pr_whitelist}'
611           admin-list: '{obj:github_pr_admin_list}'
612           included-regions: '{obj:github_included_regions}'
613
614 ##############
615 # JJB Verify #
616 ##############
617
618 - lf_jjb_verify: &lf_jjb_verify
619     name: lf-jjb-verify
620
621     ######################
622     # Default parameters #
623     ######################
624
625     gerrit_verify_triggers:
626       - patchset-created-event:
627           exclude-drafts: true
628           exclude-trivial-rebase: false
629           exclude-no-code-change: false
630       - draft-published-event
631       - comment-added-contains-event:
632           comment-contains-value: recheck$
633
634     #####################
635     # Job Configuration #
636     #####################
637
638     concurrent: true
639
640     builders:
641       - lf-infra-jjbini
642       - shell: !include-raw-escape:
643           - ../shell/git-validate-jira-urls.sh
644           - ../shell/jjb-install.sh
645           - ../shell/jjb-verify-job.sh
646           - ../shell/jjb-check-unicode.sh
647           - ../shell/jjb-cleanup.sh
648       - lf-infra-gpg-verify-git-signature
649
650 - job-template:
651     name: '{project-name}-jjb-verify'
652     id: gerrit-jjb-verify
653     <<: *lf_jjb_common
654     # yamllint disable-line rule:key-duplicates
655     <<: *lf_jjb_verify
656
657     ######################
658     # Default parameters #
659     ######################
660
661     git-url: '$GIT_URL/$GERRIT_PROJECT'
662
663     #####################
664     # Job Configuration #
665     #####################
666
667     scm:
668       - lf-infra-gerrit-scm:
669           git-url: '{git-url}'
670           refspec: '$GERRIT_REFSPEC'
671           branch: '$GERRIT_BRANCH'
672           submodule-recursive: '{submodule-recursive}'
673           choosing-strategy: gerrit
674           jenkins-ssh-credential: '{jenkins-ssh-credential}'
675
676     triggers:
677       - gerrit:
678           server-name: '{gerrit-server-name}'
679           trigger-on: '{obj:gerrit_verify_triggers}'
680           projects:
681             - project-compare-type: ANT
682               project-pattern: '{project}'
683               branches:
684                 - branch-compare-type: ANT
685                   branch-pattern: '**/{branch}'
686               file-paths: '{obj:gerrit_trigger_file_paths}'
687
688 - job-template:
689     name: '{project-name}-jjb-verify'
690     id: github-jjb-verify
691     <<: *lf_jjb_common
692     # yamllint disable-line rule:key-duplicates
693     <<: *lf_jjb_verify
694
695     #####################
696     # Job Configuration #
697     #####################
698
699     properties:
700       - github:
701           url: '{git-url}/{github-org}/{project}'
702
703     scm:
704       - lf-infra-github-scm:
705           url: '{git-clone-url}{github-org}/{project}'
706           refspec: '+refs/pull/*:refs/remotes/origin/pr/*'
707           branch: '$sha1'
708           submodule-recursive: '{submodule-recursive}'
709           choosing-strategy: default
710           jenkins-ssh-credential: '{jenkins-ssh-credential}'
711
712     triggers:
713       - github-pull-request:
714           trigger-phrase: '^recheck$'
715           only-trigger-phrase: false
716           status-context: 'JJB Verify'
717           permit-all: true
718           github-hooks: true
719           included-regions: '{obj:github_included_regions}'
720
721 ####################
722 # Info YAML Verify #
723 ####################
724
725 - lf_info_yaml_verify: &lf_info_yaml_verify
726     name: lf-info-yaml-verify
727
728     ######################
729     # Default parameters #
730     ######################
731
732     gerrit_verify_triggers:
733       - patchset-created-event:
734           exclude-drafts: true
735           exclude-trivial-rebase: false
736           exclude-no-code-change: false
737       - draft-published-event
738       - comment-added-contains-event:
739           comment-contains-value: recheck$
740
741     #####################
742     # Job Configuration #
743     #####################
744
745     concurrent: true
746
747     builders:
748       - shell: !include-raw-escape:
749           - ../shell/git-validate-info-yaml.sh
750           - ../shell/info-file-validate.sh
751
752 - job-template:
753     name: '{project-name}-info-yaml-verify'
754     id: gerrit-info-yaml-verify
755     <<: *lf_jjb_common
756     # yamllint disable-line rule:key-duplicates
757     <<: *lf_info_yaml_verify
758
759     git-url: '$GIT_URL/$GERRIT_PROJECT'
760
761     scm:
762       - lf-infra-gerrit-scm:
763           git-url: '{git-url}'
764           refspec: '$GERRIT_REFSPEC'
765           branch: '$GERRIT_BRANCH'
766           submodule-recursive: '{submodule-recursive}'
767           choosing-strategy: gerrit
768           jenkins-ssh-credential: '{jenkins-ssh-credential}'
769
770     triggers:
771       - gerrit:
772           server-name: '{gerrit-server-name}'
773           trigger-on: '{obj:gerrit_verify_triggers}'
774           projects:
775             - project-compare-type: ANT
776               project-pattern: '{project}'
777               branches:
778                 - branch-compare-type: ANT
779                   branch-pattern: '**/{branch}'
780               file-paths:
781                 - compare-type: REG_EXP
782                   pattern: 'INFO.yaml'
783
784 - job-template:
785     name: '{project-name}-info-yaml-verify'
786     id: github-info-yaml-verify
787     <<: *lf_jjb_common
788     # yamllint disable-line rule:key-duplicates
789     <<: *lf_info_yaml_verify
790
791     properties:
792       - github:
793           url: '{git-url}/{github-org}/{project}'
794
795     scm:
796       - lf-infra-github-scm:
797           url: '{git-clone-url}{github-org}/{project}'
798           refspec: '+refs/pull/*:refs/remotes/origin/pr/*'
799           branch: '$sha1'
800           submodule-recursive: '{submodule-recursive}'
801           choosing-strategy: default
802           jenkins-ssh-credential: '{jenkins-ssh-credential}'
803
804     triggers:
805       - github-pull-request:
806           trigger-phrase: '^recheck$'
807           only-trigger-phrase: false
808           status-context: 'INFO File Verify'
809           permit-all: true
810           github-hooks: true
811           # included-regions MUST match gerrit file-paths
812           included-regions: 'INFO.yaml'
813
814 ################
815 # Packer Merge #
816 ################
817
818 - lf_packer_merge: &lf_packer_merge
819     name: lf-packer-merge
820
821     #####################
822     # Job Configuration #
823     #####################
824
825     builders:
826       - lf-infra-packer-validate:
827           packer-cloud-settings: '{packer-cloud-settings}'
828           packer-version: '{packer-version}'
829       - lf-infra-packer-build:
830           packer-cloud-settings: '{packer-cloud-settings}'
831           packer-version: '{packer-version}'
832           platform: '{platforms}'
833           template: '{templates}'
834
835 - job-template:
836     name: '{project-name}-packer-merge-{platforms}-{templates}'
837     id: gerrit-packer-merge
838     <<: *lf_packer_common
839     # yamllint disable-line rule:key-duplicates
840     <<: *lf_packer_merge
841
842     ######################
843     # Default parameters #
844     ######################
845
846     git-url: '$GIT_URL/$GERRIT_PROJECT'
847
848     gerrit_merge_triggers:
849       - change-merged-event
850       - comment-added-contains-event:
851           comment-contains-value: remerge$
852
853     #####################
854     # Job Configuration #
855     #####################
856
857     scm:
858       - lf-infra-gerrit-scm:
859           git-url: '{git-url}'
860           refspec: '$GERRIT_REFSPEC'
861           branch: '$GERRIT_BRANCH'
862           submodule-recursive: '{submodule-recursive}'
863           choosing-strategy: gerrit
864           jenkins-ssh-credential: '{jenkins-ssh-credential}'
865
866     triggers:
867       - timed: '{cron}'
868       - gerrit:
869           server-name: '{gerrit-server-name}'
870           trigger-on: '{obj:gerrit_merge_triggers}'
871           projects:
872             - project-compare-type: ANT
873               project-pattern: '{project}'
874               branches:
875                 - branch-compare-type: ANT
876                   branch-pattern: '**/{branch}'
877               file-paths:
878                 - compare-type: REG_EXP
879                   pattern: 'packer\/provision\/.*\.sh'
880                 - compare-type: REG_EXP
881                   pattern: 'packer\/provision\/.*\.bat'
882                 - compare-type: REG_EXP
883                   pattern: 'packer\/provision\/.*\.ps1'
884                 - compare-type: REG_EXP
885                   pattern: 'packer\/provision\/{templates}\.yaml'
886                 - compare-type: REG_EXP
887                   pattern: 'packer\/provision\/local-{templates}\.yaml'
888                 - compare-type: REG_EXP
889                   pattern: 'packer\/templates\/{templates}\.json'
890                 - compare-type: REG_EXP
891                   pattern: 'packer\/vars\/{platforms}\.json'
892
893 - job-template:
894     name: '{project-name}-packer-merge-{platforms}-{templates}'
895     id: github-packer-merge
896     <<: *lf_packer_common
897     # yamllint disable-line rule:key-duplicates
898     <<: *lf_packer_merge
899
900     #####################
901     # Job Configuration #
902     #####################
903
904     properties:
905       - github:
906           url: '{git-url}/{github-org}/{project}'
907
908     scm:
909       - lf-infra-github-scm:
910           url: '{git-clone-url}{github-org}/{project}'
911           refspec: ''
912           branch: 'refs/heads/{branch}'
913           submodule-recursive: '{submodule-recursive}'
914           choosing-strategy: default
915           jenkins-ssh-credential: '{jenkins-ssh-credential}'
916
917     triggers:
918       - timed: '{cron}'
919       - github
920       - pollscm:
921           cron: ''
922
923       - github-pull-request:
924           trigger-phrase: '^remerge$'
925           only-trigger-phrase: true
926           status-context: 'Packer {platforms}-{templates} Merge'
927           permit-all: false
928           github-hooks: true
929           org-list:
930             - '{github-org}'
931           white-list: '{obj:github_pr_whitelist}'
932           admin-list: '{obj:github_pr_admin_list}'
933           # included-regions MUST match Gerrit Trigger file-paths
934           included-regions:
935             - 'packer\/provision\/.*\.sh'
936             - 'packer\/provision\/.*\.bat'
937             - 'packer\/provision\/.*\.ps1'
938             - 'packer\/provision\/{templates}\.yaml'
939             - 'packer\/provision\/local-{templates}\.yaml'
940             - 'packer\/templates\/{templates}\.json'
941             - 'packer\/vars\/{platforms}\.json'
942
943 #################
944 # Packer Verify #
945 #################
946
947 - lf_packer_verify: &lf_packer_verify
948     name: lf-packer-verify
949
950     ######################
951     # Default parameters #
952     ######################
953
954     build-timeout: 10
955
956     gerrit_verify_triggers:
957       - patchset-created-event:
958           exclude-drafts: true
959           exclude-trivial-rebase: false
960           exclude-no-code-change: false
961       - draft-published-event
962       - comment-added-contains-event:
963           comment-contains-value: recheck$
964
965     gerrit_trigger_file_paths:
966       - compare-type: REG_EXP
967         pattern: 'packer\/.*'
968
969     # github_included_regions MUST match gerrit_trigger_file_paths
970     github_included_regions:
971       - 'packer\/.*'
972
973     #####################
974     # Job Configuration #
975     #####################
976
977     concurrent: true
978
979     builders:
980       - lf-infra-packer-validate:
981           packer-cloud-settings: '{packer-cloud-settings}'
982           packer-version: '{packer-version}'
983
984 - job-template:
985     name: '{project-name}-packer-verify'
986     id: gerrit-packer-verify
987     <<: *lf_packer_common
988     # yamllint disable-line rule:key-duplicates
989     <<: *lf_packer_verify
990
991     ######################
992     # Default parameters #
993     ######################
994
995     git-url: '$GIT_URL/$GERRIT_PROJECT'
996
997     #####################
998     # Job Configuration #
999     #####################
1000
1001     scm:
1002       - lf-infra-gerrit-scm:
1003           git-url: '{git-url}'
1004           refspec: '$GERRIT_REFSPEC'
1005           branch: '$GERRIT_BRANCH'
1006           submodule-recursive: '{submodule-recursive}'
1007           choosing-strategy: gerrit
1008           jenkins-ssh-credential: '{jenkins-ssh-credential}'
1009
1010     triggers:
1011       - gerrit:
1012           server-name: '{gerrit-server-name}'
1013           trigger-on: '{obj:gerrit_verify_triggers}'
1014           projects:
1015             - project-compare-type: ANT
1016               project-pattern: '{project}'
1017               branches:
1018                 - branch-compare-type: ANT
1019                   branch-pattern: '**/{branch}'
1020               file-paths: '{obj:gerrit_trigger_file_paths}'
1021
1022 - job-template:
1023     name: '{project-name}-packer-verify'
1024     id: github-packer-verify
1025     <<: *lf_packer_common
1026     # yamllint disable-line rule:key-duplicates
1027     <<: *lf_packer_verify
1028
1029     #####################
1030     # Job Configuration #
1031     #####################
1032
1033     properties:
1034       - github:
1035           url: '{git-url}/{github-org}/{project}'
1036
1037     scm:
1038       - lf-infra-github-scm:
1039           url: '{git-clone-url}{github-org}/{project}'
1040           refspec: '+refs/pull/*:refs/remotes/origin/pr/*'
1041           branch: '$sha1'
1042           submodule-recursive: '{submodule-recursive}'
1043           choosing-strategy: default
1044           jenkins-ssh-credential: '{jenkins-ssh-credential}'
1045
1046     triggers:
1047       - github-pull-request:
1048           trigger-phrase: '^recheck$'
1049           only-trigger-phrase: false
1050           status-context: 'Packer Verify'
1051           permit-all: true
1052           github-hooks: true
1053           included-regions: '{obj:github_included_regions}'