6666 permissions :
6767 contents : read
6868 outputs :
69+ triage_triggered : ${{ steps.evaluate.outputs.triage_triggered }}
70+ size_triggered : ${{ steps.evaluate.outputs.size_triggered }}
6971 issue_scope_triggered : ${{ steps.evaluate.outputs.issue_scope_triggered }}
7072
7173 steps :
@@ -86,14 +88,21 @@ jobs:
8688
8789 const previousState = menu.parseMenuState(previousBody);
8890 const currentState = menu.parseMenuState(body);
91+ const triageTriggered = !previousState.triage.selected && currentState.triage.selected;
92+ const sizeTriggered = !previousState.size.selected && currentState.size.selected;
8993 const issueScopeTriggered = !previousState.issueScope.selected && currentState.issueScope.selected;
9094
95+ core.setOutput('triage_triggered', String(triageTriggered));
96+ core.setOutput('size_triggered', String(sizeTriggered));
9197 core.setOutput('issue_scope_triggered', String(issueScopeTriggered));
9298
9399 refresh-menu-after-trigger :
94100 name : Refresh AI menu after trigger
95101 needs : [evaluate-trigger]
96- if : needs.evaluate-trigger.outputs.issue_scope_triggered == 'true'
102+ if : >-
103+ needs.evaluate-trigger.outputs.triage_triggered == 'true' ||
104+ needs.evaluate-trigger.outputs.size_triggered == 'true' ||
105+ needs.evaluate-trigger.outputs.issue_scope_triggered == 'true'
97106 runs-on : ubuntu-latest
98107 permissions :
99108 contents : read
@@ -118,6 +127,20 @@ jobs:
118127 const progressUrl = `${context.serverUrl}/${context.repo.owner}/${context.repo.repo}/actions/runs/${context.runId}`;
119128 const statusOverrides = {};
120129
130+ if ('${{ needs.evaluate-trigger.outputs.triage_triggered }}' === 'true') {
131+ statusOverrides.triage = {
132+ detailsUrl: progressUrl,
133+ status: 'in_progress',
134+ };
135+ }
136+
137+ if ('${{ needs.evaluate-trigger.outputs.size_triggered }}' === 'true') {
138+ statusOverrides.size = {
139+ detailsUrl: progressUrl,
140+ status: 'in_progress',
141+ };
142+ }
143+
121144 if ('${{ needs.evaluate-trigger.outputs.issue_scope_triggered }}' === 'true') {
122145 statusOverrides.issueScope = {
123146 detailsUrl: progressUrl,
@@ -134,6 +157,50 @@ jobs:
134157 statusOverrides,
135158 });
136159
160+ run-docs-triage :
161+ name : Docs AI / triage
162+ needs : [evaluate-trigger]
163+ if : needs.evaluate-trigger.outputs.triage_triggered == 'true'
164+ permissions :
165+ actions : read
166+ contents : read
167+ copilot-requests : write
168+ discussions : write
169+ issues : write
170+ pull-requests : write
171+ uses : elastic/docs-actions/.github/workflows/gh-aw-issue-triage.lock.yml@v1
172+ with :
173+ additional-instructions : |
174+ ## Team Ownership Mapping
175+
176+ This mapping is derived from the repository's CODEOWNERS file. Use it to determine which team owns each issue. Match based on the issue title, body, any mentioned URLs, and labels.
177+
178+ | Team Label | Owns | Keywords / URL paths |
179+ |---|---|---|
180+ | `Team:Admin` | Elasticsearch admin, cluster mgmt, cloud, deployment docs | Cluster management, index management, auth, roles, API keys, network security, cluster security, snapshots, ILM, data lifecycle, CCR, CCS, licensing, subscriptions, upgrade, monitoring, Elastic Cloud, ECE, ECK, serverless. Paths: `deploy-manage/`, `cloud-account/`, `manage-data/` (except `manage-data/ingest/`), `serverless/`, `troubleshoot/deployments/`, `troubleshoot/elasticsearch/` |
181+ | `Team:Experience` | Kibana, observability solution, security solution | Kibana, dashboards, visualizations, Discover, observability, security, APM UI, maps, canvas, Lens, alerting, rules, cases, SIEM, endpoint security, detection rules, security analytics. Paths: `explore-analyze/` (default), `solutions/observability/`, `solutions/security/`, `reference/kibana/`, `reference/observability/`, `reference/security/` |
182+ | `Team:Developer` | Elasticsearch developer, search solution docs | Elasticsearch APIs, ES|QL, query DSL, search features, relevance, vector search, semantic search, inference APIs, connectors, developer tools, clients, search applications, App Search, Workplace Search. Paths: `solutions/search/`, `reference/elasticsearch/clients/`, `reference/search/`, `reference/machine-learning/`, `explore-analyze/ai-features/`, `explore-analyze/cross-cluster-search/`, `explore-analyze/cross-project-search/`, `explore-analyze/transforms/` |
183+ | `Team:Ingest` | Data ingestion, Fleet, APM agents docs | Fleet, Elastic Agent, Beats, Logstash, pipelines, integrations, data streams, APM agents, APM server, OpenTelemetry. Paths: `manage-data/ingest/`, `reference/apm-agents/`, `reference/fleet/`, `reference/ingestion-tools/`, `solutions/observability/apm/apm-agents/`, `solutions/observability/apm/apm-server/`, `solutions/observability/apm/ingest/`, `solutions/observability/apm/opentelemetry/` |
184+ | `Team:DocsEng` | Docs infrastructure | Docs build system, CI/CD, website rendering, broken navigation, docs-builder bugs, elastic.co website issues not related to content. Paths: `.github/workflows/`, `.github/scripts/` |
185+ | `Team:Projects` | Internal projects, docs initiatives | Internal documentation projects, content strategy, information architecture, get-started guides. Paths: `get-started/` |
186+
187+ **Shared ownership**: Some paths have shared ownership (e.g., `/explore-analyze/machine-learning/` is shared by Developer and Experience). Pick the team whose keywords best match the issue content.
188+ **Internal projects**: If the issue seems related to an internal documentation project, initiative, or content strategy effort, apply `Team:Projects`.
189+ **Fallback**: If you genuinely cannot determine the owning team, apply `cross-team` so the issue stays visible to all teams.
190+
191+ run-docs-size :
192+ name : Docs AI / size
193+ needs : [evaluate-trigger]
194+ if : needs.evaluate-trigger.outputs.size_triggered == 'true'
195+ permissions :
196+ actions : read
197+ contents : read
198+ copilot-requests : write
199+ discussions : write
200+ issues : write
201+ pull-requests : write
202+ uses : elastic/docs-actions/.github/workflows/gh-aw-issue-size.lock.yml@v1
203+
137204 run-docs-issue-scope :
138205 name : Docs AI / issue scope
139206 needs : [evaluate-trigger]
@@ -147,6 +214,100 @@ jobs:
147214 pull-requests : write
148215 uses : elastic/docs-actions/.github/workflows/gh-aw-docs-issue-scope.lock.yml@v1
149216
217+ refresh-menu-after-docs-triage :
218+ name : Refresh AI menu after docs triage
219+ needs : [evaluate-trigger, refresh-menu-after-trigger, run-docs-triage]
220+ if : always() && needs.evaluate-trigger.outputs.triage_triggered == 'true'
221+ runs-on : ubuntu-latest
222+ permissions :
223+ contents : read
224+ issues : write
225+ concurrency :
226+ group : docs-ai-menu-${{ github.event.issue.number }}
227+ cancel-in-progress : false
228+
229+ steps :
230+ - name : Checkout repository
231+ uses : actions/checkout@v6.0.2
232+ with :
233+ persist-credentials : false
234+
235+ - name : Refresh AI menu status
236+ uses : actions/github-script@v9.0.0
237+ with :
238+ github-token : ${{ secrets.GITHUB_TOKEN }}
239+ script : |
240+ const menu = require(`${process.env.GITHUB_WORKSPACE}/.github/scripts/docs_ai_menu.cjs`);
241+ const issueNumber = context.payload.issue.number;
242+ const progressUrl = `${context.serverUrl}/${context.repo.owner}/${context.repo.repo}/actions/runs/${context.runId}`;
243+ const triageResult = '${{ needs.run-docs-triage.result }}';
244+
245+ await menu.upsertMenuComment({
246+ core,
247+ createIfMissing: false,
248+ github,
249+ context,
250+ issueNumber,
251+ statusOverrides: {
252+ triage: {
253+ conclusion: triageResult === 'success'
254+ ? 'success'
255+ : triageResult === 'cancelled'
256+ ? 'cancelled'
257+ : 'failure',
258+ detailsUrl: progressUrl,
259+ status: 'completed',
260+ },
261+ },
262+ });
263+
264+ refresh-menu-after-docs-size :
265+ name : Refresh AI menu after docs size
266+ needs : [evaluate-trigger, refresh-menu-after-trigger, run-docs-size]
267+ if : always() && needs.evaluate-trigger.outputs.size_triggered == 'true'
268+ runs-on : ubuntu-latest
269+ permissions :
270+ contents : read
271+ issues : write
272+ concurrency :
273+ group : docs-ai-menu-${{ github.event.issue.number }}
274+ cancel-in-progress : false
275+
276+ steps :
277+ - name : Checkout repository
278+ uses : actions/checkout@v6.0.2
279+ with :
280+ persist-credentials : false
281+
282+ - name : Refresh AI menu status
283+ uses : actions/github-script@v9.0.0
284+ with :
285+ github-token : ${{ secrets.GITHUB_TOKEN }}
286+ script : |
287+ const menu = require(`${process.env.GITHUB_WORKSPACE}/.github/scripts/docs_ai_menu.cjs`);
288+ const issueNumber = context.payload.issue.number;
289+ const progressUrl = `${context.serverUrl}/${context.repo.owner}/${context.repo.repo}/actions/runs/${context.runId}`;
290+ const sizeResult = '${{ needs.run-docs-size.result }}';
291+
292+ await menu.upsertMenuComment({
293+ core,
294+ createIfMissing: false,
295+ github,
296+ context,
297+ issueNumber,
298+ statusOverrides: {
299+ size: {
300+ conclusion: sizeResult === 'success'
301+ ? 'success'
302+ : sizeResult === 'cancelled'
303+ ? 'cancelled'
304+ : 'failure',
305+ detailsUrl: progressUrl,
306+ status: 'completed',
307+ },
308+ },
309+ });
310+
150311 refresh-menu-after-docs-issue-scope :
151312 name : Refresh AI menu after docs issue scope
152313 needs : [evaluate-trigger, refresh-menu-after-trigger, run-docs-issue-scope]
0 commit comments