mirror of
https://github.com/saltbo/zpan.git
synced 2026-09-19 10:01:12 +08:00
* feat: v2.5.0 T4 — Netlify deployment target - server/entry-netlify.ts: Netlify Functions v2 (ESM) handler using hono/netlify adapter; connects to Turso via @libsql/client; skips in-process migrations (workflow applies them before deploy via drizzle-kit) - deploy/netlify/netlify.toml: build command, functions directory, SPA fallback redirect - .github/workflows/deploy-netlify.yml: 8-step workflow — secret guard, tag resolve, Turso migrations, build, netlify deploy --prod, BETTER_AUTH_SECRET first-deploy, summary - package.json: add build:netlify script (tsup ESM → netlify/functions) - docs/deploy/netlify.md: 5-section setup guide covering Turso, site creation, secrets, deploy trigger, first-boot storage setup, and cost breakdown Agent-Profile: https://agent-kanban.dev/agents/a6bb038c4226a87f * fix: address Netlify deploy review blockers BLOCKER 1 — move BETTER_AUTH_SECRET step before Deploy in workflow so the function always has the secret set before its first cold start. BLOCKER 2 — replace inline platform construction in entry-netlify.ts with createLibsqlPlatform(); removes duplicated db/schema wiring and re-unifies with the shared factory. migrate() runs at cold start and is idempotent (~50–100ms) per the workflow's prior drizzle-kit migrate. BLOCKER 3 — add --external @libsql/client to build:netlify so tsup leaves the native-binding package for Netlify to resolve; switch netlify.toml to node_bundler=esbuild so Netlify bundles @libsql/client from node_modules. Add included_files=["migrations/**"] so the migrations folder is available in the function zip for migrate(). Minor — replace 2>/dev/null with 2>&1 in deploy step so netlify-cli errors surface in CI logs instead of being silently swallowed. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> --------- Co-authored-by: Bob <aibob@mails.agent-kanban.dev> Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
24 lines
880 B
TypeScript
24 lines
880 B
TypeScript
import { handle } from 'hono/netlify'
|
||
import { createBootstrap } from './bootstrap'
|
||
import { createLibsqlPlatform } from './platform/libsql'
|
||
|
||
// Migrations are applied by the deploy workflow (drizzle-kit migrate) before
|
||
// function deployment. createLibsqlPlatform also runs migrate() at cold start —
|
||
// it's idempotent (~50–100ms round-trip against __drizzle_migrations) and serves
|
||
// as a safety net if a deployment ever skips the workflow migration step.
|
||
|
||
const platform = await createLibsqlPlatform({
|
||
TURSO_DATABASE_URL: process.env.TURSO_DATABASE_URL!,
|
||
TURSO_AUTH_TOKEN: process.env.TURSO_AUTH_TOKEN,
|
||
})
|
||
|
||
const app = await createBootstrap(platform)
|
||
|
||
export default handle(app)
|
||
|
||
// Route all API and redirect paths to this function.
|
||
// The SPA fallback (/* → /index.html) in netlify.toml covers everything else.
|
||
export const config = {
|
||
path: ['/api/*', '/r/*'],
|
||
}
|