#
#    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
#  
#       https://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 JDO project"
  homepage: https://db.apache.org/jdo
  labels:
    - db
    - jdo
    - nosql
    - jpa
    - jta
    - api
    - database
    - orm
    - apache
    - java

  enabled_merge_buttons:
    # disable merge button:
    merge:   false
    # enable squash button:
    squash:  true
    # enable rebase button:
    rebase:  true

  protected_branches:
    # rules for the 'main' branch
    main:
      # disallows pushing merge commits to the branch
      required_linear_history: true

      required_status_checks:
        # strict means "Require branches to be up to date before merging".
        strict: false

notifications:
  commits:      jdo-commits@db.apache.org
  issues:       jdo-dev@db.apache.org
  pullrequests: jdo-dev@db.apache.org
  jira_options: link label
