diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml new file mode 100644 index 000000000..f2b71b0e5 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -0,0 +1,86 @@ +name: Bug report +description: Report something that is broken or not behaving as expected. +labels: ["bug"] +body: + - type: markdown + attributes: + value: | + Thanks for filing a bug. Fields marked required drive our triage automation + (scope labeling and the completeness check). Please fill in as much as you + can — a bot will tag you if anything required is missing. + + - type: dropdown + id: scope + attributes: + label: Scope / Area + description: Which part of the product does this touch? + options: + - Editor / Canvas + - Blocks / Rendering + - Config / Sheets + - Auth / Permissions + - AI Assistant / Agent + - MCP / Tooling + - Infra / CI + - Docs + - Other / Unsure + validations: + required: true + + - type: dropdown + id: affected + attributes: + label: Who is affected? + description: Is this customer-facing or internal? + options: + - Customer-facing + - Internal + validations: + required: true + + - type: textarea + id: what-happened + attributes: + label: What happened? + description: A clear description of the bug, including what you expected instead. + validations: + required: true + + - type: textarea + id: repro-steps + attributes: + label: Steps to reproduce + description: Minimal, numbered steps someone else can follow. + placeholder: | + 1. Go to ... + 2. Click ... + 3. See error + validations: + required: true + + - type: textarea + id: repro-links + attributes: + label: Reproduction link(s) + description: URL(s) where the bug can be observed (before/after, test site, deployed branch). + placeholder: | + - Before: https://main--{repo}--{owner}.aem.live/ + - After: https://--{repo}--{owner}.aem.live/ + validations: + required: true + + - type: input + id: video + attributes: + label: Video (optional) + description: A short screen recording helps a lot, but it is not required. + validations: + required: false + + - type: input + id: version + attributes: + label: Environment / version + description: Branch, commit, or deployed URL where you saw this. + validations: + required: false diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 000000000..39ad2c6af --- /dev/null +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1,5 @@ +blank_issues_enabled: false +contact_links: + - name: Question or discussion + url: https://github.com/adobe/da-nx/discussions + about: For open-ended questions and ideas, please start a discussion instead of an issue. diff --git a/.github/ISSUE_TEMPLATE/feature_request.yml b/.github/ISSUE_TEMPLATE/feature_request.yml new file mode 100644 index 000000000..419424c24 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.yml @@ -0,0 +1,55 @@ +name: Feature request +description: Suggest a new capability or an improvement. +labels: ["enhancement"] +body: + - type: markdown + attributes: + value: | + Thanks for the idea. Fields marked required drive our triage automation + (scope labeling and the completeness check). A bot will tag you if + anything required is missing. + + - type: dropdown + id: scope + attributes: + label: Scope / Area + description: Which part of the product does this touch? + options: + - Editor / Canvas + - Blocks / Rendering + - Config / Sheets + - Auth / Permissions + - AI Assistant / Agent + - MCP / Tooling + - Infra / CI + - Docs + - Other / Unsure + validations: + required: true + + - type: dropdown + id: affected + attributes: + label: Who is affected? + description: Is this customer-facing or internal? + options: + - Customer-facing + - Internal + validations: + required: true + + - type: textarea + id: problem + attributes: + label: Problem / motivation + description: What are you trying to do, and why is it hard today? + validations: + required: true + + - type: textarea + id: proposal + attributes: + label: Proposed solution + description: What would you like to see happen? + validations: + required: false diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index 026dac98f..83cbff67b 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -5,3 +5,4 @@ Fix # Test URLs: - Before: https://main--{repo}--{owner}.hlx.live/ - After: https://--{repo}--{owner}.hlx.live/ + diff --git a/.github/workflows/issue-completeness.yml b/.github/workflows/issue-completeness.yml new file mode 100644 index 000000000..f35e63e2f --- /dev/null +++ b/.github/workflows/issue-completeness.yml @@ -0,0 +1,99 @@ +name: Issue completeness check + +# Verifies a new/edited issue has the information triage needs. If anything is +# missing it applies the `triage-incomplete` label and leaves a single comment +# (tagging the reporter) listing what's needed. The comment is updated in place +# as the issue is fixed, and both the comment and label clear once it's complete. +# +# Required: a description, customer-vs-developer, a priority (P0-P3), and — for +# bugs — reproduction steps and a reproduction link. A video is prompted but +# never blocks. + +on: + issues: + types: [opened, edited] + +permissions: + issues: write + +jobs: + check: + # Don't react to issues opened by bots (avoids automation loops). + if: ${{ github.event.issue.user.type != 'Bot' }} + runs-on: ubuntu-latest + steps: + - uses: actions/github-script@v7 + with: + script: | + const MARKER = ''; + const INCOMPLETE = 'triage-incomplete'; + + const body = context.payload.issue.body || ''; + const author = context.payload.issue.user.login; + const { owner, repo } = context.repo; + const issue_number = context.payload.issue.number; + const labels = (context.payload.issue.labels || []).map(l => l.name); + const isBug = labels.includes('bug'); + + const esc = (s) => s.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); + // Grab the first non-empty line under a "###