Skip to content

On the Ubuntu operating system, write EPIPE error #273

On the Ubuntu operating system, write EPIPE error

On the Ubuntu operating system, write EPIPE error #273

name: Similar Issues via AI MCP
on:
issues:
types: [opened]
jobs:
find-similar:
permissions:
contents: read
issues: write
models: read
runs-on: ubuntu-latest
steps:
- name: Check out repository
uses: actions/checkout@v6
- name: Prepare prompt variables
id: prepare_input
uses: actions/github-script@v8
with:
script: |
const issue = context.payload.issue || {};
const title = issue.title || '';
const body = issue.body || '';
const indent = ' ';
// Indent subsequent lines so YAML block scalar indentation remains valid
const bodyIndented = body.replace(/\n/g, '\n' + indent);
core.setOutput('issue_title_json', JSON.stringify(title));
core.setOutput('issue_body_indented_json', JSON.stringify(bodyIndented));
- name: Find similar issues with AI (MCP)
id: inference
uses: actions/ai-inference@v2
with:
prompt-file: ./.github/prompts/similar_issues.prompt.yml
input: |
issue_title: ${{ steps.prepare_input.outputs.issue_title_json }}
issue_body: ${{ steps.prepare_input.outputs.issue_body_indented_json }}
repository: ${{ github.repository }}
enable-github-mcp: true
token: ${{ secrets.GITHUB_TOKEN }}
github-mcp-token: ${{ secrets.USER_PAT }}
endpoint: https://models.github.ai/orgs/RSSNext/inference
- name: Prepare comment body
id: prepare
uses: actions/github-script@v8
env:
AI_RESPONSE: ${{ steps.inference.outputs.response }}
with:
script: |
let data;
try {
data = JSON.parse(process.env.AI_RESPONSE || '{}');
} catch (e) {
core.setOutput('has_matches', 'false');
return;
}
const matches = Array.isArray(data.matches) ? data.matches : [];
const rawIssueNumber = context?.payload?.issue?.number;
const issueNumber = typeof rawIssueNumber === 'string' ? Number(rawIssueNumber) : rawIssueNumber;
const filteredMatches = Number.isFinite(issueNumber)
? matches.filter((m) => {
const matchNumber = typeof m?.number === 'string' ? Number(m.number) : m?.number;
if (Number.isFinite(matchNumber)) {
return matchNumber !== issueNumber;
}
if (typeof m?.url === 'string') {
const urlMatch = m.url.match(/\/issues\/(\d+)(?:$|[?#])/);
if (urlMatch) {
return Number(urlMatch[1]) !== issueNumber;
}
}
return true;
})
: matches;
if (!filteredMatches.length) {
core.setOutput('has_matches', 'false');
return;
}
const lines = [];
lines.push('I found similar issues that might help:');
for (const m of filteredMatches.slice(0, 3)) {
const num = m.number != null ? `#${m.number}` : '';
const title = m.title || 'Untitled';
const url = m.url || '';
const score = typeof m.similarity_score === 'number' ? ` (similarity: ${m.similarity_score.toFixed(2)})` : '';
lines.push(`- ${url}${score}`.trim());
}
core.setOutput('has_matches', 'true');
core.setOutput('comment_body', lines.join('\n'));
- name: Comment similar issues
if: steps.prepare.outputs.has_matches == 'true'
uses: actions/github-script@v8
with:
script: |
const body = ${{ toJson(steps.prepare.outputs.comment_body) }};
await github.rest.issues.createComment({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: context.payload.issue.number,
body
});