diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS new file mode 100644 index 00000000..d851681d --- /dev/null +++ b/.github/CODEOWNERS @@ -0,0 +1,2 @@ +# Everything needs to be reviewed by Hank +* @henrygd \ No newline at end of file diff --git a/.github/DISCUSSION_TEMPLATE/ideas.yml b/.github/DISCUSSION_TEMPLATE/ideas.yml new file mode 100644 index 00000000..ae995430 --- /dev/null +++ b/.github/DISCUSSION_TEMPLATE/ideas.yml @@ -0,0 +1,19 @@ +body: + - type: dropdown + id: component + attributes: + label: Component + description: Which part of Beszel is this about? + options: + - Hub + - Agent + - Hub & Agent + default: 0 + validations: + required: true + - type: textarea + attributes: + label: Description + description: Please describe in detail what you want to share. + validations: + required: true diff --git a/.github/DISCUSSION_TEMPLATE/support.yml b/.github/DISCUSSION_TEMPLATE/support.yml index 73b824b2..a8ebfa1c 100644 --- a/.github/DISCUSSION_TEMPLATE/support.yml +++ b/.github/DISCUSSION_TEMPLATE/support.yml @@ -1,19 +1,54 @@ body: - - type: markdown + - type: checkboxes + id: terms attributes: - value: | - ### Before opening a discussion: + label: Welcome! + description: | + Thank you for reaching out to the Beszel community for support! To help us assist you better, please make sure to review the following points before submitting your request: - - Check the [common issues guide](https://beszel.dev/guide/common-issues). - - Search existing [issues](https://github.com/henrygd/beszel/issues) and [discussions](https://github.com/henrygd/beszel/discussions) (including closed). + Please note: + - For translation-related issues or requests, please use the [Crowdin project](https://crowdin.com/project/beszel). + **- Please do not submit support reqeusts that are specific to ZFS. We plan to add integration with ZFS utilities in the near future.** + + options: + - label: I have read the [Documentation](https://beszel.dev/guide/getting-started) + required: true + - label: I have checked the [Common Issues Guide](https://beszel.dev/guide/common-issues) and my problem was not mentioned there. + required: true + - label: I have searched open and closed issues and discussions and my problem was not mentioned before. + required: true + - label: I have verified I am using the latest version available. You can check the latest release [here](https://github.com/henrygd/beszel/releases). + required: true + + - type: dropdown + id: component + attributes: + label: Component + description: Which part of Beszel is this about? + options: + - Hub + - Agent + - Hub & Agent + default: 0 + validations: + required: true - type: textarea id: description attributes: - label: Description - description: A clear and concise description of the issue or question. If applicable, add screenshots to help explain your problem. + label: Problem Description + description: | + How to write a good bug report? + + - Respect the issue template as much as possible. + - The title should be short and descriptive. + - Explain the conditions which led you to report this issue: the context. + - The context should lead to something, a problem that you’re facing. + - Remain clear and concise. + - Format your messages to help the reader focus on what matters and understand the structure of your message, use [Markdown syntax](https://help.github.com/articles/github-flavored-markdown) validations: required: true + - type: input id: system attributes: @@ -21,13 +56,15 @@ body: placeholder: linux/amd64 (agent), freebsd/arm64 (hub) validations: required: true - - type: input - id: version - attributes: - label: Beszel version - placeholder: 0.9.1 - validations: - required: true + +# - type: input +# id: version +# attributes: +# label: Beszel version +# placeholder: 0.9.1 +# validations: +# required: true + - type: dropdown id: install-method attributes: @@ -41,18 +78,21 @@ body: - Other (please describe above) validations: required: true + - type: textarea id: config attributes: label: Configuration description: Please provide any relevant service configuration render: yaml + - type: textarea id: hub-logs attributes: label: Hub Logs description: Check the logs page in PocketBase (`/_/#/logs`) for relevant errors (copy JSON). render: json + - type: textarea id: agent-logs attributes: diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index b17f46ef..f0ae4802 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -1,8 +1,30 @@ name: 🐛 Bug report -description: Report a new bug or issue. +description: Use this template to report a bug or issue. title: '[Bug]: ' -labels: ['bug', "needs confirmation"] +labels: ['bug'] body: + - type: checkboxes + attributes: + label: Welcome! + description: | + The issue tracker is for reporting bugs and feature requests only. For end-user related support questions, please use the **[GitHub Discussions](https://github.com/henrygd/beszel/discussions/new?category=support)** instead + + Please note: + - For translation-related issues or requests, please use the [Crowdin project](https://crowdin.com/project/beszel). + - To request a change or feature, use the [feature request form](https://github.com/henrygd/beszel/issues/new?template=feature_request.yml). + - Any issues that can be resolved by consulting the documentation or by reviewing existing open or closed issues will be closed. + **- Please do not submit bugs that are specific to ZFS. We plan to add integration with ZFS utilities in the near future.** + + options: + - label: I have read the [Documentation](https://beszel.dev/guide/getting-started) + required: true + - label: I have checked the [Common Issues Guide](https://beszel.dev/guide/common-issues) and my problem was not mentioned there. + required: true + - label: I have searched open and closed issues and my problem was not mentioned before. + required: true + - label: I have verified I am using the latest version available. You can check the latest release [here](https://github.com/henrygd/beszel/releases). + required: true + - type: dropdown id: component attributes: @@ -12,81 +34,53 @@ body: - Hub - Agent - Hub & Agent + default: 0 validations: required: true - - type: markdown - attributes: - value: | - ### Thanks for taking the time to fill out this bug report! - - For more general support, please [start a support thread](https://github.com/henrygd/beszel/discussions/new?category=support). - - To request a change or feature, use the [feature request form](https://github.com/henrygd/beszel/issues/new?template=feature_request.yml). - - Please do not submit bugs that are specific to ZFS. We plan to add integration with ZFS utilities in the near future. - - ### Before submitting a bug report: - - - Check the [common issues guide](https://beszel.dev/guide/common-issues). - - Search existing [issues](https://github.com/henrygd/beszel/issues) and [discussions](https://github.com/henrygd/beszel/discussions) (including closed). - type: textarea id: description attributes: - label: Description - description: Explain the issue you experienced clearly and concisely. - placeholder: I went to the coffee pot and it was empty. + label: Problem Description + description: | + How to write a good bug report? + + - Respect the issue template as much as possible. + - The title should be short and descriptive. + - Explain the conditions which led you to report this issue: the context. + - The context should lead to something, a problem that you’re facing. + - Remain clear and concise. + - Format your messages to help the reader focus on what matters and understand the structure of your message, use [Markdown syntax](https://help.github.com/articles/github-flavored-markdown) validations: required: true + - type: textarea id: expected-behavior attributes: label: Expected Behavior - description: In a perfect world, what should have happened? + description: | + In a perfect world, what should have happened? + **Important:** Be specific. Vague descriptions like "it should work" are not helpful. placeholder: When I got to the coffee pot, it should have been full. validations: required: true + - type: textarea id: steps-to-reproduce attributes: label: Steps to Reproduce - description: Describe how to reproduce the issue in repeatable steps. + description: | + Provide detailed, numbered steps that someone else can follow to reproduce the issue. + **Important:** Vague descriptions like "it doesn't work" or "it's broken" will result in the issue being closed. + Include specific actions, URLs, button clicks, and any relevant data or configuration. placeholder: | 1. Go to the coffee pot. 2. Make more coffee. 3. Pour it into a cup. + 4. Observe that the cup is empty instead of full. validations: required: true - - type: dropdown - id: category - attributes: - label: Category - description: Which category does this relate to most? - options: - - Metrics - - Charts & Visualization - - Settings & Configuration - - Notifications & Alerts - - Authentication - - Installation - - Performance - - UI / UX - - Other - validations: - required: true - - type: dropdown - id: metrics - attributes: - label: Affected Metrics - description: If applicable, which specific metric does this relate to most? - options: - - CPU - - Memory - - Storage - - Network - - Containers - - GPU - - Sensors - - Other - validations: - required: true + - type: input id: system attributes: @@ -94,6 +88,7 @@ body: placeholder: linux/amd64 (agent), freebsd/arm64 (hub) validations: required: true + - type: input id: version attributes: @@ -101,6 +96,7 @@ body: placeholder: 0.9.1 validations: required: true + - type: dropdown id: install-method attributes: @@ -114,18 +110,21 @@ body: - Other (please describe above) validations: required: true + - type: textarea id: config attributes: label: Configuration description: Please provide any relevant service configuration render: yaml + - type: textarea id: hub-logs attributes: label: Hub Logs description: Check the logs page in PocketBase (`/_/#/logs`) for relevant errors (copy JSON). render: json + - type: textarea id: agent-logs attributes: diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml index 3cd4f8d0..50b2cae4 100644 --- a/.github/ISSUE_TEMPLATE/config.yml +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -1,5 +1,8 @@ blank_issues_enabled: false contact_links: + - name: 🗣️ Translations + url: https://crowdin.com/project/beszel + about: Please report translation issues and request new translations here. - name: 💬 Support and questions url: https://github.com/henrygd/beszel/discussions about: Ask and answer questions here. diff --git a/.github/ISSUE_TEMPLATE/feature_request.yml b/.github/ISSUE_TEMPLATE/feature_request.yml index f8e7bd3d..7a37d735 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.yml +++ b/.github/ISSUE_TEMPLATE/feature_request.yml @@ -1,8 +1,25 @@ name: 🚀 Feature request description: Request a new feature or change. title: "[Feature]: " -labels: ["enhancement", "needs review"] +labels: ["enhancement"] body: + - type: checkboxes + attributes: + label: Welcome! + description: | + The issue tracker is for reporting bugs and feature requests only. For end-user related support questions, please use the **[GitHub Discussions](https://github.com/henrygd/beszel/discussions)** instead + + Please note: + - For **Bug reports**, use the [Bug Form](https://github.com/henrygd/beszel/issues/new?template=bug_report.yml). + - Any requests for new translations should be requested within the [crowdin project](https://crowdin.com/project/beszel). + - Create one issue per feature request. This helps us keep track of requests and prioritize them accordingly. + + options: + - label: I have searched open and closed feature requests to make sure this or similar feature request does not already exist. + required: true + - label: This is a feature request, not a bug report or support question. + required: true + - type: dropdown id: component attributes: @@ -12,65 +29,29 @@ body: - Hub - Agent - Hub & Agent + default: 0 validations: required: true - - type: markdown - attributes: - value: Before submitting, please search existing [issues](https://github.com/henrygd/beszel/issues) and [discussions](https://github.com/henrygd/beszel/discussions) (including closed). + - type: textarea + id: description attributes: - label: Describe the feature you would like to see + label: Description + description: | + Describe the solution or feature you'd like. Explain what problem this solves or what value it adds. + **Important:** Be specific and detailed. Vague requests like "make it better" will be closed. + placeholder: | + Example: + - What is the feature? + - What problem does it solve? + - How should it work? validations: required: true + - type: textarea id: motivation attributes: label: Motivation / Use Case description: Why do you want this feature? What problem does it solve? - validations: - required: true - - type: textarea - attributes: - label: Describe how you would like to see this feature implemented - validations: - required: true - - type: textarea - id: logs - attributes: - label: Screenshots - description: Please attach any relevant screenshots, such as images from your current solution or similar implementations. - validations: - required: false - - type: dropdown - id: category - attributes: - label: Category - description: Which category does this relate to most? - options: - - Metrics - - Charts & Visualization - - Settings & Configuration - - Notifications & Alerts - - Authentication - - Installation - - Performance - - UI / UX - - Other - validations: - required: true - - type: dropdown - id: metrics - attributes: - label: Affected Metrics - description: If applicable, which specific metric does this relate to most? - options: - - CPU - - Memory - - Storage - - Network - - Containers - - GPU - - Sensors - - Other validations: required: true \ No newline at end of file diff --git a/.github/workflows/inactivity-actions.yml b/.github/workflows/inactivity-actions.yml index 18a777f6..6ea8e718 100644 --- a/.github/workflows/inactivity-actions.yml +++ b/.github/workflows/inactivity-actions.yml @@ -51,7 +51,8 @@ jobs: # Labels stale-issue-label: 'stale' remove-stale-when-updated: true - only-issue-labels: 'awaiting-requester' + any-of-labels: 'awaiting-requester' + exempt-issue-labels: 'enhancement' # Exemptions exempt-assignees: true diff --git a/.github/workflows/label-from-dropdown.yml b/.github/workflows/label-from-dropdown.yml deleted file mode 100644 index 871ceb29..00000000 --- a/.github/workflows/label-from-dropdown.yml +++ /dev/null @@ -1,82 +0,0 @@ -name: Label issues from dropdowns - -on: - issues: - types: [opened] - -jobs: - label_from_dropdown: - runs-on: ubuntu-latest - permissions: - issues: write - steps: - - name: Apply labels based on dropdown choices - uses: actions/github-script@v7 - with: - script: | - - const issueNumber = context.issue.number; - const owner = context.repo.owner; - const repo = context.repo.repo; - - // Get the issue body - const body = context.payload.issue.body; - - // Helper to find dropdown value in the body (assuming markdown format) - function extractSectionValue(heading) { - const regex = new RegExp(`### ${heading}\\s+([\\s\\S]*?)(?:\\n###|$)`, 'i'); - const match = body.match(regex); - if (match) { - // Get the first non-empty line after the heading - const lines = match[1].split('\n').map(l => l.trim()).filter(Boolean); - return lines[0] || null; - } - return null; - } - - // Extract dropdown selections - const category = extractSectionValue('Category'); - const metrics = extractSectionValue('Affected Metrics'); - const component = extractSectionValue('Component'); - - // Build labels to add - let labelsToAdd = []; - if (category) labelsToAdd.push(category); - if (metrics) labelsToAdd.push(metrics); - if (component) labelsToAdd.push(component); - - // Get existing labels in the repo - const { data: existingLabels } = await github.rest.issues.listLabelsForRepo({ - owner, - repo, - per_page: 100 - }); - const existingLabelNames = existingLabels.map(l => l.name); - - // Find labels that need to be created - const labelsToCreate = labelsToAdd.filter(label => !existingLabelNames.includes(label)); - - // Create missing labels (with a default color) - for (const label of labelsToCreate) { - try { - await github.rest.issues.createLabel({ - owner, - repo, - name: label, - color: 'ededed' // light gray, you can pick any hex color - }); - } catch (e) { - // Ignore if label already exists (race condition), otherwise rethrow - if (!e || e.status !== 422) throw e; - } - } - - // Now apply all labels (they all exist now) - if (labelsToAdd.length > 0) { - await github.rest.issues.addLabels({ - owner, - repo, - issue_number: issueNumber, - labels: labelsToAdd - }); - } \ No newline at end of file