mirror of
https://github.com/oven-sh/bun
synced 2026-02-02 15:08:46 +00:00
Add sentry id to crash report comment
This commit is contained in:
56
.github/workflows/labeled.yml
vendored
56
.github/workflows/labeled.yml
vendored
@@ -83,6 +83,26 @@ jobs:
|
||||
echo "latest=$(cat LATEST)" >> $GITHUB_OUTPUT
|
||||
|
||||
rm -rf is-outdated.txt outdated.txt latest.txt
|
||||
- name: Generate comment text with Sentry Link
|
||||
if: github.event.label.name == 'crash'
|
||||
# ignore if fail
|
||||
continue-on-error: true
|
||||
id: generate-comment-text
|
||||
env:
|
||||
GITHUB_ISSUE_BODY: ${{ github.event.issue.body }}
|
||||
SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }}
|
||||
shell: bash
|
||||
run: |
|
||||
bun scripts/associate-issue-with-sentry.ts
|
||||
|
||||
if [[ -f "sentry-link.txt" ]]; then
|
||||
echo "sentry-link=$(cat sentry-link.txt)" >> $GITHUB_OUTPUT
|
||||
fi
|
||||
|
||||
if [[ -f "sentry-id.txt" ]]; then
|
||||
echo "sentry-id=$(cat sentry-id.txt)" >> $GITHUB_OUTPUT
|
||||
fi
|
||||
|
||||
- name: Add labels
|
||||
uses: actions-cool/issues-helper@v3
|
||||
if: github.event.label.name == 'crash'
|
||||
@@ -92,7 +112,7 @@ jobs:
|
||||
issue-number: ${{ github.event.issue.number }}
|
||||
labels: ${{ steps.add-labels.outputs.labels }}
|
||||
- name: Comment outdated
|
||||
if: steps.add-labels.outputs.is-outdated == 'true' && github.event.label.name == 'crash'
|
||||
if: steps.add-labels.outputs.is-outdated == 'true' && github.event.label.name == 'crash' && steps.generate-comment-text.outputs.sentry-link == ''
|
||||
uses: actions-cool/issues-helper@v3
|
||||
with:
|
||||
actions: "create-comment"
|
||||
@@ -106,6 +126,40 @@ jobs:
|
||||
```sh
|
||||
bun upgrade
|
||||
```
|
||||
- name: Comment with Sentry Link and outdated version
|
||||
if: steps.generate-comment-text.outputs.sentry-link != '' && github.event.label.name == 'crash' && steps.add-labels.outputs.is-outdated == 'true'
|
||||
uses: actions-cool/issues-helper@v3
|
||||
with:
|
||||
actions: "create-comment"
|
||||
token: ${{ secrets.GITHUB_TOKEN }}
|
||||
issue-number: ${{ github.event.issue.number }}
|
||||
body: |
|
||||
@${{ github.event.issue.user.login }}, thank you for reporting this crash. The latest version of Bun is v${{ steps.add-labels.outputs.latest }}, but this crash was reported on Bun v${{ steps.add-labels.outputs.oudated }}.
|
||||
|
||||
Are you able to reproduce this crash on the latest version of Bun?
|
||||
|
||||
```sh
|
||||
bun upgrade
|
||||
```
|
||||
|
||||
For Bun's internal tracking, this issue is [${{ steps.generate-comment-text.outputs.sentry-id }}](${{ steps.generate-comment-text.outputs.sentry-link }}).
|
||||
|
||||
<!-- sentry-id: ${{ steps.generate-comment-text.outputs.sentry-id }} -->
|
||||
<!-- sentry-link: ${{ steps.generate-comment-text.outputs.sentry-link }} -->
|
||||
- name: Comment with Sentry Link
|
||||
if: steps.generate-comment-text.outputs.sentry-link != '' && github.event.label.name == 'crash' && steps.add-labels.outputs.is-outdated != 'true'
|
||||
uses: actions-cool/issues-helper@v3
|
||||
with:
|
||||
actions: "create-comment"
|
||||
token: ${{ secrets.GITHUB_TOKEN }}
|
||||
issue-number: ${{ github.event.issue.number }}
|
||||
body: |
|
||||
Thank you for reporting this crash.
|
||||
|
||||
For Bun's internal tracking, this issue is [${{ steps.generate-comment-text.outputs.sentry-id }}](${{ steps.generate-comment-text.outputs.sentry-link }}).
|
||||
|
||||
<!-- sentry-id: ${{ steps.generate-comment-text.outputs.sentry-id }} -->
|
||||
<!-- sentry-link: ${{ steps.generate-comment-text.outputs.sentry-link }} -->
|
||||
- name: Comment needs repro
|
||||
if: github.event.label.name == 'needs repro'
|
||||
uses: actions-cool/issues-helper@v3
|
||||
|
||||
49
scripts/associate-issue-with-sentry.ts
Normal file
49
scripts/associate-issue-with-sentry.ts
Normal file
@@ -0,0 +1,49 @@
|
||||
const body = process.env.GITHUB_ISSUE_BODY;
|
||||
const SENTRY_AUTH_TOKEN = process.env.SENTRY_AUTH_TOKEN;
|
||||
|
||||
if (!body || !SENTRY_AUTH_TOKEN) {
|
||||
throw new Error("Missing environment variables");
|
||||
}
|
||||
|
||||
const id = body.indexOf("<!-- sentry_id: ");
|
||||
const endIdLine = body.indexOf(" -->", id + 1);
|
||||
if (!(id > -1 && endIdLine > -1)) {
|
||||
throw new Error("Missing sentry_id");
|
||||
}
|
||||
const sentryId = body.slice(id + "<!-- sentry_id: ".length, endIdLine).trim();
|
||||
if (!sentryId) {
|
||||
throw new Error("Missing sentry_id");
|
||||
}
|
||||
|
||||
const response = await fetch(`https://sentry.io/api/0/organizations/4507155222364160/events/${sentryId}/`, {
|
||||
headers: {
|
||||
Authorization: `Bearer ${SENTRY_AUTH_TOKEN}`,
|
||||
},
|
||||
});
|
||||
if (!response.ok) {
|
||||
throw new Error(`Failed to fetch Sentry event: ${response.statusText}`);
|
||||
}
|
||||
const json = await response.json();
|
||||
const groupId = json?.groupId;
|
||||
if (!groupId) {
|
||||
throw new Error("Missing groupId");
|
||||
}
|
||||
|
||||
const issueResponse = await fetch(`https://sentry.io/api/0/issues/${groupId}/`, {
|
||||
headers: {
|
||||
Authorization: `Bearer ${SENTRY_AUTH_TOKEN}`,
|
||||
},
|
||||
});
|
||||
if (!issueResponse.ok) {
|
||||
throw new Error(`Failed to fetch Sentry issue: ${issueResponse.statusText}`);
|
||||
}
|
||||
const { shortId, permalink } = await issueResponse.json();
|
||||
if (!shortId || !permalink) {
|
||||
throw new Error("Missing shortId or permalink");
|
||||
}
|
||||
|
||||
console.log(`Sentry ID: ${shortId}`);
|
||||
console.log(`Sentry permalink: ${permalink}`);
|
||||
|
||||
await Bun.write("sentry-id.txt", shortId);
|
||||
await Bun.write("sentry-link.txt", permalink);
|
||||
Reference in New Issue
Block a user