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

# note: documentation can be found here https://cwiki.apache.org/confluence/display/INFRA/Git+-+.asf.yaml+features

github:
  description: PLC4X The Industrial IoT adapter
  homepage: https://plc4x.apache.org/

  dependabot_alerts:  true
  dependabot_updates: false

  labels:
    - java
    - cpp
    - c
    - go
    - python
    - net
    - ab
    - ads
    - ethernetip
    - firmata
    - knx
    - modbus
    - opcua
    - s7
    - siemens
    - bacnet
    - can
    - iot

  features:
    wiki: true
    issues: true
    projects: true

  enabled_merge_buttons:
    squash: true
    merge: false
    rebase: false

  del_branch_on_merge: true

  # Attempt to make the auto-generated github emails more easily readable in email clients.
  custom_subjects:
    new_pr: "[PR] {title} ({repository})"
    close_pr: "Re: [PR] {title} ({repository})"
    comment_pr: "Re: [PR] {title} ({repository})"
    diffcomment: "Re: [PR] {title} ({repository})"
    merge_pr: "Re: [PR] {title} ({repository})"
    new_issue: "[I] {title} ({repository})"
    comment_issue: "Re: [I] {title} ({repository})"
    close_issue: "Re: [I] {title} ({repository})"
    catchall: "[GH] {title} ({repository})"
    new_discussion: "[D] {title} ({repository})"
    edit_discussion: "Re: [D] {title} ({repository})"
    close_discussion: "Re: [D] {title} ({repository})"
    close_discussion_with_comment: "Re: [D] {title} ({repository})"
    reopen_discussion: "Re: [D] {title} ({repository})"
    new_comment_discussion: "Re: [D] {title} ({repository})"
    edit_comment_discussion: "Re: [D] {title} ({repository})"
    delete_comment_discussion: "Re: [D] {title} ({repository})"

notifications:
  commits:              commits@plc4x.apache.org
  issues:               dev@plc4x.apache.org
  discussions:          dev@plc4x.apache.org
  pullrequests_status:  dev@plc4x.apache.org
  pullrequests_comment: dev@plc4x.apache.org
  # Send dependabot PRs to commits@ instead
  pullrequests_bot_dependabot: commits@plc4x.apache.org
