From 9a465bf6aa61b2eda956c6a344b08efdebb037de Mon Sep 17 00:00:00 2001 From: Natalia Venditto Date: Mon, 7 Sep 2026 08:31:40 +0200 Subject: [PATCH 1/7] chore(ci): add issue triage, stale, and Slack PR automation - add issue forms (bug/feature) with required EW, scope, request-type, and priority fields; disable blank issues - triage-assign: apply `ew` and `scope:*` labels and auto-assign area owners - issue-completeness: flag missing info with `triage-incomplete` plus an OP-tagged comment that clears once the issue is complete - stale: warn then close inactive issues (60d + 21d) and PRs (49d + 14d) - slack-pr-ticker: route core vs outside-contributor PRs to two channels - document the automation in CONTRIBUTING.md Co-Authored-By: Claude Opus 4.8 --- .github/ISSUE_TEMPLATE/bug_report.yml | 114 +++++++++++++++++++++ .github/ISSUE_TEMPLATE/config.yml | 5 + .github/ISSUE_TEMPLATE/feature_request.yml | 82 +++++++++++++++ .github/pull_request_template.md | 7 ++ .github/workflows/issue-completeness.yml | 100 ++++++++++++++++++ .github/workflows/pr-ew-review.yml | 48 +++++++++ .github/workflows/slack-pr-ticker.yml | 71 +++++++++++++ .github/workflows/stale.yml | 63 ++++++++++++ .github/workflows/triage-assign.yml | 84 +++++++++++++++ CONTRIBUTING.md | 48 +++++++++ 10 files changed, 622 insertions(+) create mode 100644 .github/ISSUE_TEMPLATE/bug_report.yml create mode 100644 .github/ISSUE_TEMPLATE/config.yml create mode 100644 .github/ISSUE_TEMPLATE/feature_request.yml create mode 100644 .github/workflows/issue-completeness.yml create mode 100644 .github/workflows/pr-ew-review.yml create mode 100644 .github/workflows/slack-pr-ticker.yml create mode 100644 .github/workflows/stale.yml create mode 100644 .github/workflows/triage-assign.yml diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml new file mode 100644 index 000000000..501ec2d0e --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -0,0 +1,114 @@ +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 + (the `ew` label, area assignment, 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: ew + attributes: + label: Experience Workspace (EW) related? + description: Does this issue involve the Experience Workspace (EW) assistant / AI experience? + options: + - "No" + - "Yes" + validations: + required: true + + - type: dropdown + id: scope + attributes: + label: Scope / Area + description: Which part of the product does this touch? This drives auto-assignment. + options: + - Editor / Canvas + - Blocks / Rendering + - Heli + - Config / Sheets + - Auth / Permissions + - AI Assistant / Agent + - MCP / Tooling + - Infra / CI + - Docs + - Other / Unsure + validations: + required: true + + - type: dropdown + id: request-type + attributes: + label: Customer request or developer need? + description: Where is this coming from? + options: + - Customer request + - Developer need + validations: + required: true + + - type: dropdown + id: priority + attributes: + label: Priority + description: | + P0 = production down / data loss, P1 = major broken, no workaround, + P2 = important but has a workaround, P3 = minor / nice to have. + Maintainers may adjust this during triage. + options: + - P0 + - P1 + - P2 + - P3 + 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..68685f3bd --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.yml @@ -0,0 +1,82 @@ +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 + (the `ew` label, area assignment, and the completeness check). A bot will + tag you if anything required is missing. + + - type: dropdown + id: ew + attributes: + label: Experience Workspace (EW) related? + description: Does this request involve the Experience Workspace (EW) assistant / AI experience? + options: + - "No" + - "Yes" + validations: + required: true + + - type: dropdown + id: scope + attributes: + label: Scope / Area + description: Which part of the product does this touch? This drives auto-assignment. + options: + - Editor / Canvas + - Blocks / Rendering + - Heli + - Config / Sheets + - Auth / Permissions + - AI Assistant / Agent + - MCP / Tooling + - Infra / CI + - Docs + - Other / Unsure + validations: + required: true + + - type: dropdown + id: request-type + attributes: + label: Customer request or developer need? + description: Where is this coming from? + options: + - Customer request + - Developer need + validations: + required: true + + - type: dropdown + id: priority + attributes: + label: Priority + description: | + P0 = critical / blocking, P1 = high, P2 = medium, P3 = low. + Maintainers may adjust this during triage. + options: + - P0 + - P1 + - P2 + - P3 + 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..9d19d0c9a 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -5,3 +5,10 @@ Fix # Test URLs: - Before: https://main--{repo}--{owner}.hlx.live/ - After: https://--{repo}--{owner}.hlx.live/ + +## Experience Workspace (EW) + +- [ ] This PR touches Experience Workspace (EW) + + + diff --git a/.github/workflows/issue-completeness.yml b/.github/workflows/issue-completeness.yml new file mode 100644 index 000000000..f09f09bdc --- /dev/null +++ b/.github/workflows/issue-completeness.yml @@ -0,0 +1,100 @@ +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 "###