#
# 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 Doris is an easy-to-use, high performance and unified analytics database.
  homepage: https://doris.apache.org
  labels:
    - real-time
    - query-engine
    - olap
    - lakehouse
    - etl
    - elt
    - sql
    - snowflake
    - redshift
    - bigquery
    - hive
    - iceberg
    - hudi
    - delta-lake
    - spark
    - hadoop
    - dbt
    - database
  enabled_merge_buttons:
    squash:  true
    merge:   false
    rebase:  false
  protected_branches:
    master:
      required_status_checks:
        strict: false
        contexts:
          - License Check
          - Clang Formatter
          - CheckStyle
          - P0 Regression (Doris Regression)
          - External Regression (Doris External Regression)
          - cloud_p0 (Doris Cloud Regression)
          - vault_p0 (Doris Cloud Regression)
          - FE UT (Doris FE UT)
          - BE UT (Doris BE UT)
          - Build Broker
          - Build Third Party Libraries (Linux)
          - Build Third Party Libraries (macOS)
          - Build Third Party Libraries (macOS-arm64)
          - COMPILE (DORIS_COMPILE)
          - Need_2_Approval
          - Cloud UT (Doris Cloud UT)
          - performance (Doris Performance)
      required_pull_request_reviews:
        dismiss_stale_reviews: true
        require_code_owner_reviews: true
        required_approving_review_count: 1
    branch-3.0:
      required_status_checks:
        strict: false
        contexts:
          - License Check
          - Clang Formatter
          - CheckStyle
          - Build Broker
          - Build Third Party Libraries (Linux)
          - FE UT (Doris FE UT)
          - BE UT (Doris BE UT)
          - Cloud UT (Doris Cloud UT)
          - COMPILE (DORIS_COMPILE)
          - P0 Regression (Doris Regression)
          - External Regression (Doris External Regression)
          - cloud_p0 (Doris Cloud Regression)
          - vault_p0 (Doris Cloud Regression)
      required_pull_request_reviews:
        require_code_owner_reviews: true
        required_approving_review_count: 1
        dismiss_stale_reviews: true
    branch-2.1:
      required_status_checks:
        strict: false
        contexts:
          - License Check
          - Clang Formatter
          - CheckStyle
          - Build Broker
          - Build Third Party Libraries (Linux)
          - COMPILE (DORIS_COMPILE)
          - External Regression (Doris External Regression)
          - FE UT (Doris FE UT)
          - BE UT (Doris BE UT)
          - P0 Regression (Doris Regression)
      required_pull_request_reviews:
        require_code_owner_reviews: true
        required_approving_review_count: 1
        dismiss_stale_reviews: true
    branch-2.0:
      required_status_checks:
        strict: false
        contexts:
          - License Check
          - CheckStyle
          - P0 Regression (Doris Regression)
          - External Regression (Doris External Regression)
          - FE UT (Doris FE UT)
          - BE UT (Doris BE UT)
          - Build Broker
          - Build Third Party Libraries (Linux)
          - Build Third Party Libraries (macOS)
          - COMPILE (DORIS_COMPILE)
      required_pull_request_reviews:
        dismiss_stale_reviews: true
        required_approving_review_count: 1
  collaborators:
    - Yukang-Lian
    - TangSiyang2001
    - freemandealer
    - shuke987
    - wm1581066
    - doris-robot
    - echo-hhj
    - yuanyuan8983
    - yz-jayhua
    - ixzc
notifications:
  pullrequests_status:  commits@doris.apache.org
