Skip to content

feat(demo-app): demo.sonicjs.com app with auto-reseed #1286

feat(demo-app): demo.sonicjs.com app with auto-reseed

feat(demo-app): demo.sonicjs.com app with auto-reseed #1286

Triggered via pull request July 6, 2026 23:13
@lane711lane711
synchronize #986
Status Failure
Total duration 1m 50s
Artifacts

pr-tests.yml

on: pull_request_target
Fit to window
Zoom out
Zoom in

Annotations

10 errors and 3 warnings
src/plugins/core-plugins/email-plugin/hooks/on-cron-tick.test.ts > onCronTick — happy path (credentials present) > graphql_error: logs warning when GraphQL request fails (non-200): packages/core/src/plugins/core-plugins/email-plugin/hooks/on-cron-tick.test.ts#L168
AssertionError: expected "warn" to be called with arguments: [ …(2) ] Number of calls: 0 ❯ src/plugins/core-plugins/email-plugin/hooks/on-cron-tick.test.ts:168:18
src/plugins/core-plugins/email-plugin/hooks/on-cron-tick.test.ts > onCronTick — happy path (credentials present) > ok: logs reconciliation result when rows are returned and updated: packages/core/src/plugins/core-plugins/email-plugin/hooks/on-cron-tick.test.ts#L152
AssertionError: expected "log" to be called with arguments: [ StringContaining{…}, …(1) ] Number of calls: 0 ❯ src/plugins/core-plugins/email-plugin/hooks/on-cron-tick.test.ts:152:17
src/plugins/core-plugins/email-plugin/hooks/on-cron-tick.test.ts > onCronTick — credential check > logs and skips when EMAIL_API_TOKEN is missing: packages/core/src/plugins/core-plugins/email-plugin/hooks/on-cron-tick.test.ts#L79
AssertionError: expected "warn" to be called with arguments: [ StringContaining{…}, …(1) ] Number of calls: 0 ❯ src/plugins/core-plugins/email-plugin/hooks/on-cron-tick.test.ts:79:18
src/plugins/core-plugins/email-plugin/hooks/on-cron-tick.test.ts > onCronTick — credential check > logs and skips when CF_ZONE_ID is missing: packages/core/src/plugins/core-plugins/email-plugin/hooks/on-cron-tick.test.ts#L62
AssertionError: expected "warn" to be called with arguments: [ StringContaining{…}, …(1) ] Number of calls: 0 ❯ src/plugins/core-plugins/email-plugin/hooks/on-cron-tick.test.ts:62:18
src/plugins/core-plugins/email-plugin/__tests__/integration.test.ts: packages/core/src/plugins/core-plugins/email-plugin/__tests__/integration.test.ts#L18
Error: Cannot find module '../../../../services/email-service-singleton' imported from /home/runner/work/sonicjs/sonicjs/packages/core/src/plugins/core-plugins/email-plugin/__tests__/integration.test.ts ❯ src/plugins/core-plugins/email-plugin/__tests__/integration.test.ts:18:1 ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ Serialized Error: { code: 'ERR_MODULE_NOT_FOUND' }
src/__tests__/routes/api-content-crud-documents.integration.test.ts > api-content-crud → documents (decommission step) > PUT saves a new draft and republishes it: packages/core/src/__tests__/routes/api-content-crud-documents.integration.test.ts#L70
AssertionError: expected 1 to be 2 // Object.is equality - Expected + Received - 2 + 1 ❯ src/__tests__/routes/api-content-crud-documents.integration.test.ts:70:98
src/__tests__/routes/admin-content-docbacked.integration.test.ts > admin-content Option B (document-backed blog_post) — integration > does NOT offer internal/auth-owned types on the new-content collection selector: packages/core/src/__tests__/routes/admin-content-docbacked.integration.test.ts#L170
AssertionError: expected '\n <!DOCTYPE html>\n <h…' not to contain '?collection=media_asset' - Expected + Received - ?collection=media_asset + + <!DOCTYPE html> + <html> + <head> + <title>Select Collection - SonicJS AI Admin</title> + <script src="https://cdn.tailwindcss.com"></script> + </head> + <body class="bg-gray-900 text-white"> + <div class="min-h-screen flex items-center justify-center"> + <div class="max-w-2xl w-full mx-auto p-8"> + <h1 class="text-3xl font-bold mb-8 text-center">Create New Content</h1> + <p class="text-gray-300 text-center mb-8">Select a collection to create content in:</p> + + <div class="grid gap-4"> + + <a href="/admin/content/new?collection=blog_post" + class="block p-6 bg-gray-800 rounded-lg hover:bg-gray-700 transition-colors border border-gray-700"> + <h3 class="text-xl font-semibold mb-2">Blog Post</h3> + <p class="text-gray-400">Blog post (document-backed; edited via the content collection UI)</p> + </a> + + <a href="/admin/content/new?collection=media_asset" + class="block p-6 bg-gray-800 rounded-lg hover:bg-gray-700 transition-colors border border-gray-700"> + <h3 class="text-xl font-semibold mb-2">Media Asset</h3> + <p class="text-gray-400">Media file metadata (R2 object key + intrinsic properties; URL derived at read time)</p> + </a> + + </div> + + <div class="mt-8 text-center"> + <a href="/admin/content" class="text-blue-400 hover:text-blue-300">← Back to Content List</a> + </div> + </div> + </div> + </body> + </html> + ❯ src/__tests__/routes/admin-content-docbacked.integration.test.ts:170:28
src/__tests__/routes/admin-content-docbacked.integration.test.ts > admin-content Option B (document-backed blog_post) — integration > does NOT offer internal/auth-owned types as content models in the filter dropdown: packages/core/src/__tests__/routes/admin-content-docbacked.integration.test.ts#L158
AssertionError: expected '<!DOCTYPE html>\n<html lang="en" clas…' not to contain 'value="media_asset"' - Expected + Received - value="media_asset" + <!DOCTYPE html> + <html lang="en" class="dark"> + <head> + <meta charset="UTF-8"> + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + <title>Content Management - SonicJS AI Admin</title> + <link rel="icon" type="image/svg+xml" href="/favicon.svg"> + + <!-- Tailwind CSS --> + <script src="https://cdn.tailwindcss.com"></script> + <script> + tailwind.config = { + darkMode: 'class', + theme: { + extend: { + colors: { + zinc: { + 50: '#fafafa', + 100: '#f4f4f5', + 200: '#e4e4e7', + 300: '#d4d4d8', + 400: '#a1a1aa', + 500: '#71717a', + 600: '#52525b', + 700: '#3f3f46', + 800: '#27272a', + 900: '#18181b', + 950: '#09090b' + } + } + } + } + } + </script> + + <!-- Additional Styles --> + <style> + @import url('https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&display=swap'); + + * { + margin: 0; + padding: 0; + box-sizing: border-box; + } + + body { + font-family: 'Inter', system-ui, -apple-system, sans-serif; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + } + + /* Custom scrollbar */ + ::-webkit-scrollbar { + width: 8px; + height: 8px; + } + + ::-webkit-scrollbar-track { + background: #27272a; + } + + ::-webkit-scrollbar-thumb { + background: #52525b; + border-radius: 4px; + } + + ::-webkit-scrollbar-thumb:hover { + background: #71717a; + } + + /* Smooth transitions */ + * { + transition-property: color, background-color, border-color, text-decoration-color, fill, stroke; + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + transition-duration: 150ms; + } + .plugins-closed [data-plugins-submenu] { display: none; } + </style> + <!-- Restore plugins submenu state before first paint (no flash) --> + <script>(function(){try{var c=document.cookie.split(';').reduce(function(v,p){var t=p.trim().split('=');return t[0]==='plugins_menu_open'?t[1]:v;},null);if(c==='0'){document.documentElement.classList.add('plugins-closed');document.addEventListener('DOMContentLoaded',function(){var ch=document.querySelector('[data-plugins-chevron]');if(ch)ch.classList.remove('rotate-180');});};}catch(e){}})();</script> + + <!-- Scripts --> + <script src="https://unpkg.com/htmx.org@2.0.3"></script> + <script src="https://unpkg.com/alpinejs@3.x.x/dist/cdn.min.js" defer></script> + <script src="https://cdn.jsdelivr.net/npm/chart.js@4.4.0/dist/chart.umd.min.js"></script> + + <!-- CSRF: Auto-attach token to all HTMX and fetch requests --> + <script> + function getCsrfToken() { + var cookie = document.cookie.split('; ') + .find(function(row) { return row.startsWith('csrf_token='); }); + return cookie ? cookie.substring(cookie.indexOf('=') + 1) : ''; + } + + document.addEventListener('htmx:configRequest', function(event) { + var token = getCsrfToken(); + if (token) { + event.detail.headers['X-CSRF-Token'] = token; + } + }); + + (function() { + var originalFetch = window.fetch; + window.fetch = function(url, options) { + options = options || {}; + var method = (options.method || 'GET').toUpperCase(); + if (method !== 'GET' && method !== 'HEAD' && method !== 'OPTIONS') { + options.headers = options.headers || {}; + if (options.headers instanceof Headers) { + if (!options.headers.has('X-CSRF-Token')) { + options.headers.set('X-CSRF-Token', getCsrfToken()); + } + } else if (!Array.isArray(options.headers) && !options.headers['X-CSRF
test
Node.js 20 is deprecated. The following actions target Node.js 20 but are being forced to run on Node.js 24: actions/checkout@v4, actions/setup-node@v4, actions/upload-artifact@v4. For more information see: https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/
test
No files were found with the provided path: test-results/**/*.webm playwright-report/**/*.webm. No artifacts will be uploaded.
test
No files were found with the provided path: playwright-report/. No artifacts will be uploaded.