#
#    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 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
