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

name: Bug report
description: Problems with the software
title: "[Bug] "
labels: ["type/bug"]
body:
  - type: markdown
    attributes:
      value: |
        Thank you very much for your feedback!

        For suggestions or help, please consider:
        1. [User Mail List](mailto:users@pulsar.apache.org) ([subscribe](mailto:users-subscribe@pulsar.apache.org));
        2. [Github Discussion](https://github.com/apache/pulsar/discussions).
  - type: checkboxes
    attributes:
      label: Search before asking
      description: >
        Please search [issues](https://github.com/apache/pulsar/issues) to check if your issue has already been reported.
      options:
        - label: >
            I searched in the [issues](https://github.com/apache/pulsar/issues) and found nothing similar.
          required: true
  - type: textarea
    attributes:
      label: Version
      description: >
        Please provide the OS and Pulsar version you are using. If you are using the master branch, please provide the commit id.
    validations:
      required: true
  - type: textarea
    attributes:
      label: Minimal reproduce step
      description: Please try to give reproducing steps to facilitate quick location of the problem.
    validations:
      required: true
  - type: textarea
    attributes:
      label: What did you expect to see?
    validations:
      required: true
  - type: textarea
    attributes:
      label: What did you see instead?
    validations:
      required: true
  - type: textarea
    attributes:
      label: Anything else?
  - type: checkboxes
    attributes:
      label: Are you willing to submit a PR?
      description: >
        We look forward to the community of developers or users helping solve Pulsar problems together. If you are willing to submit a PR to fix this problem, please check the box.
      options:
        - label: I'm willing to submit a PR!
  - type: markdown
    attributes:
      value: "Thanks for completing our form!"
