# ----------------------------------------------------------------------------
# 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: "Use Apache Causeway™ to rapidly develop domain-driven apps or modular monoliths in Java, on top of the Spring Boot platform. Write your business logic in entities, domain services or view models, and the framework dynamically generates a representation of that domain model as a webapp, GraphQL or RESTful API. For prototyping or production."
  homepage: https://causeway.apache.org/
  labels:
    - java
    - spring-boot
    - web-framework
    - domain-driven-design
    - ddd
    - rapid-application-development
    - rad
    - naked-objects
    - restful-objects


#
# from thread on ASF mailing list:
#
#  "if you’re using GitHub issues for discussions like this, ensure the .asf.yml is configured to have these forwarded to the dev-list (or one of your apache lists).
#   Only this way will it be archived and searchable."
#
#   https://cwiki.apache.org/confluence/display/INFRA/Git+-+.asf.yaml+features#Git.asf.yamlfeatures-Notificationsettingsforrepositories
#
#
#
#  "You can fine-tune the subjects of these emails as the default doesn’t seem to allow any email client I know to thread them:
#
#   https://cwiki.apache.org/confluence/display/INFRA/Git+-+.asf.yaml+features#Git.asf.yamlfeatures-CustomsubjectlinesforGitHubevents
#
#
#
#  Example from PLC4X project, solving readability and threading problems:
#
#  (copied from https://raw.githubusercontent.com/apache/plc4x/develop/.asf.yaml)
#
#
#
#  dependabot_alerts:  true
#  dependabot_updates: false
#
#  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})"
#
#notifications:
#  commits:              commits@causeway.apache.org
#  issues:               dev@causeway.apache.org
#  pullrequests_status:  dev@causeway.apache.org
#  pullrequests_comment: dev@causeway.apache.org
#  # Send dependabot PRs to commits@ instead
#  pullrequests_bot_dependabot: commits@causeway.apache.org
#
