From 6a46d66a56cf0919fcd2e947271a4201720999cc Mon Sep 17 00:00:00 2001 From: Benoit Chesneau Date: Fri, 23 Jan 2026 02:13:34 +0100 Subject: [PATCH] github: Add discussions-first triage workflow Redirect issue creation to GitHub Discussions for proper triage: - Disable blank issues, redirect to discussion categories - Add structured discussion templates for bugs, features, questions - Add preapproved issue template for maintainer use only - Update CONTRIBUTING.md to reflect new workflow --- .github/DISCUSSION_TEMPLATE/bug-report.yml | 120 ++++++++++++++++++ .../DISCUSSION_TEMPLATE/feature-request.yml | 74 +++++++++++ .github/DISCUSSION_TEMPLATE/question.yml | 50 ++++++++ .github/ISSUE_TEMPLATE/config.yml | 11 ++ .github/ISSUE_TEMPLATE/preapproved.md | 16 +++ CONTRIBUTING.md | 24 ++-- 6 files changed, 282 insertions(+), 13 deletions(-) create mode 100644 .github/DISCUSSION_TEMPLATE/bug-report.yml create mode 100644 .github/DISCUSSION_TEMPLATE/feature-request.yml create mode 100644 .github/DISCUSSION_TEMPLATE/question.yml create mode 100644 .github/ISSUE_TEMPLATE/config.yml create mode 100644 .github/ISSUE_TEMPLATE/preapproved.md diff --git a/.github/DISCUSSION_TEMPLATE/bug-report.yml b/.github/DISCUSSION_TEMPLATE/bug-report.yml new file mode 100644 index 00000000..4a178f12 --- /dev/null +++ b/.github/DISCUSSION_TEMPLATE/bug-report.yml @@ -0,0 +1,120 @@ +title: "[Bug] " +labels: + - bug + - triage +body: + - type: markdown + attributes: + value: | + Thanks for taking the time to report a bug! + + Before submitting, please: + - Search [existing discussions](https://github.com/benoitc/gunicorn/discussions) and [issues](https://github.com/benoitc/gunicorn/issues) for duplicates + - Check the [FAQ](https://docs.gunicorn.org/en/latest/faq.html) and [documentation](https://docs.gunicorn.org/) + + - type: textarea + id: description + attributes: + label: Bug Description + description: A clear description of what the bug is + placeholder: What happened? What did you expect to happen? + validations: + required: true + + - type: textarea + id: reproduce + attributes: + label: Steps to Reproduce + description: Minimal steps to reproduce the behavior + placeholder: | + 1. Create a simple app with... + 2. Run gunicorn with... + 3. Send request... + 4. See error... + validations: + required: true + + - type: textarea + id: config + attributes: + label: Configuration + description: Your gunicorn configuration (command line or config file) + render: bash + placeholder: | + gunicorn --workers 4 --bind 0.0.0.0:8000 myapp:app + + # Or config file contents + validations: + required: true + + - type: textarea + id: logs + attributes: + label: Logs / Error Output + description: Relevant logs or error messages (use --log-level debug for more detail) + render: text + validations: + required: false + + - type: input + id: gunicorn-version + attributes: + label: Gunicorn Version + description: Output of `gunicorn --version` + placeholder: gunicorn 24.0.0 + validations: + required: true + + - type: input + id: python-version + attributes: + label: Python Version + description: Output of `python --version` + placeholder: Python 3.12.0 + validations: + required: true + + - type: dropdown + id: worker-class + attributes: + label: Worker Class + description: Which worker type are you using? + options: + - sync (default) + - gthread + - gevent + - eventlet + - tornado + - asgi (beta) + - custom + validations: + required: true + + - type: input + id: os + attributes: + label: Operating System + description: Your OS and version + placeholder: Ubuntu 22.04, macOS 14.0, etc. + validations: + required: true + + - type: textarea + id: additional + attributes: + label: Additional Context + description: Any other context about the problem (proxy setup, Docker, etc.) + validations: + required: false + + - type: checkboxes + id: checklist + attributes: + label: Checklist + options: + - label: I have searched existing discussions and issues for duplicates + required: true + - label: I have checked the documentation and FAQ + required: true + - label: I have included the minimal configuration to reproduce this issue + required: true diff --git a/.github/DISCUSSION_TEMPLATE/feature-request.yml b/.github/DISCUSSION_TEMPLATE/feature-request.yml new file mode 100644 index 00000000..56f711ab --- /dev/null +++ b/.github/DISCUSSION_TEMPLATE/feature-request.yml @@ -0,0 +1,74 @@ +title: "[Feature] " +labels: + - enhancement +body: + - type: markdown + attributes: + value: | + Thanks for suggesting a feature! + + Before submitting, please: + - Search [existing discussions](https://github.com/benoitc/gunicorn/discussions) and [issues](https://github.com/benoitc/gunicorn/issues) for similar requests + - Check if this is already possible with existing configuration + + - type: textarea + id: problem + attributes: + label: Problem Statement + description: What problem does this feature solve? What's the use case? + placeholder: I'm trying to... but currently... + validations: + required: true + + - type: textarea + id: solution + attributes: + label: Proposed Solution + description: How would you like this to work? + placeholder: | + I'd like a new setting `--my-option` that... + + Example usage: + gunicorn --my-option value myapp:app + validations: + required: true + + - type: textarea + id: alternatives + attributes: + label: Alternatives Considered + description: What other solutions have you considered or tried? + validations: + required: false + + - type: dropdown + id: scope + attributes: + label: Feature Scope + description: What area does this feature affect? + options: + - Configuration / Settings + - Worker behavior + - HTTP handling + - Logging / Instrumentation + - Signals / Process management + - Documentation + - Other + validations: + required: true + + - type: checkboxes + id: contribution + attributes: + label: Contribution + options: + - label: I would be willing to contribute a PR for this feature + required: false + + - type: checkboxes + id: checklist + attributes: + label: Checklist + options: + - label: I have searched existing discussions and issues for similar requests + required: true diff --git a/.github/DISCUSSION_TEMPLATE/question.yml b/.github/DISCUSSION_TEMPLATE/question.yml new file mode 100644 index 00000000..2e343632 --- /dev/null +++ b/.github/DISCUSSION_TEMPLATE/question.yml @@ -0,0 +1,50 @@ +title: "[Question] " +body: + - type: markdown + attributes: + value: | + Have a question about Gunicorn? + + Before asking, please check: + - [Documentation](https://docs.gunicorn.org/) + - [FAQ](https://docs.gunicorn.org/en/latest/faq.html) + - [Settings Reference](https://docs.gunicorn.org/en/latest/settings.html) + - [Existing discussions](https://github.com/benoitc/gunicorn/discussions) + + - type: textarea + id: question + attributes: + label: Question + description: What would you like to know? + validations: + required: true + + - type: textarea + id: context + attributes: + label: Context + description: Any relevant context (your setup, what you've tried, etc.) + placeholder: | + I'm running gunicorn with... + I've tried... + validations: + required: false + + - type: textarea + id: config + attributes: + label: Configuration (if relevant) + description: Your gunicorn configuration + render: bash + validations: + required: false + + - type: checkboxes + id: checklist + attributes: + label: Checklist + options: + - label: I have checked the documentation and FAQ + required: true + - label: I have searched existing discussions + required: true diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 00000000..2401ed30 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1,11 @@ +blank_issues_enabled: false +contact_links: + - name: Bug Report + url: https://github.com/benoitc/gunicorn/discussions/new?category=q-a + about: Report a bug or unexpected behavior (starts as a discussion for triage) + - name: Feature Request + url: https://github.com/benoitc/gunicorn/discussions/new?category=ideas + about: Suggest a new feature or improvement + - name: Question + url: https://github.com/benoitc/gunicorn/discussions/new?category=q-a + about: Ask a question about configuration, deployment, or usage diff --git a/.github/ISSUE_TEMPLATE/preapproved.md b/.github/ISSUE_TEMPLATE/preapproved.md new file mode 100644 index 00000000..ec428a7e --- /dev/null +++ b/.github/ISSUE_TEMPLATE/preapproved.md @@ -0,0 +1,16 @@ +--- +name: Pre-Discussed and Approved Topics +about: Only for topics already discussed and approved in GitHub Discussions +title: '' +labels: '' +assignees: '' +--- + +**Only for topics already discussed and approved in the GitHub Discussions section.** + +DO NOT OPEN A NEW ISSUE. PLEASE USE THE DISCUSSIONS SECTION. + +Link to approved discussion: + +--- + diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 0ef79de3..a7329595 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -21,24 +21,22 @@ to do everything for everybody. This means that we might decide against incorporating a new feature. However, there might be a way to implement that feature *on top of* Gunicorn. -### Discuss your design on the mailing list +### Start with a Discussion -We recommend discussing your plans [on the mailing -list](http://gunicorn.org/#community) before starting to code - -especially for more ambitious contributions. This gives other -contributors a chance to point you in the right direction, give feedback -on your design, and maybe point out if someone else is working on the -same thing. +We use [GitHub Discussions](https://github.com/benoitc/gunicorn/discussions) +as the starting point for all bug reports, feature requests, and questions. +This allows for proper triage before creating formal issues. -### Create issues... +- **Bug reports**: Start in [Q&A](https://github.com/benoitc/gunicorn/discussions/categories/q-a) +- **Feature requests**: Start in [Ideas](https://github.com/benoitc/gunicorn/discussions/categories/ideas) +- **Questions**: Start in [Q&A](https://github.com/benoitc/gunicorn/discussions/categories/q-a) -Any significant improvement should be documented as [a github -issue](https://github.com/benoitc/gunicorn/issues) before anybody starts -working on it. +After discussion and triage, maintainers will create issues for confirmed +bugs and approved features. -### ...but check for existing issues first! +### Check for existing discussions first! -Please take a moment to check that an issue doesn't already exist +Please take a moment to check that a discussion or issue doesn't already exist documenting your bug report or improvement proposal. If it does, it never hurts to add a quick "+1" or "I have this problem too". This will help prioritize the most common problems and requests.