Make Merge and Verify job triggers overrideable
[releng/global-jjb.git] / jjb / lf-ci-jobs.yaml
1 ---
2 - job-group:
3     name: '{project-name}-ci-jobs'
4
5     # This job group contains all the recommended jobs that should be deployed
6     # for any project ci.
7
8     jjb-version: 1.6.2
9
10     jobs:
11       - gerrit-jjb-merge
12       - gerrit-jjb-verify
13
14 - job-group:
15     name: '{project-name}-github-ci-jobs'
16
17     # This job group contains all the recommended jobs that should be deployed
18     # for any project ci that is using github.
19
20     jjb-version: 1.6.2
21
22     jobs:
23       - github-jjb-merge
24       - github-jjb-verify
25
26
27 - job-group:
28     name: '{project-name}-packer-jobs'
29
30     # This job group contains all the recommended jobs that should be deployed
31     # for any project ci that is using packer.
32
33     packer-version: 1.0.2
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     # This job group contains all the recommended jobs that should be deployed
44     # for any project ci that is using packer.
45
46     packer-version: 1.0.2
47
48     jobs:
49       - github-packer-merge
50       - github-packer-verify
51
52
53 ####################
54 # Anchors & Macros #
55 ####################
56
57 - builder:
58     name: lf-infra-jjbini
59     builders:
60       - config-file-provider:
61           files:
62             - file-id: jjbini
63               target: '$HOME/.config/jenkins_jobs/jenkins_jobs.ini'
64
65 - lf_jjb_file_paths: &lf_jjb_file_paths
66     name: lf-jjb-file-paths
67     file-paths:
68       - compare-type: ANT
69         pattern: '**/*.sh'
70       - compare-type: ANT
71         pattern: '**/*.yaml'
72
73 - lf_packer_file_paths: &lf_packer_file_paths
74     name: lf-packer-file-paths
75     file-paths:
76       # Common files for all projects
77       - compare-type: ANT
78         pattern: 'packer/vars/{platforms}.json'
79       - compare-type: ANT
80         pattern: 'packer/templates/{templates}.json'
81       - compare-type: ANT
82         pattern: 'packer/provision/{templates}.sh'
83       - compare-type: ANT
84         pattern: 'packer/provision/lib/**'
85
86 - lf_jjb_merge_builders: &lf_jjb_merge_builders
87     name: lf-jjb-merge-builders
88     builders:
89       - lf-infra-jjbini
90       - shell: !include-raw-escape:
91           - ../shell/jjb-install.sh
92           - ../shell/jjb-merge-job.sh
93
94 - lf_jjb_verify_builders: &lf_jjb_verify_builders
95     name: lf-jjb-verfy-builders
96     builders:
97       - lf-infra-jjbini
98       - shell: !include-raw-escape:
99           - ../shell/git-validate-jira-urls.sh
100           - ../shell/jjb-install.sh
101           - ../shell/jjb-verify-job.sh
102           - ../shell/jjb-check-unicode.sh
103       - lf-infra-gpg-verify-git-signature
104
105 - lf_packer: &lf_packer_common
106     name: lf-packer-common
107     # Adds wrappers and parameters sections common to packer jobs.
108
109     ######################
110     # Default parameters #
111     ######################
112
113     build-timeout: 45
114     packer-cloud-settings: packer-cloud-env
115
116     wrappers:
117       - lf-infra-wrappers:
118           build-timeout: '{build-timeout}'
119           jenkins-ssh-credential: '{jenkins-ssh-credential}'
120
121     parameters:
122       - lf-infra-parameters:
123           project: '{project}'
124           stream: '{stream}'
125           branch: '{branch}'
126       - lf-infra-packer-parameters:
127           packer-version: '{packer-version}'
128
129 - lf_packer_merge_builders: &lf_packer_merge_builders
130     name: lf-packer-merge-builders
131     # Adds builders section common to merge packer jobs.
132     # {packer-cloud-settings} is passed from the project, defines the managed
133     #                   file-id name created in Jenkins
134     #                   (default: packer-cloud-env)
135     # {packer-version}: is global defined in job group level, the version number
136     #                   can be updated to install the latest version of packer.
137     # {platforms}:      defines the packer platform file, passed from the project.
138     # {template}:       defines the packer template file, passed from the project.
139     builders:
140       - lf-infra-packer-validate:
141           packer-cloud-settings: '{packer-cloud-settings}'
142           packer-version: '{packer-version}'
143       - lf-infra-packer-build:
144           packer-cloud-settings: '{packer-cloud-settings}'
145           packer-version: '{packer-version}'
146           platform: '{platforms}'
147           template: '{templates}'
148
149 - lf_packer_verify_builders: &lf_packer_verify_builders
150     # Adds builders section common to verify packer jobs.
151     # {packer-cloud-settings} is passed from the project, defines the managed
152     #                   file-id name created in Jenkins
153     #                   (default: packer-cloud-env)
154     # {packer-version}: is global defined in job group level, the version number
155     #                   can be updated to install the latest version of packer.
156     name: lf-packer-verify-builders
157     builders:
158       - lf-infra-packer-validate:
159           packer-cloud-settings: '{packer-cloud-settings}'
160           packer-version: '{packer-version}'
161
162 - parameter:
163     name: lf-infra-jjb-parameters
164     parameters:
165       - string:
166           name: JJB_VERSION
167           default: '{jjb-version}'
168           description: Jenkins Job Builder version to download and install.
169
170 - parameter:
171     name: lf-infra-packer-parameters
172     parameters:
173       - string:
174           name: PACKER_VERSION
175           default: '{packer-version}'
176           description: Packer version to download and install.
177
178
179 #################
180 # Job Templates #
181 #################
182
183 # JJB verify and merge jobs are the same except for their scm, trigger, and
184 # builders definition. This anchor is the common template
185 - lf_jjb_verify_merge: &lf_jjb_verify_merge
186     name: lf-jjb-verify-merge
187     project-type: freestyle
188
189     node: '{build-node}'
190
191     ######################
192     # Default parameters #
193     ######################
194
195     stream: master
196     branch: master
197     submodule-recursive: true
198
199     #####################
200     # Job Configuration #
201     #####################
202
203     properties:
204       - lf-infra-properties:
205           project: '{project}'
206           build-days-to-keep: 7
207
208     parameters:
209       - lf-infra-parameters:
210           project: '{project}'
211           stream: '{stream}'
212           branch: '{branch}'
213       - lf-infra-jjb-parameters:
214           jjb-version: '{jjb-version}'
215
216     wrappers:
217       - lf-infra-wrappers:
218           build-timeout: 10
219           jenkins-ssh-credential: '{jenkins-ssh-credential}'
220
221     publishers:
222       - lf-infra-publish
223
224 - job-template:
225     name: '{project-name}-jjb-merge'
226     id: gerrit-jjb-merge
227     <<: *lf_jjb_verify_merge
228     # yamllint disable-line rule:key-duplicates
229     <<: *lf_jjb_merge_builders
230
231     ######################
232     # Default parameters #
233     ######################
234
235     git-url: '$GIT_URL/$GERRIT_PROJECT'
236
237     gerrit_merge_triggers:
238       - change-merged-event
239       - comment-added-contains-event:
240           comment-contains-value: remerge$
241
242     #####################
243     # Job Configuration #
244     #####################
245
246     scm:
247       - lf-infra-gerrit-scm:
248           git-url: '{git-url}'
249           refspec: ''
250           branch: '{branch}'
251           submodule-recursive: '{submodule-recursive}'
252           choosing-strategy: default
253           jenkins-ssh-credential: '{jenkins-ssh-credential}'
254
255     triggers:
256       - gerrit:
257           server-name: '{gerrit-server-name}'
258           trigger-on: '{obj:gerrit_merge_triggers}'
259           projects:
260             - project-compare-type: ANT
261               project-pattern: '{project}'
262               branches:
263                 - branch-compare-type: ANT
264                   branch-pattern: '**/{branch}'
265               <<: *lf_jjb_file_paths
266
267 - job-template:
268     name: '{project-name}-jjb-verify'
269     id: gerrit-jjb-verify
270     concurrent: true
271     <<: *lf_jjb_verify_merge
272     # yamllint disable-line rule:key-duplicates
273     <<: *lf_jjb_verify_builders
274
275     ######################
276     # Default parameters #
277     ######################
278
279     git-url: '$GIT_URL/$GERRIT_PROJECT'
280
281     gerrit_verify_triggers:
282       - patchset-created-event:
283           exclude-drafts: false
284           exclude-trivial-rebase: false
285           exclude-no-code-change: false
286       - draft-published-event
287       - comment-added-contains-event:
288           comment-contains-value: recheck$
289
290     #####################
291     # Job Configuration #
292     #####################
293
294     scm:
295       - lf-infra-gerrit-scm:
296           git-url: '{git-url}'
297           refspec: '$GERRIT_REFSPEC'
298           branch: '$GERRIT_BRANCH'
299           submodule-recursive: '{submodule-recursive}'
300           choosing-strategy: gerrit
301           jenkins-ssh-credential: '{jenkins-ssh-credential}'
302
303     triggers:
304       - gerrit:
305           server-name: '{gerrit-server-name}'
306           trigger-on: '{obj:gerrit_verify_triggers}'
307           projects:
308             - project-compare-type: ANT
309               project-pattern: '{project}'
310               branches:
311                 - branch-compare-type: ANT
312                   branch-pattern: '**/{branch}'
313               <<: *lf_jjb_file_paths
314
315 - job-template:
316     name: '{project-name}-jjb-merge'
317     id: github-jjb-merge
318     <<: *lf_jjb_verify_merge
319     # yamllint disable-line rule:key-duplicates
320     <<: *lf_jjb_merge_builders
321
322     #####################
323     # Job Configuration #
324     #####################
325
326     properties:
327       - github:
328           url: '{git-url}/{github-org}/{project}'
329
330     scm:
331       - lf-infra-github-scm:
332           url: '{git-clone-url}{github-org}/{project}'
333           refspec: ''
334           branch: '{branch}'
335           submodule-recursive: '{submodule-recursive}'
336           choosing-strategy: default
337           jenkins-ssh-credential: '{jenkins-ssh-credential}'
338
339     triggers:
340       - github
341       - pollscm:
342           cron: ''
343       - lf-infra-github-pr-trigger:
344           trigger-phrase: '^remerge$'
345           only-trigger-phrase: true
346           status-context: 'JJB Merge'
347           permit-all: false
348           github-hooks: true
349           github-org: '{github-org}'
350           github_pr_whitelist: '{obj:github_pr_whitelist}'
351           github_pr_admin_list: '{obj:github_pr_admin_list}'
352
353 - job-template:
354     name: '{project-name}-jjb-verify'
355     id: github-jjb-verify
356     concurrent: true
357     <<: *lf_jjb_verify_merge
358     # yamllint disable-line rule:key-duplicates
359     <<: *lf_jjb_verify_builders
360
361     #####################
362     # Job Configuration #
363     #####################
364
365     properties:
366       - github:
367           url: '{git-url}/{github-org}/{project}'
368
369     scm:
370       - lf-infra-github-scm:
371           url: '{git-clone-url}{github-org}/{project}'
372           refspec: '+refs/pull/*:refs/remotes/origin/pr/*'
373           branch: '{branch}'
374           submodule-recursive: '{submodule-recursive}'
375           choosing-strategy: default
376           jenkins-ssh-credential: '{jenkins-ssh-credential}'
377
378     triggers:
379       - lf-infra-github-pr-trigger:
380           trigger-phrase: '^recheck$'
381           only-trigger-phrase: false
382           status-context: 'JJB Verify'
383           permit-all: true
384           github-hooks: true
385           github-org: ''
386           github_pr_whitelist:
387             - ''
388           github_pr_admin_list:
389             - ''
390
391 - job-template:
392     name: '{project-name}-packer-merge-{platforms}-{templates}'
393     id: gerrit-packer-merge
394     concurrent: true
395     <<: *lf_jjb_verify_merge
396     # yamllint disable-line rule:key-duplicates
397     <<: *lf_packer_common
398     # yamllint disable-line rule:key-duplicates
399     <<: *lf_packer_merge_builders
400
401     ######################
402     # Default parameters #
403     ######################
404
405     git-url: '$GIT_URL/$GERRIT_PROJECT'
406
407     gerrit_merge_triggers:
408       - change-merged-event
409       - comment-added-contains-event:
410           comment-contains-value: remerge$
411
412     #####################
413     # Job Configuration #
414     #####################
415
416     scm:
417       - lf-infra-gerrit-scm:
418           git-url: '{git-url}'
419           refspec: '$GERRIT_REFSPEC'
420           branch: '$GERRIT_BRANCH'
421           submodule-recursive: '{submodule-recursive}'
422           choosing-strategy: gerrit
423           jenkins-ssh-credential: '{jenkins-ssh-credential}'
424
425     triggers:
426       - timed: '00 10 1 * *'
427       - gerrit:
428           server-name: '{gerrit-server-name}'
429           trigger-on: '{obj:gerrit_merge_triggers}'
430           projects:
431             - project-compare-type: ANT
432               project-pattern: '{project}'
433               branches:
434                 - branch-compare-type: ANT
435                   branch-pattern: '**/{branch}'
436               <<: *lf_packer_file_paths
437
438 - job-template:
439     name: '{project-name}-packer-verify'
440     id: gerrit-packer-verify
441     concurrent: true
442     <<: *lf_jjb_verify_merge
443     # yamllint disable-line rule:key-duplicates
444     <<: *lf_packer_common
445     # yamllint disable-line rule:key-duplicates
446     <<: *lf_packer_verify_builders
447
448     ######################
449     # Default parameters #
450     ######################
451
452     build-timeout: 10
453     git-url: '$GIT_URL/$GERRIT_PROJECT'
454
455     gerrit_verify_triggers:
456       - patchset-created-event:
457           exclude-drafts: false
458           exclude-trivial-rebase: false
459           exclude-no-code-change: false
460       - draft-published-event
461       - comment-added-contains-event:
462           comment-contains-value: recheck$
463
464     #####################
465     # Job Configuration #
466     #####################
467
468     scm:
469       - lf-infra-gerrit-scm:
470           git-url: '{git-url}'
471           refspec: '$GERRIT_REFSPEC'
472           branch: '$GERRIT_BRANCH'
473           submodule-recursive: '{submodule-recursive}'
474           choosing-strategy: gerrit
475           jenkins-ssh-credential: '{jenkins-ssh-credential}'
476
477     triggers:
478       - gerrit:
479           server-name: '{gerrit-server-name}'
480           trigger-on: '{obj:gerrit_verify_triggers}'
481           projects:
482             - project-compare-type: ANT
483               project-pattern: '{project}'
484               branches:
485                 - branch-compare-type: ANT
486                   branch-pattern: '**/{branch}'
487               <<: *lf_packer_file_paths
488
489
490 - job-template:
491     name: '{project-name}-packer-merge-{platforms}-{templates}'
492     id: github-packer-merge
493     concurrent: true
494     <<: *lf_jjb_verify_merge
495     # yamllint disable-line rule:key-duplicates
496     <<: *lf_packer_common
497     # yamllint disable-line rule:key-duplicates
498     <<: *lf_packer_merge_builders
499
500     #####################
501     # Job Configuration #
502     #####################
503
504     properties:
505       - github:
506           url: '{git-url}/{github-org}/{project}'
507
508     scm:
509       - lf-infra-github-scm:
510           url: '{git-clone-url}{github-org}/{project}'
511           refspec: ''
512           branch: '{branch}'
513           submodule-recursive: '{submodule-recursive}'
514           choosing-strategy: default
515           jenkins-ssh-credential: '{jenkins-ssh-credential}'
516
517     triggers:
518       - timed: '00 10 1 * *'
519       - github
520       - pollscm:
521           cron: ''
522       - lf-infra-github-pr-trigger:
523           trigger-phrase: '^remerge$'
524           only-trigger-phrase: true
525           status-context: 'Packer {platforms}-${templates} Merge'
526           permit-all: false
527           github-hooks: true
528           github-org: '{github-org}'
529           github_pr_whitelist: '{obj:github_pr_whitelist}'
530           github_pr_admin_list: '{obj:github_pr_admin_list}'
531
532 - job-template:
533     name: '{project-name}-packer-verify'
534     id: github-packer-verify
535     concurrent: true
536     <<: *lf_jjb_verify_merge
537     # yamllint disable-line rule:key-duplicates
538     <<: *lf_packer_common
539     # yamllint disable-line rule:key-duplicates
540     <<: *lf_packer_verify_builders
541
542     ######################
543     # Default parameters #
544     ######################
545
546     build-timeout: 10
547
548     #####################
549     # Job Configuration #
550     #####################
551
552     properties:
553       - github:
554           url: '{git-url}/{github-org}/{project}'
555
556     scm:
557       - lf-infra-github-scm:
558           url: '{git-clone-url}{github-org}/{project}'
559           refspec: '+refs/pull/*:refs/remotes/origin/pr/*'
560           branch: '{branch}'
561           submodule-recursive: '{submodule-recursive}'
562           choosing-strategy: default
563           jenkins-ssh-credential: '{jenkins-ssh-credential}'
564
565     triggers:
566       - lf-infra-github-pr-trigger:
567           trigger-phrase: '^recheck$'
568           only-trigger-phrase: false
569           status-context: 'Packer Verify'
570           permit-all: true
571           github-hooks: true
572           github-org: ''
573           github_pr_whitelist:
574             - ''
575           github_pr_admin_list:
576             - ''