# 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.
#
# ATC Collaborators for July 2022
# Collaborators are contributors, other than committers, who have had 2 or more Issue-closing Pull Requests merged
# in the past 31 days. If you want to be an Apache Traffic Control collaborator:
# 1. Read our contribution guidelines at https://github.com/apache/trafficcontrol/blob/master/CONTRIBUTING.md
# 2. Find an Issue to work on: https://github.com/apache/trafficcontrol/issues?q=is:issue+is:open+label:"good+first+issue"+no:assignee
# 3. Get coding! For questions on how to contribute, you can reach the ATC community on
#   - The #traffic-control channel of the ASF Slack (invite link: https://s.apache.org/tc-slack-request)
#   - The ATC Development mailing list: https://trafficcontrol.apache.org/mailing_lists
github:
  collaborators:
  - ericholguin
  description: Apache Traffic Control is an Open Source implementation of a Content
    Delivery Network
  features:
    issues: true
    projects: true
    wiki: true
  homepage: https://trafficcontrol.apache.org/
  labels:
  - apache
  - trafficcontrol
  - cdn
  - contentdelivery
  - hacktoberfest
