aeeb24610f8a17f372f3e2758c1d4b5146c74c82
[releng.git] / jjb / global / releng-macros.yml
1 ---
2 # Releng macros
3 #
4 # NOTE: make sure macros are listed in execution ordered.
5 #
6 # 1. parameters/properties
7 # 2. scm
8 # 3. triggers
9 # 4. wrappers
10 # 5. prebuilders (maven only, configured like Builders)
11 # 6. builders (maven, freestyle, matrix, etc..)
12 # 7. postbuilders (maven only, configured like Builders)
13 # 8. publishers/reporters/notifications
14
15 - parameter:
16     name: project-parameter
17     parameters:
18       - string:
19           name: PROJECT
20           default: '{project}'
21           description: "JJB configured PROJECT parameter to identify an opnfv Gerrit project"
22       - string:
23           name: GS_BASE
24           default: artifacts.opnfv.org/$PROJECT
25           description: "URL to Google Storage."
26       - string:
27           name: GS_BASE_PROXY
28           default: build.opnfv.org/artifacts.opnfv.org/$PROJECT
29           description: "URL to Google Storage proxy"
30       - string:
31           name: BRANCH
32           default: '{branch}'
33           description: "JJB configured BRANCH parameter (e.g. master, stable/danube)"
34       - string:
35           name: GERRIT_BRANCH
36           default: '{branch}'
37           description: "JJB configured GERRIT_BRANCH parameter (deprecated)"
38
39 - property:
40     name: logrotate-default
41     properties:
42       - build-discarder:
43           days-to-keep: 60
44           num-to-keep: 200
45           artifact-days-to-keep: 60
46           artifact-num-to-keep: 200
47
48 - scm:
49     name: git-scm
50     scm:
51       - git: &git-scm-defaults
52           credentials-id: '$SSH_CREDENTIAL_ID'
53           url: '$GIT_BASE'
54           branches:
55             - 'origin/$BRANCH'
56           timeout: 15
57
58 - scm:
59     name: git-scm-gerrit
60     scm:
61       - git:
62           choosing-strategy: 'gerrit'
63           refspec: '$GERRIT_REFSPEC'
64           <<: *git-scm-defaults
65 - scm:
66     name: git-scm-with-submodules
67     scm:
68       - git:
69           credentials-id: '$SSH_CREDENTIAL_ID'
70           url: '$GIT_BASE'
71           refspec: ''
72           branches:
73             - 'refs/heads/{branch}'
74           skip-tag: true
75           wipe-workspace: true
76           submodule:
77             recursive: true
78             timeout: 20
79
80 - scm:
81     name: git-scm-openstack
82     scm:
83       - git: &git-scm-openstack-defaults
84           url: '$GIT_BASE'
85           branches:
86             - 'origin/$BRANCH'
87           timeout: 15
88
89 - trigger:
90     name: 'daily-trigger-disabled'
91     triggers:
92       - timed: ''
93
94 - trigger:
95     name: 'weekly-trigger-disabled'
96     triggers:
97       - timed: ''
98
99 - trigger:
100     name: gerrit-trigger-patchset-created
101     triggers:
102       - gerrit:
103           server-name: 'gerrit.opnfv.org'
104           trigger-on:
105             - patchset-created-event:
106                 exclude-drafts: 'false'
107                 exclude-trivial-rebase: 'false'
108                 exclude-no-code-change: 'false'
109             - draft-published-event
110             - comment-added-contains-event:
111                 comment-contains-value: 'recheck'
112             - comment-added-contains-event:
113                 comment-contains-value: 'reverify'
114           projects:
115             - project-compare-type: 'ANT'
116               project-pattern: '{project}'
117               branches:
118                 - branch-compare-type: 'ANT'
119                   branch-pattern: '**/{branch}'
120               file-paths:
121                 - compare-type: 'ANT'
122                   pattern: '{files}'
123           skip-vote:
124             successful: false
125             failed: false
126             unstable: false
127             notbuilt: false
128
129 - trigger:
130     name: gerrit-trigger-change-merged
131     triggers:
132       - gerrit:
133           server-name: 'gerrit.opnfv.org'
134           trigger-on:
135             - change-merged-event
136             - comment-added-contains-event:
137                 comment-contains-value: 'remerge'
138           projects:
139             - project-compare-type: 'ANT'
140               project-pattern: '{project}'
141               branches:
142                 - branch-compare-type: 'ANT'
143                   branch-pattern: '**/{branch}'
144               file-paths:
145                 - compare-type: 'ANT'
146                   pattern: '{files}'
147
148 - trigger:
149     name: gerrit-trigger-tag-created
150     triggers:
151       - gerrit:
152           server-name: 'gerrit.opnfv.org'
153           trigger-on:
154             - ref-updated
155           projects:
156             - project-compare-type: 'ANT'
157               project-pattern: '{project}'
158               branches:
159                 - branch-compare-type: 'ANT'
160                   branch-pattern: 'refs/tags/**'
161
162 - trigger:
163     name: 'experimental'
164     triggers:
165       - gerrit:
166           server-name: 'gerrit.opnfv.org'
167           trigger-on:
168             - comment-added-contains-event:
169                 comment-contains-value: 'check-experimental'
170           projects:
171             - project-compare-type: 'ANT'
172               project-pattern: '{project}'
173               branches:
174                 - branch-compare-type: 'ANT'
175                   branch-pattern: '**/{branch}'
176               file-paths:
177                 - compare-type: 'ANT'
178                   pattern: '{files}'
179           skip-vote:
180             successful: true
181             failed: true
182             unstable: true
183             notbuilt: true
184
185 - wrapper:
186     name: ssh-agent-wrapper
187     wrappers:
188       - ssh-agent-credentials:
189           users:
190             - 'd42411ac011ad6f3dd2e1fa34eaa5d87f910eb2e'
191
192 - wrapper:
193     name: build-timeout
194     wrappers:
195       - timeout:
196           timeout: '{timeout}'
197           timeout-var: 'BUILD_TIMEOUT'
198           fail: true
199
200 - wrapper:
201     name: fix-workspace-permissions
202     wrappers:
203       - pre-scm-buildstep:
204           - shell: |
205              #!/bin/bash
206              sudo chown -R $USER:$USER $WORKSPACE || exit 1
207
208 - builder:
209     name: upload-under-review-docs-to-opnfv-artifacts
210     builders:
211       - shell: |
212           #!/bin/bash
213           set -o errexit
214           set -o pipefail
215           set -o xtrace
216           export PATH=$PATH:/usr/local/bin/
217
218           [[ $GERRIT_CHANGE_NUMBER =~ .+ ]]
219           [[ -d docs/_build/ ]] || exit 0
220
221           echo
222           echo "###########################"
223           echo "UPLOADING DOCS UNDER REVIEW"
224           echo "###########################"
225           echo
226
227           gs_base="artifacts.opnfv.org/$PROJECT/review"
228           gs_path="$gs_base/$GERRIT_CHANGE_NUMBER"
229           local_path="upload/$GERRIT_CHANGE_NUMBER"
230
231           mkdir -p upload
232           mv docs/_build/html/ "$local_path"
233           gsutil -m cp -r "$local_path" "gs://$gs_base"
234
235           gsutil -m setmeta \
236               -h "Content-Type:text/html" \
237               -h "Cache-Control:private, max-age=0, no-transform" \
238               "gs://$gs_path"/**.html > /dev/null 2>&1
239
240           echo "Document link(s):" >> gerrit_comment.txt
241           find "$local_path" | grep -e 'index.html$' -e 'pdf$' | \
242               sed -e "s|^$local_path|    http://$gs_path|" >> gerrit_comment.txt
243
244 # To take advantage of this macro, have your build write
245 # out the file 'gerrit_comment.txt' with information to post
246 # back to gerrit and include this macro in the list of builders.
247 - builder:
248     name: report-build-result-to-gerrit
249     builders:
250       - shell: |
251           #!/bin/bash
252           set -o errexit
253           set -o pipefail
254           set -o xtrace
255           export PATH=$PATH:/usr/local/bin/
256           if [[ -e gerrit_comment.txt ]] ; then
257               echo
258               echo "posting review comment to gerrit..."
259               echo
260               cat gerrit_comment.txt
261               echo
262               ssh -p 29418 gerrit.opnfv.org \
263                   "gerrit review -p $GERRIT_PROJECT \
264                    -m '$(cat gerrit_comment.txt)' \
265                    $GERRIT_PATCHSET_REVISION \
266                    --notify NONE"
267           fi
268
269 - builder:
270     name: remove-old-docs-from-opnfv-artifacts
271     builders:
272       - shell: |
273           #!/bin/bash
274           set -o errexit
275           set -o pipefail
276           set -o xtrace
277           export PATH=$PATH:/usr/local/bin/
278
279           [[ $GERRIT_CHANGE_NUMBER =~ .+ ]]
280
281           gs_path="artifacts.opnfv.org/$PROJECT/review/$GERRIT_CHANGE_NUMBER"
282
283           if gsutil ls "gs://$gs_path" > /dev/null 2>&1 ; then
284               echo
285               echo "Deleting Out-of-dated Documents..."
286               gsutil -m rm -r "gs://$gs_path"
287           fi
288           gs_path="artifacts.opnfv.org/review/$GERRIT_CHANGE_NUMBER"
289
290           if gsutil ls "gs://$gs_path" > /dev/null 2>&1 ; then
291               echo
292               echo "Deleting Out-of-dated Documents..."
293               gsutil -m rm -r "gs://$gs_path"
294           fi
295
296 - builder:
297     name: lint-python-code
298     builders:
299       - shell: |
300           #!/bin/bash
301           set -o errexit
302           set -o pipefail
303           set -o xtrace
304           export PATH=$PATH:/usr/local/bin/
305
306           virtualenv -p python2.7 $WORKSPACE/releng_flake8
307           source $WORKSPACE/releng_flake8/bin/activate
308
309           # install python packages
310           pip install "flake8==2.6.2"
311
312           # generate and upload lint log
313           echo "Running flake8 code on $PROJECT ..."
314
315           # Get number of flake8 violations. If none, this will be an
316           # empty string: ""
317           FLAKE_COUNT="$(find . \
318               -path './releng_flake8' -prune -o \
319               -path './.tox' -prune -o \
320               -type f -name "*.py" -print | \
321               xargs flake8 --exit-zero -qq --count 2>&1)"
322
323           # Ensure we start with a clean environment
324           rm -f lint.log
325
326           if [ ! -z $FLAKE_COUNT ]; then
327             echo "Flake8 Violations: $FLAKE_COUNT" > lint.log
328             find . \
329                 -path './releng_flake8' -prune -o \
330                 -path './.tox' -prune -o \
331                 -type f -name "*.py" -print | \
332                 xargs flake8 --exit-zero --first >> violation.log
333             SHOWN=$(wc -l violation.log | cut -d' ' -f1)
334             echo -e "First $SHOWN shown\n---" >> lint.log
335             cat violation.log >> lint.log
336             sed -r -i '4,$s/^/ /g' lint.log
337             rm violation.log
338           fi
339
340           deactivate
341
342 - builder:
343     name: report-lint-result-to-gerrit
344     builders:
345       - shell: |
346           #!/bin/bash
347           set -o errexit
348           set -o pipefail
349           set -o xtrace
350           export PATH=$PATH:/usr/local/bin/
351
352           # If no violations were found, no lint log will exist.
353           if [[ -e lint.log ]] ; then
354               echo -e "\nposting linting report to gerrit...\n"
355
356               cat lint.log
357               echo
358
359               ssh -p 29418 gerrit.opnfv.org \
360                   "gerrit review -p $GERRIT_PROJECT \
361                    -m \"$(cat lint.log)\" \
362                    $GERRIT_PATCHSET_REVISION \
363                    --notify NONE"
364
365               exit 1
366           fi
367
368 - builder:
369     name: upload-review-docs
370     builders:
371       - upload-under-review-docs-to-opnfv-artifacts
372       - report-build-result-to-gerrit
373
374 - builder:
375     name: check-bash-syntax
376     builders:
377       - shell: "find . -name '*.sh' | xargs bash -n"
378
379 - builder:
380     name: lint-yaml-code
381     builders:
382       - shell: |
383           #!/bin/bash
384           set -o errexit
385           set -o pipefail
386           set -o xtrace
387           export PATH=$PATH:/usr/local/bin/
388
389           # install python packages
390           sudo pip install "yamllint==1.8.2"
391
392           # generate and upload lint log
393           echo "Running yaml code on $PROJECT ..."
394
395           # Get list of yaml files
396           YAML_FILES=$(git --no-pager diff --diff-filter=MCRAT --name-only HEAD^1 | egrep "ya?ml$") || true
397
398           #If YAML_FILES is none exit with 0
399           if [ -z "$YAML_FILES" ]; then
400               exit 0
401           fi
402
403           # Ensure we start with a clean environment
404           rm -f yaml-violation.log lint.log
405
406           # Yamllint files only in patchset
407           for yamlfile in $YAML_FILES; do
408             yamllint $yamlfile >> yaml-violation.log || true
409           done
410
411           if [ -s "yaml-violation.log" ]; then
412             SHOWN=$(grep -c -v "^$" yaml-violation.log)
413             echo -e "First $SHOWN shown\n---" > lint.log
414             cat yaml-violation.log >> lint.log
415             sed -r -i '4,$s/^/ /g' lint.log
416           fi
417
418 - builder:
419     name: clean-workspace
420     builders:
421       - shell: |
422           #!/bin/bash
423           set -o errexit
424           set -o nounset
425           set -o pipefail
426           sudo /bin/rm -rf "$WORKSPACE"
427
428 - builder:
429     name: clean-workspace-log
430     builders:
431       - shell: |
432           find $WORKSPACE -type f -name '*.log' | xargs rm -f
433
434 - publisher:
435     name: archive-artifacts
436     publishers:
437       - archive:
438           artifacts: '{artifacts}'
439           allow-empty: true
440           fingerprint: true
441           latest-only: true
442
443 - publisher:
444     name: publish-coverage
445     publishers:
446       - cobertura:
447           report-file: "coverage.xml"
448           only-stable: "true"
449           health-auto-update: "false"
450           stability-auto-update: "false"
451           zoom-coverage-chart: "true"
452           targets:
453             - files:
454                 healthy: 10
455                 unhealthy: 20
456                 failing: 30
457             - method:
458                 healthy: 50
459                 unhealthy: 40
460                 failing: 30
461
462 # The majority of the email-ext plugin options are set to the default
463 # for this macro so they can be managed through Jenkins' global
464 # settings.
465 - publisher:
466     name: email-jenkins-admins-on-failure
467     publishers:
468       - email-ext:
469           content-type: text
470           attach-build-log: true
471           compress-log: true
472           always: false
473           failure: true
474           send-to:
475             - recipients
476
477 # Email PTL publishers
478 - email_ptl_defaults: &email_ptl_defaults
479     name: 'email_ptl_defaults'
480     content-type: text
481     attach-build-log: true
482     attachments: '*.log'
483     compress-log: true
484     always: true
485     subject: '{subject}'
486
487 - publisher: &email_apex_ptl_defaults
488     name: 'email-apex-ptl'
489     publishers:
490       - email-ext:
491           <<: *email_ptl_defaults
492           recipients: >
493             trozet@redhat.com
494 - publisher:
495     name: 'email-apex-os-net-config-ptl'
496     <<: *email_apex_ptl_defaults
497 - publisher:
498     name: 'email-apex-puppet-tripleo-ptl'
499     <<: *email_apex_ptl_defaults
500 - publisher:
501     name: 'email-apex-tripleo-heat-templates-ptl'
502     <<: *email_apex_ptl_defaults
503
504 - publisher:
505     name: 'email-armband-ptl'
506     publishers:
507       - email-ext:
508           <<: *email_ptl_defaults
509           recipients: >
510             bob.monkman@arm.com
511
512 - publisher:
513     name: 'email-auto-ptl'
514     publishers:
515       - email-ext:
516           <<: *email_ptl_defaults
517           recipients: >
518             tina.tsou@arm.com
519
520 - publisher:
521     name: 'email-availability-ptl'
522     publishers:
523       - email-ext:
524           <<: *email_ptl_defaults
525           recipients: >
526             fuqiao@chinamobile.com
527
528 - publisher:
529     name: 'email-bamboo-ptl'
530     publishers:
531       - email-ext:
532           <<: *email_ptl_defaults
533           recipients: >
534             donaldh@cisco.com
535
536 - publisher:
537     name: 'email-barometer-ptl'
538     publishers:
539       - email-ext:
540           <<: *email_ptl_defaults
541           recipients: >
542             aasmith@redhat.com
543
544 - publisher:
545     name: 'email-bottlenecks-ptl'
546     publishers:
547       - email-ext:
548           <<: *email_ptl_defaults
549           recipients: >
550             gabriel.yuyang@huawei.com
551
552 - publisher:
553     name: 'email-calipso-ptl'
554     publishers:
555       - email-ext:
556           <<: *email_ptl_defaults
557           recipients: >
558             korlev@cisco.com
559
560 - publisher:
561     name: 'email-clover-ptl'
562     publishers:
563       - email-ext:
564           <<: *email_ptl_defaults
565           recipients: >
566             stephen.wong1@huawei.com
567
568 - publisher: &email_compass4nfv_ptl_defaults
569     name: 'email-compass4nfv-ptl'
570     publishers:
571       - email-ext:
572           <<: *email_ptl_defaults
573           recipients: >
574             chigang@huawei.com
575 - publisher:
576     name: 'email-compass-containers-ptl'
577     <<: *email_compass4nfv_ptl_defaults
578
579 - publisher:
580     name: 'email-conductor-ptl'
581     publishers:
582       - email-ext:
583           <<: *email_ptl_defaults
584           recipients: >
585             limingjiang@huawei.com
586
587 - publisher:
588     name: 'email-container4nfv-ptl'
589     publishers:
590       - email-ext:
591           <<: *email_ptl_defaults
592           recipients: >
593             jiaxuan@chinamobile.com
594
595 - publisher:
596     name: 'email-copper-ptl'
597     publishers:
598       - email-ext:
599           <<: *email_ptl_defaults
600           recipients: >
601             aimeeu.opensource@gmail.com
602
603 - publisher:
604     name: 'email-cperf-ptl'
605     publishers:
606       - email-ext:
607           <<: *email_ptl_defaults
608           recipients: >
609             matt.welch@intel.com
610
611 - publisher:
612     name: 'email-daisy-ptl'
613     publishers:
614       - email-ext:
615           <<: *email_ptl_defaults
616           recipients: >
617             hu.zhijiang@zte.com.cn
618
619 - publisher:
620     name: 'email-doctor-ptl'
621     publishers:
622       - email-ext:
623           <<: *email_ptl_defaults
624           recipients: >
625             r-mibu@cq.jp.nec.com
626
627 - publisher:
628     name: 'email-domino-ptl'
629     publishers:
630       - email-ext:
631           <<: *email_ptl_defaults
632           recipients: >
633             ulas.kozat@huawei.com
634
635 - publisher:
636     name: 'email-dovetail-ptl'
637     publishers:
638       - email-ext:
639           <<: *email_ptl_defaults
640           recipients: >
641             hongbo.tianhongbo@huawei.com
642
643 - publisher:
644     name: 'email-dpacc-ptl'
645     publishers:
646       - email-ext:
647           <<: *email_ptl_defaults
648           recipients: >
649             denglingli@chinamobile.com
650
651 - publisher:
652     name: 'email-enfv-ptl'
653     publishers:
654       - email-ext:
655           <<: *email_ptl_defaults
656           recipients: >
657             JBuchanan@advaoptical.com
658
659 - publisher:
660     name: 'email-escalator-ptl'
661     publishers:
662       - email-ext:
663           <<: *email_ptl_defaults
664           recipients: >
665             kong.wei2@zte.com.cn
666
667 - publisher:
668     name: 'email-fastpathmetrics-ptl'
669     publishers:
670       - email-ext:
671           <<: *email_ptl_defaults
672           recipients: >
673             maryam.tahhan@intel.com
674
675 - publisher:
676     name: 'email-fds-ptl'
677     publishers:
678       - email-ext:
679           <<: *email_ptl_defaults
680           recipients: >
681             fbrockne@cisco.com
682
683 - publisher:
684     name: 'email-fuel-ptl'
685     publishers:
686       - email-ext:
687           <<: *email_ptl_defaults
688           recipients: >
689             gelkinbard@mirantis.com
690
691 - publisher:
692     name: 'email-functest-ptl'
693     publishers:
694       - email-ext:
695           <<: *email_ptl_defaults
696           recipients: >
697             cedric.ollivier@orange.com
698
699 - publisher:
700     name: 'email-ipv6-ptl'
701     publishers:
702       - email-ext:
703           <<: *email_ptl_defaults
704           recipients: >
705             bh526r@att.com
706
707 - publisher:
708     name: 'email-joid-ptl'
709     publishers:
710       - email-ext:
711           <<: *email_ptl_defaults
712           recipients: >
713             artur.tyloch@canonical.com
714
715 - publisher:
716     name: 'email-kvmfornfv-ptl'
717     publishers:
718       - email-ext:
719           <<: *email_ptl_defaults
720           recipients: >
721             raghuveer.reddy@intel.com
722
723 - publisher:
724     name: 'email-models-ptl'
725     publishers:
726       - email-ext:
727           <<: *email_ptl_defaults
728           recipients: >
729             bs3131@att.com
730
731 - publisher:
732     name: 'email-moon-ptl'
733     publishers:
734       - email-ext:
735           <<: *email_ptl_defaults
736           recipients: >
737             ruan.he@orange.com
738
739 - publisher:
740     name: 'email-multisite-ptl'
741     publishers:
742       - email-ext:
743           <<: *email_ptl_defaults
744           recipients: >
745             joehuang@huawei.com
746
747 - publisher:
748     name: 'email-netready-ptl'
749     publishers:
750       - email-ext:
751           <<: *email_ptl_defaults
752           recipients: >
753             georg.kunz@ericsson.com
754
755 - publisher:
756     name: 'email-nfvbench-ptl'
757     publishers:
758       - email-ext:
759           <<: *email_ptl_defaults
760           recipients: >
761             ahothan@cisco.com
762
763 - publisher:
764     name: 'email-octopus-ptl'
765     publishers:
766       - email-ext:
767           <<: *email_ptl_defaults
768           recipients: >
769             ulrich.kleber@huawei.com
770
771 - publisher:
772     name: 'email-onosfw-ptl'
773     publishers:
774       - email-ext:
775           <<: *email_ptl_defaults
776           recipients: >
777             su.wei@huawei.com
778
779 - publisher:
780     name: 'email-openretriever-ptl'
781     publishers:
782       - email-ext:
783           <<: *email_ptl_defaults
784           recipients: >
785             jiaxuan@chinamobile.com
786
787 - publisher:
788     name: 'email-opera-ptl'
789     publishers:
790       - email-ext:
791           <<: *email_ptl_defaults
792           recipients: >
793             Yingjun.li@huawei.com
794
795 - publisher:
796     name: 'email-opnfvdocs-ptl'
797     publishers:
798       - email-ext:
799           <<: *email_ptl_defaults
800           recipients: >
801             sofia.wallin@ericsson.com
802
803 - publisher:
804     name: 'email-orchestra-ptl'
805     publishers:
806       - email-ext:
807           <<: *email_ptl_defaults
808           recipients: >
809             giuseppe.carella@fokus.fraunhofer.de
810
811 - publisher:
812     name: 'email-ovn4nfv-ptl'
813     publishers:
814       - email-ext:
815           <<: *email_ptl_defaults
816           recipients: >
817             trinath.somanchi@gmail.com
818
819 - publisher:
820     name: 'email-ovno-ptl'
821     publishers:
822       - email-ext:
823           <<: *email_ptl_defaults
824           recipients: >
825             wsmackie@juniper.net
826
827 - publisher:
828     name: 'email-ovsnfv-ptl'
829     publishers:
830       - email-ext:
831           <<: *email_ptl_defaults
832           recipients: >
833             MarkD.Graymark.d.gray@intel.com
834
835 - publisher:
836     name: 'email-parser-ptl'
837     publishers:
838       - email-ext:
839           <<: *email_ptl_defaults
840           recipients: >
841             shang.xiaodong@zte.com.cn
842
843 - publisher: &email_pharos_ptl_defaults
844     name: 'email-pharos-ptl'
845     publishers:
846       - email-ext:
847           <<: *email_ptl_defaults
848           recipients: >
849             jack.morgan@intel.com
850 - publisher:
851     name: 'email-pharos-tools-ptl'
852     <<: *email_pharos_ptl_defaults
853
854 - publisher:
855     name: 'email-promise-ptl'
856     publishers:
857       - email-ext:
858           <<: *email_ptl_defaults
859           recipients: >
860             kunzmann@docomolab-euro.com
861
862 - publisher:
863     name: 'email-qtip-ptl'
864     publishers:
865       - email-ext:
866           <<: *email_ptl_defaults
867           recipients: >
868             wu.zhihui1@zte.com.cn
869
870 - publisher: &email_releng_ptl_defaults
871     name: 'email-releng-ptl'
872     publishers:
873       - email-ext:
874           <<: *email_ptl_defaults
875           recipients: >
876             fatih.degirmenci@ericsson.com
877 - publisher:
878     name: 'email-releng-anteater-ptl'
879     <<: *email_releng_ptl_defaults
880 - publisher:
881     name: 'email-releng-testresults-ptl'
882     publishers:
883       - email-ext:
884           <<: *email_ptl_defaults
885           recipients: >
886             fatih.degirmenci@ericsson.com
887             feng.xiaowei@zte.com.cn
888 - publisher:
889     name: 'email-releng-utils-ptl'
890     <<: *email_releng_ptl_defaults
891 - publisher:
892     name: 'email-releng-xci-ptl'
893     <<: *email_releng_ptl_defaults
894
895 - publisher:
896     name: 'email-samplevnf-ptl'
897     publishers:
898       - email-ext:
899           <<: *email_ptl_defaults
900           recipients: >
901             deepak.s@intel.com
902
903 - publisher:
904     name: 'email-sdnvpn-ptl'
905     publishers:
906       - email-ext:
907           <<: *email_ptl_defaults
908           recipients: >
909             tim.irnich@ericsson.com
910
911 - publisher:
912     name: 'email-securityscanning-ptl'
913     publishers:
914       - email-ext:
915           <<: *email_ptl_defaults
916           recipients: >
917             lhinds@redhat.com
918
919 - publisher:
920     name: 'email-sfc-ptl'
921     publishers:
922       - email-ext:
923           <<: *email_ptl_defaults
924           recipients: >
925             ManuelBuilmbuil@suse.com
926
927 - publisher:
928     name: 'email-snaps-ptl'
929     publishers:
930       - email-ext:
931           <<: *email_ptl_defaults
932           recipients: >
933             s.pisarski@cablelabs.com
934
935 - publisher:
936     name: 'email-stor4nfv-ptl'
937     publishers:
938       - email-ext:
939           <<: *email_ptl_defaults
940           recipients: >
941             shane.wang@intel.com
942
943 - publisher:
944     name: 'email-storperf-ptl'
945     publishers:
946       - email-ext:
947           <<: *email_ptl_defaults
948           recipients: >
949             mark.beierl@emc.com
950
951 - publisher:
952     name: 'email-ves-ptl'
953     publishers:
954       - email-ext:
955           <<: *email_ptl_defaults
956           recipients: >
957             bryan.sullivan@att.com
958
959 - publisher:
960     name: 'email-vswitchperf-ptl'
961     publishers:
962       - email-ext:
963           <<: *email_ptl_defaults
964           recipients: >
965             sridhar.rao@spirent.com
966
967 - publisher:
968     name: 'email-yardstick-ptl'
969     publishers:
970       - email-ext:
971           <<: *email_ptl_defaults
972           recipients: >
973             ross.b.brattain@intel.com