From a7ee3cbd0226c6aa6720ee77c9b75763f29f0b5c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=87=AA=E7=94=B1=E7=9A=84=E4=B8=96=E7=95=8C=E4=BA=BA?= <3196812536@qq.com> Date: Fri, 25 Apr 2025 21:18:17 +0800 Subject: [PATCH] Update issue-management.yml (#5314) * Update issue-management.yml * feat: enhance issue management with new templates and automated stale issue handling * fix: update issue templates for clarity and consistency in descriptions * fix: improve clarity in issue templates and add area labels for better categorization * fix: reorder question template title for improved clarity and update issue-checker to remove redundant label handling * fix: add skip and remove labels for kind/bug, kind/enhancement, and kind/question in issue-checker * fix: remove redundant handling for needs-more-info labels in issue-checker --- .github/ISSUE_TEMPLATE/#2_question.yml | 2 +- .github/ISSUE_TEMPLATE/#3_others.yml | 76 ++++++++ .github/ISSUE_TEMPLATE/2_question.yml | 2 +- .github/ISSUE_TEMPLATE/3_others.yml | 76 ++++++++ .github/issue-checker.yml | 252 +++++++++++++++++++++++++ .github/workflows/issue-checker.yml | 25 +++ .github/workflows/issue-management.yml | 23 ++- 7 files changed, 452 insertions(+), 4 deletions(-) create mode 100644 .github/ISSUE_TEMPLATE/#3_others.yml create mode 100644 .github/ISSUE_TEMPLATE/3_others.yml create mode 100644 .github/issue-checker.yml create mode 100644 .github/workflows/issue-checker.yml diff --git a/.github/ISSUE_TEMPLATE/#2_question.yml b/.github/ISSUE_TEMPLATE/#2_question.yml index 9daf0410af..1b595883de 100644 --- a/.github/ISSUE_TEMPLATE/#2_question.yml +++ b/.github/ISSUE_TEMPLATE/#2_question.yml @@ -1,4 +1,4 @@ -name: ❓ 讨论 & 提问 (中文) +name: ❓ 提问 & 讨论 (中文) description: 寻求帮助、讨论问题、提出疑问等... title: '[讨论]: ' labels: ['kind/question'] diff --git a/.github/ISSUE_TEMPLATE/#3_others.yml b/.github/ISSUE_TEMPLATE/#3_others.yml new file mode 100644 index 0000000000..7b42bcda38 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/#3_others.yml @@ -0,0 +1,76 @@ +name: 🤔 其他问题 (中文) +description: 提交不属于错误报告或功能需求的问题 +title: '[其他]: ' +body: + - type: markdown + attributes: + value: | + 感谢您花时间提出问题! + 在提交此问题之前,请确保您已经了解了[常见问题](https://docs.cherry-ai.com/question-contact/questions)和[知识科普](https://docs.cherry-ai.com/question-contact/knowledge) + + - type: checkboxes + id: checklist + attributes: + label: 提交前检查 + description: | + 在提交 Issue 前请确保您已经完成了以下所有步骤 + options: + - label: 我理解 Issue 是用于反馈和解决问题的,而非吐槽评论区,将尽可能提供更多信息帮助问题解决。 + required: true + - label: 我已经查看了置顶 Issue 并搜索了现有的 [开放Issue](https://github.com/CherryHQ/cherry-studio/issues)和[已关闭Issue](https://github.com/CherryHQ/cherry-studio/issues?q=is%3Aissue%20state%3Aclosed%20),没有找到类似的问题。 + required: true + - label: 我填写了简短且清晰明确的标题,以便开发者在翻阅 Issue 列表时能快速确定大致问题。而不是"一个问题"、"求助"等。 + required: true + - label: 我的问题不属于错误报告或功能需求类别。 + required: true + + - type: dropdown + id: platform + attributes: + label: 平台 + description: 您正在使用哪个平台? + options: + - Windows + - macOS + - Linux + validations: + required: true + + - type: input + id: version + attributes: + label: 版本 + description: 您正在运行的 Cherry Studio 版本是什么? + placeholder: 例如 v1.0.0 + validations: + required: true + + - type: textarea + id: question + attributes: + label: 问题描述 + description: 请详细描述您的问题或疑问 + placeholder: 我想了解有关...的更多信息 + validations: + required: true + + - type: textarea + id: context + attributes: + label: 相关背景 + description: 请提供与您的问题相关的任何背景信息或上下文 + placeholder: 我尝试实现...时遇到了疑问 + validations: + required: true + + - type: textarea + id: attempts + attributes: + label: 您已尝试的方法 + description: 请描述您为解决问题已经尝试过的方法(如果有) + + - type: textarea + id: additional + attributes: + label: 附加信息 + description: 任何能让我们对您的问题有更多了解的信息,包括截图或相关链接 \ No newline at end of file diff --git a/.github/ISSUE_TEMPLATE/2_question.yml b/.github/ISSUE_TEMPLATE/2_question.yml index 8dd893d99e..789ee80318 100644 --- a/.github/ISSUE_TEMPLATE/2_question.yml +++ b/.github/ISSUE_TEMPLATE/2_question.yml @@ -1,4 +1,4 @@ -name: ❓ Discussion & Questions +name: ❓ Questions & Discussion description: Seeking help, discussing issues, asking questions, etc... title: '[Discussion]: ' labels: ['kind/question'] diff --git a/.github/ISSUE_TEMPLATE/3_others.yml b/.github/ISSUE_TEMPLATE/3_others.yml new file mode 100644 index 0000000000..dd99048bf7 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/3_others.yml @@ -0,0 +1,76 @@ +name: 🤔 Other Questions (English) +description: Submit questions that don't fit into bug reports or feature requests +title: '[Other]: ' +body: + - type: markdown + attributes: + value: | + Thank you for taking the time to ask a question! + Before submitting this issue, please make sure you've reviewed the [FAQ](https://docs.cherry-ai.com/question-contact/questions) and [Knowledge Base](https://docs.cherry-ai.com/question-contact/knowledge) + + - type: checkboxes + id: checklist + attributes: + label: Pre-submission Checklist + description: | + Please ensure you've completed all the steps below before submitting your issue + options: + - label: I understand that Issues are for feedback and problem-solving, not for complaints, and I will provide as much information as possible to help resolve the issue. + required: true + - label: I have checked the pinned Issues and searched through existing [open Issues](https://github.com/CherryHQ/cherry-studio/issues) and [closed Issues](https://github.com/CherryHQ/cherry-studio/issues?q=is%3Aissue%20state%3Aclosed%20) and didn't find similar questions. + required: true + - label: I have written a short and clear title that helps developers quickly understand the nature of my question, rather than vague titles like "A question" or "Help needed". + required: true + - label: My question doesn't fall under bug reports or feature requests categories. + required: true + + - type: dropdown + id: platform + attributes: + label: Platform + description: Which platform are you using? + options: + - Windows + - macOS + - Linux + validations: + required: true + + - type: input + id: version + attributes: + label: Version + description: What version of Cherry Studio are you running? + placeholder: e.g., v1.0.0 + validations: + required: true + + - type: textarea + id: question + attributes: + label: Question Description + description: Please describe your question or inquiry in detail + placeholder: I would like to know more about... + validations: + required: true + + - type: textarea + id: context + attributes: + label: Relevant Context + description: Please provide any background information or context related to your question + placeholder: I encountered this question while trying to implement... + validations: + required: true + + - type: textarea + id: attempts + attributes: + label: Attempted Solutions + description: Please describe any methods you've already tried to resolve your question (if applicable) + + - type: textarea + id: additional + attributes: + label: Additional Information + description: Any other information that could help us better understand your question, including screenshots or relevant links \ No newline at end of file diff --git a/.github/issue-checker.yml b/.github/issue-checker.yml new file mode 100644 index 0000000000..b126d85477 --- /dev/null +++ b/.github/issue-checker.yml @@ -0,0 +1,252 @@ +default-mode: + add: + remove: [pull_request_target, issues] + +labels: + # 跳过一个 label + # 去掉一个 label + + # skips and removes + - name: skip all + content: + regexes: "[Ss]kip (?:[Aa]ll |)[Ll]abels?" + - name: remove all + content: + regexes: "[Rr]emove (?:[Aa]ll |)[Ll]abels?" + + - name: skip kind/bug + content: + regexes: "[Ss]kip (?:[Ll]abels? |)(?:`|)kind/bug(?:`|)" + - name: remove kind/bug + content: + regexes: "[Rr]emove (?:[Ll]abels? |)(?:`|)kind/bug(?:`|)" + + - name: skip kind/enhancement + content: + regexes: "[Ss]kip (?:[Ll]abels? |)(?:`|)kind/enhancement(?:`|)" + - name: remove kind/enhancement + content: + regexes: "[Rr]emove (?:[Ll]abels? |)(?:`|)kind/enhancement(?:`|)" + + - name: skip kind/question + content: + regexes: "[Ss]kip (?:[Ll]abels? |)(?:`|)kind/question(?:`|)" + - name: remove kind/question + content: + regexes: "[Rr]emove (?:[Ll]abels? |)(?:`|)kind/question(?:`|)" + + - name: skip area/Connectivity + content: + regexes: "[Ss]kip (?:[Ll]abels? |)(?:`|)area/Connectivity(?:`|)" + - name: remove area/Connectivity + content: + regexes: "[Rr]emove (?:[Ll]abels? |)(?:`|)area/Connectivity(?:`|)" + + - name: skip area/UI/UX + content: + regexes: "[Ss]kip (?:[Ll]abels? |)(?:`|)area/UI/UX(?:`|)" + - name: remove area/UI/UX + content: + regexes: "[Rr]emove (?:[Ll]abels? |)(?:`|)area/UI/UX(?:`|)" + + - name: skip kind/documentation + content: + regexes: "[Ss]kip (?:[Ll]abels? |)(?:`|)kind/documentation(?:`|)" + - name: remove kind/documentation + content: + regexes: "[Rr]emove (?:[Ll]abels? |)(?:`|)kind/documentation(?:`|)" + + - name: skip client:linux + content: + regexes: "[Ss]kip (?:[Ll]abels? |)(?:`|)client:linux(?:`|)" + - name: remove client:linux + content: + regexes: "[Rr]emove (?:[Ll]abels? |)(?:`|)client:linux(?:`|)" + + - name: skip client:mac + content: + regexes: "[Ss]kip (?:[Ll]abels? |)(?:`|)client:mac(?:`|)" + - name: remove client:mac + content: + regexes: "[Rr]emove (?:[Ll]abels? |)(?:`|)client:mac(?:`|)" + + - name: skip client:win + content: + regexes: "[Ss]kip (?:[Ll]abels? |)(?:`|)client:win(?:`|)" + - name: remove client:win + content: + regexes: "[Rr]emove (?:[Ll]abels? |)(?:`|)client:win(?:`|)" + + - name: skip sig/Assistant + content: + regexes: "[Ss]kip (?:[Ll]abels? |)(?:`|)sig/Assistant(?:`|)" + - name: remove sig/Assistant + content: + regexes: "[Rr]emove (?:[Ll]abels? |)(?:`|)sig/Assistant(?:`|)" + + - name: skip sig/Data + content: + regexes: "[Ss]kip (?:[Ll]abels? |)(?:`|)sig/Data(?:`|)" + - name: remove sig/Data + content: + regexes: "[Rr]emove (?:[Ll]abels? |)(?:`|)sig/Data(?:`|)" + + - name: skip sig/MCP + content: + regexes: "[Ss]kip (?:[Ll]abels? |)(?:`|)sig/MCP(?:`|)" + - name: remove sig/MCP + content: + regexes: "[Rr]emove (?:[Ll]abels? |)(?:`|)sig/MCP(?:`|)" + + - name: skip sig/RAG + content: + regexes: "[Ss]kip (?:[Ll]abels? |)(?:`|)sig/RAG(?:`|)" + - name: remove sig/RAG + content: + regexes: "[Rr]emove (?:[Ll]abels? |)(?:`|)sig/RAG(?:`|)" + + - name: skip lgtm + content: + regexes: "[Ss]kip (?:[Ll]abels? |)(?:`|)lgtm(?:`|)" + - name: remove lgtm + content: + regexes: "[Rr]emove (?:[Ll]abels? |)(?:`|)lgtm(?:`|)" + + - name: skip License + content: + regexes: "[Ss]kip (?:[Ll]abels? |)(?:`|)License(?:`|)" + - name: remove License + content: + regexes: "[Rr]emove (?:[Ll]abels? |)(?:`|)License(?:`|)" + + # `Dev Team` + - name: Dev Team + mode: + add: [pull_request_target, issues] + author_association: + - COLLABORATOR + + # Area labels + - name: area/Connectivity + content: area/Connectivity + regexes: "代理|[Pp]roxy" + skip-if: + - skip all + - skip area/Connectivity + remove-if: + - remove all + - remove area/Connectivity + + - name: area/UI/UX + content: area/UI/UX + regexes: "界面|[Uu][Ii]|重叠|按钮|图标|组件|渲染|菜单|栏目|头像|主题|样式|[Cc][Ss][Ss]" + skip-if: + - skip all + - skip area/UI/UX + remove-if: + - remove all + - remove area/UI/UX + + # Kind labels + - name: kind/documentation + content: kind/documentation + regexes: "文档|教程|[Dd]oc(s|umentation)|[Rr]eadme" + skip-if: + - skip all + - skip kind/documentation + remove-if: + - remove all + - remove kind/documentation + + # Client labels + - name: client:linux + content: client:linux + regexes: "(?:[Ll]inux|[Uu]buntu|[Dd]ebian)" + skip-if: + - skip all + - skip client:linux + remove-if: + - remove all + - remove client:linux + + - name: client:mac + content: client:mac + regexes: "(?:[Mm]ac|[Mm]acOS|[Oo]SX)" + skip-if: + - skip all + - skip client:mac + remove-if: + - remove all + - remove client:mac + + - name: client:win + content: client:win + regexes: "(?:[Ww]in|[Ww]indows)" + skip-if: + - skip all + - skip client:win + remove-if: + - remove all + - remove client:win + + # SIG labels + - name: sig/Assistant + content: sig/Assistant + regexes: "快捷助手|[Aa]ssistant" + skip-if: + - skip all + - skip sig/Assistant + remove-if: + - remove all + - remove sig/Assistant + + - name: sig/Data + content: sig/Data + regexes: "[Ww]ebdav|坚果云|备份|同步|数据|Obsidian|Notion|Joplin|思源" + skip-if: + - skip all + - skip sig/Data + remove-if: + - remove all + - remove sig/Data + + - name: sig/MCP + content: sig/MCP + regexes: "[Mm][Cc][Pp]" + skip-if: + - skip all + - skip sig/MCP + remove-if: + - remove all + - remove sig/MCP + + - name: sig/RAG + content: sig/RAG + regexes: "知识库|[Rr][Aa][Gg]" + skip-if: + - skip all + - skip sig/RAG + remove-if: + - remove all + - remove sig/RAG + + # Other labels + - name: lgtm + content: lgtm + regexes: "(?:[Ll][Gg][Tt][Mm]|[Ll]ooks [Gg]ood [Tt]o [Mm]e)" + skip-if: + - skip all + - skip lgtm + remove-if: + - remove all + - remove lgtm + + - name: License + content: License + regexes: "(?:[Ll]icense|[Cc]opyright|[Mm][Ii][Tt]|[Aa]pache)" + skip-if: + - skip all + - skip License + remove-if: + - remove all + - remove License diff --git a/.github/workflows/issue-checker.yml b/.github/workflows/issue-checker.yml new file mode 100644 index 0000000000..cb768531c0 --- /dev/null +++ b/.github/workflows/issue-checker.yml @@ -0,0 +1,25 @@ +name: "Issue Checker" + +on: + issues: + types: [opened, edited] + pull_request_target: + types: [opened, edited] + issue_comment: + types: [created, edited] + +permissions: + contents: read + issues: write + pull-requests: write + +jobs: + triage: + runs-on: ubuntu-latest + steps: + - uses: MaaAssistantArknights/issue-checker@v1.14 + with: + repo-token: "${{ secrets.GITHUB_TOKEN }}" + configuration-path: .github/issue-checker.yml + not-before: 2022-08-05T00:00:00Z + include-title: 1 \ No newline at end of file diff --git a/.github/workflows/issue-management.yml b/.github/workflows/issue-management.yml index 4f178a8152..f79b31fd92 100644 --- a/.github/workflows/issue-management.yml +++ b/.github/workflows/issue-management.yml @@ -7,7 +7,7 @@ on: env: daysBeforeStale: 30 # Number of days of inactivity before marking as stale - daysBeforeClose: 30 # Number of days to wait after marking as stale before closing + daysBeforeClose: 10 # Number of days to wait after marking as stale before closing jobs: stale: @@ -20,6 +20,25 @@ jobs: pull-requests: none contents: none steps: + - name: Close needs-more-info issues + uses: actions/stale@v9 + with: + repo-token: ${{ secrets.GITHUB_TOKEN }} + only-labels: "needs-more-info" + days-before-stale: ${{ env.daysBeforeStale }} + days-before-close: 0 # Close immediately after stale + stale-issue-label: "inactive" + close-issue-label: "closed:no-response" + stale-issue-message: | + This issue has been labeled as needing more information and has been inactive for ${{ env.daysBeforeStale }} days. + It will be closed now due to lack of additional information. + + 该问题被标记为"需要更多信息"且已经 ${{ env.daysBeforeStale }} 天没有任何活动,将立即关闭。 + operations-per-run: 50 + exempt-issue-labels: "pending, Dev Team" + days-before-pr-stale: -1 + days-before-pr-close: -1 + - name: Close inactive issues uses: actions/stale@v9 with: @@ -30,7 +49,7 @@ jobs: stale-issue-message: | This issue has been inactive for a prolonged period and will be closed automatically in ${{ env.daysBeforeClose }} days. 该问题已长时间处于闲置状态,${{ env.daysBeforeClose }} 天后将自动关闭。 - exempt-issue-labels: "pending, Dev Team, enhancement" + exempt-issue-labels: "pending, Dev Team, kind/enhancement" days-before-pr-stale: -1 # Completely disable stalling for PRs days-before-pr-close: -1 # Completely disable closing for PRs