Expose workflow manifest via HTTP when WORKFLOW_PUBLIC_MANIFEST=1#963
Expose workflow manifest via HTTP when WORKFLOW_PUBLIC_MANIFEST=1#963TooTallNate merged 2 commits intomainfrom
WORKFLOW_PUBLIC_MANIFEST=1#963Conversation
📊 Benchmark Results
workflow with no steps💻 Local Development
▲ Production (Vercel)
🔍 Observability: Nitro | Express | Next.js (Turbopack) workflow with 1 step💻 Local Development
▲ Production (Vercel)
🔍 Observability: Nitro | Next.js (Turbopack) | Express workflow with 10 sequential steps💻 Local Development
▲ Production (Vercel)
🔍 Observability: Next.js (Turbopack) | Nitro | Express workflow with 25 sequential steps💻 Local Development
▲ Production (Vercel)
🔍 Observability: Nitro | Next.js (Turbopack) | Express workflow with 50 sequential steps💻 Local Development
▲ Production (Vercel)
🔍 Observability: Nitro | Next.js (Turbopack) | Express Promise.all with 10 concurrent steps💻 Local Development
▲ Production (Vercel)
🔍 Observability: Express | Next.js (Turbopack) | Nitro Promise.all with 25 concurrent steps💻 Local Development
▲ Production (Vercel)
🔍 Observability: Express | Nitro | Next.js (Turbopack) Promise.all with 50 concurrent steps💻 Local Development
▲ Production (Vercel)
🔍 Observability: Express | Next.js (Turbopack) | Nitro Promise.race with 10 concurrent steps💻 Local Development
▲ Production (Vercel)
🔍 Observability: Express | Nitro | Next.js (Turbopack) Promise.race with 25 concurrent steps💻 Local Development
▲ Production (Vercel)
🔍 Observability: Express | Nitro | Next.js (Turbopack) Promise.race with 50 concurrent steps💻 Local Development
▲ Production (Vercel)
🔍 Observability: Nitro | Next.js (Turbopack) | Express Stream Benchmarks (includes TTFB metrics)workflow with stream💻 Local Development
▲ Production (Vercel)
🔍 Observability: Next.js (Turbopack) | Nitro | Express SummaryFastest Framework by WorldWinner determined by most benchmark wins
Fastest World by FrameworkWinner determined by most benchmark wins
Column Definitions
Worlds:
|
🧪 E2E Test Results❌ Some tests failed Summary
❌ Failed Tests🌍 Community Worlds (169 failed)mongodb (42 failed):
redis (42 failed):
starter (43 failed):
turso (42 failed):
Details by Category✅ ▲ Vercel Production
✅ 💻 Local Development
✅ 📦 Local Production
✅ 🐘 Local Postgres
✅ 🪟 Windows
❌ 🌍 Community Worlds
✅ 📋 Other
|
🦋 Changeset detectedLatest commit: 97e1d18 The changes in this PR will be included in the next version bump. This PR includes changesets to release 15 packages
Not sure what this means? Click here to learn what changesets are. Click here if you're a maintainer who wants to add another changeset to this PR |
1ea385a to
c5e2098
Compare
c5e2098 to
5128c98
Compare
When WORKFLOW_PUBLIC_MANIFEST=1 is set, each framework builder exposes the manifest at /.well-known/workflow/v1/manifest.json via the most appropriate mechanism for the framework: - Next.js: Copies to public/.well-known/workflow/v1/ (static) - SvelteKit: Copies to static/.well-known/workflow/v1/ (static) - VercelBuildOutputAPI: Copies to .vercel/output/static/.well-known/workflow/v1/ (static) - Nitro (vite/hono/express/fastify/nuxt/nitro-v2/v3): Virtual handler - Astro: Generated manifest.json.js page route - NestJS: @get endpoint on WorkflowController Also fixes Astro LocalBuilder missing createManifest() call, removes the unused example workbench public/ directory, and changes BaseBuilder.createManifest() to return the manifest JSON string.
67ad128 to
fa58466
Compare
WORKFLOW_PUBLIC_MANIFEST=1
| await copyFile( | ||
| join(workflowGeneratedDir, 'manifest.json'), | ||
| join(publicManifestDir, 'manifest.json') | ||
| ); |
There was a problem hiding this comment.
Instead of placing this in a static folder which won't get cleaned up if this is added for one run but not on a successive run and then could get deployed it feels more correct for the flow.js endpoint to handle serving this or not.
That would reduce additional endpoint being exposed as well, similar to what we did for the health check
Merge activity
|
|
do we need to add |
Summary
When
WORKFLOW_PUBLIC_MANIFEST=1is set, each framework builder exposes the workflow manifest at/.well-known/workflow/v1/manifest.jsonvia the most appropriate mechanism for the framework:public/.well-known/workflow/v1/manifest.json(served as a static file)static/.well-known/workflow/v1/manifest.json(served as a static file).vercel/output/static/.well-known/workflow/v1/manifest.json(served as a static file)manifest.json.jspage route that returns the manifest JSON@Get('manifest.json')endpoint on theWorkflowController(gated by the env var at runtime)Other changes
BaseBuilder.createManifest()now returns the manifest JSON string so framework builders can use itshouldExposePublicManifestgetter toBaseBuilderLocalBuilderwhich was missing thecreateManifest()call that all other framework builders havepublic/directory and static file copy from the example workbench build scriptWORKFLOW_PUBLIC_MANIFESTtoturbo.jsonbuild task env so Vercel builds can access it.gitignore