Skip to content

Publish VS Code extension on Open VSX Registry for compatibility with VS Code forks (Kiro, Cursor, VSCodium) #131

Publish VS Code extension on Open VSX Registry for compatibility with VS Code forks (Kiro, Cursor, VSCodium)

Publish VS Code extension on Open VSX Registry for compatibility with VS Code forks (Kiro, Cursor, VSCodium) #131

name: Issue Management
permissions:
issues: write
pull-requests: write
on:
issues:
types: [opened, closed, reopened]
pull_request:
types: [closed]
jobs:
manage-issue-status:
runs-on: ubuntu-latest
if: github.event.action == 'opened' && github.event_name == 'issues'
steps:
- name: Add triage status to new issues
uses: actions/github-script@v7
with:
script: |
const issue = context.payload.issue;
const labels = issue.labels.map(label => label.name);
// Only add triage label if it doesn't already exist
if (!labels.includes('status: triage')) {
github.rest.issues.addLabels({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: issue.number,
labels: ['status: triage']
});
}
manage-linked-issues:
runs-on: ubuntu-latest
if: github.event.action == 'closed' && github.event.pull_request.merged == true
steps:
- name: Close linked issues
uses: actions/github-script@v7
with:
script: |
const pr = context.payload.pull_request;
const body = pr.body || '';
// Look for "closes #123", "fixes #123", "resolves #123" patterns
const issueRegex = /(?:close[sd]?|fix(?:e[sd])?|resolve[sd]?)\s+#(\d+)/gi;
let match;
while ((match = issueRegex.exec(body)) !== null) {
const issueNumber = parseInt(match[1]);
try {
// Update issue status to done
await github.rest.issues.addLabels({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: issueNumber,
labels: ['status: done']
});
// Remove other status labels
const issue = await github.rest.issues.get({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: issueNumber
});
const statusLabelsToRemove = issue.data.labels
.filter(label => label.name.startsWith('status:') && label.name !== 'status: done')
.map(label => label.name);
for (const labelName of statusLabelsToRemove) {
await github.rest.issues.removeLabel({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: issueNumber,
name: labelName
});
}
} catch (error) {
console.log(`Could not update issue #${issueNumber}: ${error.message}`);
}
}