From 9d3bc0f17366d42c4ece6cb65e8bf3d0a83958bd Mon Sep 17 00:00:00 2001 From: bymyself Date: Sun, 12 Jan 2025 11:23:02 -0700 Subject: [PATCH] Add optional report feature to error dialog (#2229) Co-authored-by: github-actions --- .github/workflows/release.yaml | 2 + browser_tests/dialog.spec.ts | 12 + global.d.ts | 2 + package-lock.json | 91 +++++++ package.json | 1 + src/components/common/CheckboxGroup.vue | 40 +++ .../content/ExecutionErrorDialogContent.vue | 54 +++- .../content/error/ReportIssueButton.vue | 52 ---- .../dialog/content/error/ReportIssuePanel.vue | 197 +++++++++++++++ .../error/__tests__/ReportIssuePanel.spec.ts | 230 ++++++++++++++++++ src/locales/en/main.json | 13 +- src/locales/fr/main.json | 13 +- src/locales/ja/main.json | 13 +- src/locales/ko/main.json | 13 +- src/locales/ru/main.json | 13 +- src/locales/zh/main.json | 13 +- src/main.ts | 12 + src/types/issueReportTypes.ts | 24 ++ vite.config.mts | 10 +- 19 files changed, 733 insertions(+), 72 deletions(-) create mode 100644 src/components/common/CheckboxGroup.vue delete mode 100644 src/components/dialog/content/error/ReportIssueButton.vue create mode 100644 src/components/dialog/content/error/ReportIssuePanel.vue create mode 100644 src/components/dialog/content/error/__tests__/ReportIssuePanel.spec.ts create mode 100644 src/types/issueReportTypes.ts diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index 5c093d9f1..f71cac918 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -25,6 +25,8 @@ jobs: id: current_version run: echo ::set-output name=version::$(node -p "require('./package.json').version") - name: Build project + env: + SENTRY_DSN: ${{ secrets.SENTRY_DSN }} run: | npm ci npm run build diff --git a/browser_tests/dialog.spec.ts b/browser_tests/dialog.spec.ts index ea856091d..4218f79df 100644 --- a/browser_tests/dialog.spec.ts +++ b/browser_tests/dialog.spec.ts @@ -44,6 +44,18 @@ test.describe('Execution error', () => { const executionError = comfyPage.page.locator('.comfy-error-report') await expect(executionError).toBeVisible() }) + + test('Can display Issue Report form', async ({ comfyPage }) => { + await comfyPage.loadWorkflow('execution_error') + await comfyPage.queueButton.click() + await comfyPage.nextFrame() + + await comfyPage.page.getByLabel('Help Fix This').click() + const issueReportForm = comfyPage.page.getByText( + 'Submit Error Report (Optional)' + ) + await expect(issueReportForm).toBeVisible() + }) }) test.describe('Missing models warning', () => { diff --git a/global.d.ts b/global.d.ts index 41aa0c1ef..a9361846e 100644 --- a/global.d.ts +++ b/global.d.ts @@ -1 +1,3 @@ declare const __COMFYUI_FRONTEND_VERSION__: string +declare const __SENTRY_ENABLED__: boolean +declare const __SENTRY_DSN__: string diff --git a/package-lock.json b/package-lock.json index b21c8c7bb..3e60baea0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,6 +13,7 @@ "@comfyorg/comfyui-electron-types": "^0.4.7", "@comfyorg/litegraph": "^0.8.60", "@primevue/themes": "^4.0.5", + "@sentry/vue": "^8.48.0", "@tiptap/core": "^2.10.4", "@tiptap/extension-link": "^2.10.4", "@tiptap/extension-table": "^2.10.4", @@ -4462,6 +4463,96 @@ "string-argv": "~0.3.1" } }, + "node_modules/@sentry-internal/browser-utils": { + "version": "8.48.0", + "resolved": "https://registry.npmjs.org/@sentry-internal/browser-utils/-/browser-utils-8.48.0.tgz", + "integrity": "sha512-pLtu0Fa1Ou0v3M1OEO1MB1EONJVmXEGtoTwFRCO1RPQI2ulmkG6BikINClFG5IBpoYKZ33WkEXuM6U5xh+pdZg==", + "dependencies": { + "@sentry/core": "8.48.0" + }, + "engines": { + "node": ">=14.18" + } + }, + "node_modules/@sentry-internal/feedback": { + "version": "8.48.0", + "resolved": "https://registry.npmjs.org/@sentry-internal/feedback/-/feedback-8.48.0.tgz", + "integrity": "sha512-6PwcJNHVPg0EfZxmN+XxVOClfQpv7MBAweV8t9i5l7VFr8sM/7wPNSeU/cG7iK19Ug9ZEkBpzMOe3G4GXJ5bpw==", + "dependencies": { + "@sentry/core": "8.48.0" + }, + "engines": { + "node": ">=14.18" + } + }, + "node_modules/@sentry-internal/replay": { + "version": "8.48.0", + "resolved": "https://registry.npmjs.org/@sentry-internal/replay/-/replay-8.48.0.tgz", + "integrity": "sha512-csILVupc5RkrsTrncuUTGmlB56FQSFjXPYWG8I8yBTGlXEJ+o8oTuF6+55R4vbw3EIzBveXWi4kEBbnQlXW/eg==", + "dependencies": { + "@sentry-internal/browser-utils": "8.48.0", + "@sentry/core": "8.48.0" + }, + "engines": { + "node": ">=14.18" + } + }, + "node_modules/@sentry-internal/replay-canvas": { + "version": "8.48.0", + "resolved": "https://registry.npmjs.org/@sentry-internal/replay-canvas/-/replay-canvas-8.48.0.tgz", + "integrity": "sha512-LdivLfBXXB9us1aAc6XaL7/L2Ob4vi3C/fEOXElehg3qHjX6q6pewiv5wBvVXGX1NfZTRvu+X11k6TZoxKsezw==", + "dependencies": { + "@sentry-internal/replay": "8.48.0", + "@sentry/core": "8.48.0" + }, + "engines": { + "node": ">=14.18" + } + }, + "node_modules/@sentry/browser": { + "version": "8.48.0", + "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-8.48.0.tgz", + "integrity": "sha512-fuuVULB5/1vI8NoIwXwR3xwhJJqk+y4RdSdajExGF7nnUDBpwUJyXsmYJnOkBO+oLeEs58xaCpotCKiPUNnE3g==", + "dependencies": { + "@sentry-internal/browser-utils": "8.48.0", + "@sentry-internal/feedback": "8.48.0", + "@sentry-internal/replay": "8.48.0", + "@sentry-internal/replay-canvas": "8.48.0", + "@sentry/core": "8.48.0" + }, + "engines": { + "node": ">=14.18" + } + }, + "node_modules/@sentry/core": { + "version": "8.48.0", + "resolved": "https://registry.npmjs.org/@sentry/core/-/core-8.48.0.tgz", + "integrity": "sha512-VGwYgTfLpvJ5LRO5A+qWo1gpo6SfqaGXL9TOzVgBucAdpzbrYHpZ87sEarDVq/4275uk1b0S293/mfsskFczyw==", + "engines": { + "node": ">=14.18" + } + }, + "node_modules/@sentry/vue": { + "version": "8.48.0", + "resolved": "https://registry.npmjs.org/@sentry/vue/-/vue-8.48.0.tgz", + "integrity": "sha512-hqm9X7hz1vMQQB1HBYezrDBQihZk6e/MxWIG1wMJoClcBnD1Sh7y+D36UwaQlR4Gr/Ftiz+Bb0DxuAYHoUS4ow==", + "dependencies": { + "@sentry/browser": "8.48.0", + "@sentry/core": "8.48.0" + }, + "engines": { + "node": ">=14.18" + }, + "peerDependencies": { + "pinia": "2.x", + "vue": "2.x || 3.x" + }, + "peerDependenciesMeta": { + "pinia": { + "optional": true + } + } + }, "node_modules/@sinclair/typebox": { "version": "0.27.8", "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", diff --git a/package.json b/package.json index 8324bfb5b..28dcac30e 100644 --- a/package.json +++ b/package.json @@ -86,6 +86,7 @@ "@comfyorg/comfyui-electron-types": "^0.4.7", "@comfyorg/litegraph": "^0.8.60", "@primevue/themes": "^4.0.5", + "@sentry/vue": "^8.48.0", "@tiptap/core": "^2.10.4", "@tiptap/extension-link": "^2.10.4", "@tiptap/extension-table": "^2.10.4", diff --git a/src/components/common/CheckboxGroup.vue b/src/components/common/CheckboxGroup.vue new file mode 100644 index 000000000..490f54b7f --- /dev/null +++ b/src/components/common/CheckboxGroup.vue @@ -0,0 +1,40 @@ + + + diff --git a/src/components/dialog/content/ExecutionErrorDialogContent.vue b/src/components/dialog/content/ExecutionErrorDialogContent.vue index 722355333..1c6bbab8f 100644 --- a/src/components/dialog/content/ExecutionErrorDialogContent.vue +++ b/src/components/dialog/content/ExecutionErrorDialogContent.vue @@ -5,12 +5,20 @@ :message="props.error.exception_message" />
-
- +
- { reportOpen.value = true } -const showSendError = isElectron() - +const sendReportOpen = ref(false) +const showSendReport = () => { + sendReportOpen.value = true +} const toast = useToast() +const { t } = useI18n() + +const stackTraceField = computed(() => { + return { + label: t('issueReport.stackTrace'), + value: 'StackTrace', + optIn: true, + data: { + nodeType: props.error.node_type, + stackTrace: props.error.traceback?.join('\n') + } + } +}) onMounted(async () => { try { diff --git a/src/components/dialog/content/error/ReportIssueButton.vue b/src/components/dialog/content/error/ReportIssueButton.vue deleted file mode 100644 index 0bf2e7721..000000000 --- a/src/components/dialog/content/error/ReportIssueButton.vue +++ /dev/null @@ -1,52 +0,0 @@ - - - diff --git a/src/components/dialog/content/error/ReportIssuePanel.vue b/src/components/dialog/content/error/ReportIssuePanel.vue new file mode 100644 index 000000000..12cfd2e8a --- /dev/null +++ b/src/components/dialog/content/error/ReportIssuePanel.vue @@ -0,0 +1,197 @@ +