From b196f481a80c578c8aec4f73893fc1aa244a4e70 Mon Sep 17 00:00:00 2001 From: MHSanaei Date: Sun, 24 May 2026 22:14:28 +0200 Subject: [PATCH] chore(github): overhaul issue and PR templates Bug, feature, and question templates now collect the triage signal the maintainers usually have to ask for (install method, OS, area, reverse proxy, logs, version). config.yml disables blank issues and points to Wiki / existing issues / latest release from the picker. PR template adds Summary/Why/Type/Areas/Testing/Breaking-changes sections and a fuller checklist (build, tests, lint, typecheck, docs). Renamed pull_request_template.yml -> .md to match GitHub's conventional extension; the old .yml was being read as markdown anyway. --- .github/FUNDING.yml | 2 +- .github/ISSUE_TEMPLATE/bug_report.yaml | 141 ++++++++++++++++---- .github/ISSUE_TEMPLATE/config.yml | 11 ++ .github/ISSUE_TEMPLATE/feature_request.yaml | 141 ++++++++++++++------ .github/ISSUE_TEMPLATE/question.yaml | 82 +++++++++++- .github/pull_request_template.md | 63 +++++++++ .github/pull_request_template.yml | 20 --- 7 files changed, 366 insertions(+), 94 deletions(-) create mode 100644 .github/ISSUE_TEMPLATE/config.yml create mode 100644 .github/pull_request_template.md delete mode 100644 .github/pull_request_template.yml diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml index 5f69a4d6..cc1f1f0e 100644 --- a/.github/FUNDING.yml +++ b/.github/FUNDING.yml @@ -11,4 +11,4 @@ issuehunt: # Replace with a single IssueHunt username lfx_crowdfunding: # Replace with a single LFX Crowdfunding project-name e.g., cloud-foundry polar: # Replace with a single Polar username buy_me_a_coffee: mhsanaei -custom: https://nowpayments.io/donation/hsanaei +custom: https://donate.sanaei.dev/ diff --git a/.github/ISSUE_TEMPLATE/bug_report.yaml b/.github/ISSUE_TEMPLATE/bug_report.yaml index 71431e8f..52843436 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yaml +++ b/.github/ISSUE_TEMPLATE/bug_report.yaml @@ -1,77 +1,164 @@ name: Bug report -description: Create a report to help us improve -title: "Bug report" -labels: ["bug"] +description: Report something that is broken or behaving unexpectedly +title: "[Bug]: " +labels: ["bug", "needs triage"] body: - type: markdown attributes: value: | - Thank you for reporting a bug! Please fill out the following information. + Thanks for taking the time to file a bug. A complete report helps us + reproduce and fix it quickly. Please **search [existing issues](../issues?q=is%3Aissue)** + before opening a new one — duplicates will be closed. - type: textarea id: what-happened attributes: label: Describe the bug - description: A clear and concise description of what the bug is. - placeholder: My problem is... + description: A clear and concise description of what went wrong. + placeholder: When I … the panel does … but I expected it to … validations: required: true - type: textarea id: how-repeat-problem attributes: - label: How to repeat the problem? - description: Sequence of actions that allow you to reproduce the bug + label: How to reproduce the problem + description: Numbered steps starting from a clean state. The clearer the steps, the faster the fix. placeholder: | - 1. Open `Inbounds` page - 2. ... + 1. Open the `Inbounds` page + 2. Create a new VLESS inbound with … + 3. Click `Save` + 4. Observe … validations: required: true - type: textarea id: expected-action attributes: - label: Expected action - description: What's going to happen - placeholder: Must be... + label: Expected behavior + placeholder: I expected the panel to … validations: required: false - type: textarea id: received-action attributes: - label: Received action - description: What's really happening - placeholder: It's actually happening... + label: Actual behavior + placeholder: Instead, the panel … + validations: + required: false + + - type: textarea + id: logs + attributes: + label: Relevant logs + description: | + Panel logs (`journalctl -u x-ui -n 200`) and/or the browser DevTools + console output. **Redact** tokens, real domains, IPs, and client UUIDs. + render: shell + validations: + required: false + + - type: textarea + id: screenshots + attributes: + label: Screenshots + description: Drag images directly into this field. Redact any sensitive data. validations: required: false - type: input id: xui-version attributes: - label: 3x-ui Version - description: Which version of 3x-ui are you using? - placeholder: 2.X.X + label: 3x-ui version + description: Shown at the top of the panel sidebar. + placeholder: 3.1.0 validations: required: true - type: input id: xray-version attributes: - label: Xray-core Version - description: Which version of Xray-core are you using? - placeholder: 2.X.X + label: Xray-core version + description: Visible on the `Xray Settings` page. + placeholder: 25.x.x + validations: + required: false + + - type: dropdown + id: install-method + attributes: + label: How did you install 3x-ui? + options: + - install.sh script + - Docker / Docker Compose + - Manual build from source + - Other (please describe in the bug body) + validations: + required: true + + - type: input + id: os + attributes: + label: Operating system + description: Distribution and version. + placeholder: Ubuntu 24.04 / Debian 12 / CentOS Stream 9 … + validations: + required: true + + - type: dropdown + id: area + attributes: + label: Which parts of the panel are affected? + multiple: true + options: + - Frontend (UI / panel pages) + - Backend (API endpoints, login, settings) + - Xray config generation + - Subscription (share links / Clash / JSON) + - Statistics / traffic counters + - Database / migrations + - Install / upgrade script + - Docker image + - Multi-node (sub-nodes) + - Telegram bot + - Other + validations: + required: false + + - type: input + id: browser + attributes: + label: Browser (only if it is a UI bug) + placeholder: Chrome 132 / Firefox 134 / Safari 18 / mobile Chrome … + validations: + required: false + + - type: dropdown + id: reverse-proxy + attributes: + label: Is the panel behind a reverse proxy or CDN? + options: + - "No — direct access" + - "Yes — Nginx" + - "Yes — Caddy" + - "Yes — Cloudflare (proxied DNS)" + - "Yes — Cloudflare Tunnel" + - "Yes — other" validations: required: false - type: checkboxes id: checklist attributes: - label: Checklist - description: Please check all the checkboxes + label: Before submitting options: - - label: This bug report is written entirely in English. + - label: I searched [existing issues](../issues?q=is%3Aissue) and this bug has not been reported. + required: true + - label: I am running the latest released version of 3x-ui (or have verified the bug still exists on it). + required: true + - label: This bug report is written in English. + required: true + - label: I have redacted any sensitive data (tokens, real domains, client UUIDs). required: true - - label: This bug report is new and no one has reported it before me. - required: true \ No newline at end of file diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 00000000..7356cbc7 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1,11 @@ +blank_issues_enabled: false +contact_links: + - name: 📖 Project Wiki + url: https://github.com/MHSanaei/3x-ui/wiki + about: Setup, install, configuration, and "how do I…" guides live here. Please check before opening a question. + - name: 🔍 Search existing issues + url: https://github.com/MHSanaei/3x-ui/issues?q=is%3Aissue + about: Your bug, feature, or question may already be tracked. Comment on the existing one rather than opening a duplicate. + - name: 🚀 Latest release + url: https://github.com/MHSanaei/3x-ui/releases/latest + about: Reproduce on the latest version before reporting — many bugs are already fixed in the most recent release. diff --git a/.github/ISSUE_TEMPLATE/feature_request.yaml b/.github/ISSUE_TEMPLATE/feature_request.yaml index 7ffbad7a..0110f061 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.yaml +++ b/.github/ISSUE_TEMPLATE/feature_request.yaml @@ -1,39 +1,102 @@ -name: Feature request -description: Suggest an idea for this project -title: "Feature request" -labels: ["enhancement"] - -body: - - type: textarea - id: is-related-problem - attributes: - label: Is your feature request related to a problem? - description: A clear and concise description of what the problem is. - placeholder: I'm always frustrated when... - validations: - required: true - - - type: textarea - id: solution - attributes: - label: Describe the solution you'd like - description: A clear and concise description of what you want to happen. - validations: - required: true - - - type: textarea - id: alternatives - attributes: - label: Describe alternatives you've considered - description: A clear and concise description of any alternative solutions or features you've considered. - validations: - required: false - - - type: checkboxes - id: checklist - attributes: - label: Checklist - description: Please check all the checkboxes - options: - - label: This feature report is written entirely in English. - required: true \ No newline at end of file +name: Feature request +description: Suggest an idea or improvement for 3x-ui +title: "[Feature]: " +labels: ["enhancement", "needs triage"] + +body: + - type: markdown + attributes: + value: | + Thanks for taking the time to suggest a feature. Please **search + [existing issues](../issues?q=is%3Aissue)** first — duplicates will be closed. + + - type: textarea + id: is-related-problem + attributes: + label: Is your feature request related to a problem? + description: A clear and concise description of the problem you're hitting today. + placeholder: I'm always frustrated when … + validations: + required: true + + - type: textarea + id: solution + attributes: + label: Describe the solution you'd like + description: | + What should the panel do? Be specific — UI placement, API shape, + config keys, expected behavior under edge cases. + placeholder: | + On the Inbounds page, add a button that … + The backend should expose a new endpoint at … + validations: + required: true + + - type: textarea + id: alternatives + attributes: + label: Alternatives you've considered + description: Other ways you tried to solve this, and why they fell short. + validations: + required: false + + - type: textarea + id: use-case + attributes: + label: Concrete use case + description: | + Walk us through a real scenario where this feature would help. + Numbers help (e.g. "I manage 200 clients across 5 inbounds and …"). + validations: + required: false + + - type: textarea + id: mockup + attributes: + label: Mockups, screenshots, or examples + description: | + Drag images, paste config snippets, or link to similar features in + other tools. Helps us understand the shape of the request. + validations: + required: false + + - type: dropdown + id: area + attributes: + label: Which parts of the panel would this affect? + multiple: true + options: + - Frontend (UI / panel pages) + - Backend (API endpoints, login, settings) + - Xray config generation + - Subscription (share links / Clash / JSON) + - Statistics / traffic counters + - Database / migrations + - Install / upgrade script + - Docker image + - Multi-node (sub-nodes) + - Telegram bot + - Other + validations: + required: false + + - type: checkboxes + id: contribution + attributes: + label: Are you willing to help? + description: Optional — but maintainers prioritize requests with community help. + options: + - label: I'd like to implement this feature myself and open a PR. + required: false + - label: I can help test once a PR is open. + required: false + + - type: checkboxes + id: checklist + attributes: + label: Before submitting + options: + - label: I searched [existing issues](../issues?q=is%3Aissue) and this feature has not been requested. + required: true + - label: This feature request is written in English. + required: true diff --git a/.github/ISSUE_TEMPLATE/question.yaml b/.github/ISSUE_TEMPLATE/question.yaml index 0021f6bd..b6021251 100644 --- a/.github/ISSUE_TEMPLATE/question.yaml +++ b/.github/ISSUE_TEMPLATE/question.yaml @@ -1,22 +1,90 @@ name: Question -description: Describe this issue template's purpose here. -title: "Question" +description: Ask how to do something with 3x-ui +title: "[Question]: " labels: ["question"] body: + - type: markdown + attributes: + value: | + Before opening a question, please: + + - Read the [project Wiki](https://github.com/MHSanaei/3x-ui/wiki) — + most setup, install, and "how do I …" answers live there. + - Search [existing issues](../issues?q=is%3Aissue) — the question + may already have been asked. + + Use this template only when you have a usage question that the docs + and previous issues don't answer. If you found something **broken**, + open a Bug report instead. + - type: textarea id: question attributes: - label: Question - placeholder: I have a question, ..., how can I solve it? + label: What are you trying to do? + description: Describe the goal, not just the symptom. The clearer the goal, the better the answer. + placeholder: | + I'm trying to … so that … + I expected the panel to … but I'm not sure how to configure it. validations: required: true + - type: textarea + id: tried + attributes: + label: What have you already tried? + description: Pages of the Wiki you read, settings you toggled, commands you ran. + placeholder: | + - Read the `Reverse Proxy` page of the Wiki + - Tried setting `xrayBasePath` to `/proxy` — got 404 + validations: + required: false + + - type: input + id: xui-version + attributes: + label: 3x-ui version + description: Shown at the top of the panel sidebar. + placeholder: 3.1.0 + validations: + required: true + + - type: dropdown + id: install-method + attributes: + label: How did you install 3x-ui? + options: + - install.sh script + - Docker / Docker Compose + - Manual build from source + - Other + validations: + required: true + + - type: input + id: os + attributes: + label: Operating system + placeholder: Ubuntu 24.04 / Debian 12 / CentOS Stream 9 … + validations: + required: false + + - type: textarea + id: screenshots + attributes: + label: Screenshots or config snippets + description: Drag images or paste relevant config. Redact tokens, real domains, client UUIDs. + validations: + required: false + - type: checkboxes id: checklist attributes: - label: Checklist - description: Please check all the checkboxes + label: Before submitting options: - - label: This question is written entirely in English. + - label: I read the [Wiki](https://github.com/MHSanaei/3x-ui/wiki) and searched [existing issues](../issues?q=is%3Aissue). + required: true + - label: This is a usage question, not a bug report. + required: true + - label: This question is written in English. required: true diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md new file mode 100644 index 00000000..d4ae693a --- /dev/null +++ b/.github/pull_request_template.md @@ -0,0 +1,63 @@ +## Summary + + + +## Why + + + +## Type of change + +- [ ] Bug fix +- [ ] New feature +- [ ] Refactoring (no behavior change) +- [ ] Documentation +- [ ] Tests only +- [ ] Build / CI / tooling +- [ ] Other + +## Areas affected + +- [ ] Frontend (UI / panel pages) +- [ ] Backend (API endpoints, login, settings) +- [ ] Xray config generation +- [ ] Subscription (share links / Clash / JSON) +- [ ] Statistics / traffic counters +- [ ] Database / migrations +- [ ] Install / upgrade script +- [ ] Docker image +- [ ] Multi-node (sub-nodes) +- [ ] Telegram bot + +## How was this tested? + + + +## Screenshots / recordings + + + +## Breaking changes + + + +## Checklist + +- [ ] I tested the change locally and confirmed the described behavior. +- [ ] I added or updated tests for the new behavior (when applicable). +- [ ] `go build ./...` and the test suite pass locally. +- [ ] For frontend changes: `npm run lint`, `npm run typecheck`, and `npm run build` pass. +- [ ] I updated the Wiki / README / API docs if user-facing behavior changed. +- [ ] My commits follow the project's existing message style. +- [ ] I have no unrelated changes mixed into this PR. diff --git a/.github/pull_request_template.yml b/.github/pull_request_template.yml deleted file mode 100644 index c7eb8e78..00000000 --- a/.github/pull_request_template.yml +++ /dev/null @@ -1,20 +0,0 @@ -## What is the pull request? - - - -## Which part of the application is affected by the change? - -- [ ] Frontend -- [ ] Backend - -## Type of Changes - -- [ ] Bug fix -- [ ] New feature -- [ ] Refactoring -- [ ] Other - -## Screenshots - - - \ No newline at end of file