diff --git a/.github/workflows/issue_autolabel.yml b/.github/workflows/issue_autolabel.yml index 629966b95933..2cb5c176ae0a 100644 --- a/.github/workflows/issue_autolabel.yml +++ b/.github/workflows/issue_autolabel.yml @@ -383,4 +383,107 @@ jobs: core.notice(`All users for label "${label}" already mentioned, skipping comment`); } } - } \ No newline at end of file + } + + - name: Request missing ROCm info from issue author + if: contains(steps.label-step.outputs.labels_added, 'rocm') && contains(toJSON(github.event.issue.labels.*.name), 'bug') + uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0 + with: + script: | + const body = (context.payload.issue.body || '').toLowerCase(); + + // Check for existing bot comments to avoid duplicate requests + const comments = await github.rest.issues.listComments({ + owner: context.repo.owner, + repo: context.repo.repo, + issue_number: context.issue.number, + }); + const botAlreadyAsked = comments.data.some( + c => c.user.type === 'Bot' && c.body.includes('') + ); + if (botAlreadyAsked) { + core.notice('ROCm info request already posted, skipping'); + return; + } + + // Define required information and detection patterns + const requiredInfo = [ + { + name: 'Reproducer', + patterns: [ + /reproduc/i, /minimal.?example/i, /repro\b/i, /steps to reproduce/i, + /code.?snippet/i, /sample.?code/i, + /```python[\s\S]*?```/, /```bash[\s\S]*?```/, /```sh[\s\S]*?```/, + ], + ask: 'A minimal reproducer (code snippet or script that triggers the issue)', + }, + { + name: 'Error message', + patterns: [ + /error/i, /traceback/i, /exception/i, /fault/i, /crash/i, + /failed/i, /abort/i, /panic/i, + ], + ask: 'The full error message or traceback', + }, + { + name: 'Installation method', + patterns: [ + /docker/i, /rocm\/pytorch/i, /dockerfile/i, /from source/i, + /pip install/i, /build.?from/i, /container/i, /image/i, + /wheel/i, /\.whl/i, /nightly/i, + ], + ask: 'How you installed vLLM (Docker image name, pip install, or build from source steps)', + }, + { + name: 'Command', + patterns: [ + /vllm serve/i, /python\s+\S+\.py/i, /```bash[\s\S]*?```/, + /```sh[\s\S]*?```/, /command/i, /launch/i, /run\s/i, + /--model/i, /--tensor-parallel/i, /--gpu-memory/i, + ], + ask: 'The command you used to launch vLLM (e.g., `vllm serve ...` or the Python script)', + }, + { + name: 'GFX architecture', + patterns: [ + /gfx\d{3,4}/i, /mi\d{3}/i, /mi\d{2}\b/i, /radeon/i, + /gpu.?arch/i, /rocm-smi/i, /rocminfo/i, /navi/i, + /instinct/i, + ], + ask: 'Your GPU model and GFX architecture (e.g., MI300X / gfx942) — run `rocminfo | grep gfx`', + }, + ]; + + const issueBody = context.payload.issue.body || ''; + const missing = requiredInfo.filter(info => + !info.patterns.some(p => p.test(issueBody)) + ); + + if (missing.length === 0) { + core.notice('All required ROCm info appears to be present'); + return; + } + + const author = context.payload.issue.user.login; + const checklist = requiredInfo.map(info => { + const found = !missing.includes(info); + return `- [${found ? 'x' : ' '}] ${info.ask}`; + }).join('\n'); + const message = [ + '', + `Hi @${author}, thanks for reporting this ROCm issue!`, + '', + 'To help us investigate, please make sure the following information is included:', + '', + checklist, + '', + 'Please provide any unchecked items above. This will help us reproduce and resolve the issue faster. Thank you!', + ].join('\n'); + + await github.rest.issues.createComment({ + owner: context.repo.owner, + repo: context.repo.repo, + issue_number: context.issue.number, + body: message, + }); + core.notice(`Requested missing ROCm info from @${author}: ${missing.map(m => m.name).join(', ')}`); \ No newline at end of file