#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License.  You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#

github:
  description: "Apache Beam is a unified programming model for Batch and Streaming"
  homepage: https://beam.apache.org/

jenkins:
  github_whitelist:
    - 11moon11
    - aaltay
    - acrites
    - ageron
    - aijamalnk
    - akedin
    - alanmyrvold
    - alexvanboxel
    - amaliujia
    - andrefaraujo
    - angoenka
    - anguillanneuf
    - angulartist
    - apilloud
    - appaquet
    - Ardagan
    - aromanenko-dev
    - aryann
    - blackml
    - bmv126
    - boyuanzz
    - bradgwest
    - brunocvcunha
    - bumblebee-coming
    - chadrik
    - chamikaramj
    - charithe
    - ChethanUK
    - chunyang
    - ClaireMcGinty
    - cmachgodaddy
    - cmm08
    - coheigea
    - CraigChambersG
    - DAAC
    - davidcavazos
    - davidyan74
    - dependabot[bot]
    - derekunimarket
    - dmvk
    - dpcollins-google
    - drobert
    - dsdinter
    - dsnet
    - ecanzonieri
    - echauchot
    - elharo
    - gxercavins
    - Hannah-Jiang
    - happygiraffe
    - henryken
    - htyleo
    - HuangLED
    - ianlancetaylor
    - ibzib
    - iemejia
    - ihji
    - iht
    - jackwhelpton
    - jagthebeetle
    - jbartok
    - je-ik
    - jesusrv1103
    - jhalaria
    - jklukas
    - Jofre
    - kamilwu
    - KangZhiDong
    - kanterov
    - kennknowles
    - KevinGG
    - kkucharc
    - kmjung
    - kyle-winkelman
    - lazylynx
    - leonardoam
    - lgajowy
    - lhaiesp
    - liumomo315
    - lloigor
    - lostluck
    - Luis-MX
    - lukecwik
    - markflyhigh
    - MattMorgis
    - milantracy
    - mrociorg
    - mwalenia
    - mxm
    - nahuellofeudo
    - nielm
    - olegbonar
    - ostrokach
    - ozturkberkay
    - pabloem
    - pawelpasterz
    - Pehat
    - pgudlani
    - piter75
    - Primevenn
    - ra1861
    - rahul8383
    - rainwoodman
    - rakeshcusat
    - rehmanmuradali
    - reuvenlax
    - riazela
    - robertwb
    - robinyqiu
    - RochesterinNYC
    - rohdesamuel
    - rosetn
    - RusOr10n
    - RyanBerti
    - RyanSkraba
    - sadovnychyi
    - salmanVD
    - samaitra
    - sambvfx
    - saulchavez93
    - scwhittle
    - sgrj
    - shusso
    - snallapa
    - sorensenjs
    - soyrice
    - stefanondisponibile
    - stephydx
    - stevekoonce
    - steveniemitz
    - sunjincheng121
    - suztomo
    - tamanobi
    - tchiarato
    - the1plummie
    - TheNeuralBit
    - TimvdLippe
    - ttanay
    - tudorm
    - tvalentyn
    - tweise
    - tysonjh
    - udim
    - vectorijk
    - violalyu
    - wcn3
    - wintermelons
    - xubii
    - y1chi
    - yifanzou
    - yirutang
    - youngoli
    - ziel

