#
# 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 BookKeeper - a scalable, fault tolerant and low latency storage service optimized for append-only workloads"
  homepage: https://bookkeeper.apache.org/
  labels:
    - apache
    - bookkeeper
    - big-data
    - distributed-log
    - distributed-systems
    - wal
  features:
    # Enable wiki for documentation
    wiki: false
    # Enable issues management
    issues: true
    # Enable projects for project management boards
    projects: true
  enabled_merge_buttons:
    # enable squash button:
    squash:  true
    # disable merge button:
    merge:   false
    # disable rebase button:
    rebase:  false
  protected_branches:
    master:
      required_status_checks:
        # strict means "Require branches to be up to date before merging".
        strict: false
        # Contexts are the names of checks that must pass.
        # See ./github/workflows/README.md for more documentation on this list.
        contexts:
          - BookKeeper CI checks completed

      required_pull_request_reviews:
        dismiss_stale_reviews: false
        require_code_owner_reviews: true
        required_approving_review_count: 1

      # squash or rebase must be allowed in the repo for this setting to be set to true.
      required_linear_history: true

      required_signatures: false

    # The following branch protections only ensure that force pushes are not allowed
    branch-4.0: {}
    branch-4.1: {}
    branch-4.2: {}
    branch-4.3: {}
    branch-4.4: {}
    branch-4.5: {}
    branch-4.6: {}
    branch-4.7: {}
    branch-4.8: {}
    branch-4.9: {}
    branch-4.10: {}
    branch-4.11: {}
    branch-4.12: {}
    branch-4.13: {}
    branch-4.14: {}
    branch-4.15: {}
    branch-4.16: {}

notifications:
  commits:      commits@bookkeeper.apache.org
  issues:       commits@bookkeeper.apache.org
  pullrequests: commits@bookkeeper.apache.org
  discussions:  dev@bookkeeper.apache.org
  jira_options: link label
