From 13d257b905cdc8d3ac87c4944ccbbc9de95f57a3 Mon Sep 17 00:00:00 2001 From: Bilal Godil Date: Mon, 13 Jul 2026 13:33:22 -0700 Subject: [PATCH] Preserve inherited function durations --- apps/backend/api/config-github-cancel.ts | 8 ++++++++ apps/backend/api/index.ts | 2 +- apps/backend/src/server/vercel-config.test.ts | 12 ++++++++++-- apps/backend/vercel.json | 1 + 4 files changed, 20 insertions(+), 3 deletions(-) create mode 100644 apps/backend/api/config-github-cancel.ts diff --git a/apps/backend/api/config-github-cancel.ts b/apps/backend/api/config-github-cancel.ts new file mode 100644 index 000000000..8059677c1 --- /dev/null +++ b/apps/backend/api/config-github-cancel.ts @@ -0,0 +1,8 @@ +import app from "../dist/vercel.mjs"; + +export const config = { + runtime: "nodejs", + maxDuration: 60, +}; + +export default app; diff --git a/apps/backend/api/index.ts b/apps/backend/api/index.ts index 8059677c1..993b6a9c7 100644 --- a/apps/backend/api/index.ts +++ b/apps/backend/api/index.ts @@ -1,8 +1,8 @@ import app from "../dist/vercel.mjs"; +// Preserve the project-level duration inherited by routes without a pre-Elysia override. export const config = { runtime: "nodejs", - maxDuration: 60, }; export default app; diff --git a/apps/backend/src/server/vercel-config.test.ts b/apps/backend/src/server/vercel-config.test.ts index b83eb08b5..3e2b660e2 100644 --- a/apps/backend/src/server/vercel-config.test.ts +++ b/apps/backend/src/server/vercel-config.test.ts @@ -2,11 +2,13 @@ import { readFile } from "node:fs/promises"; import { describe, expect, it } from "vitest"; describe("Vercel function durations", () => { - it("preserves the route-specific limits from the Next.js deployment", async () => { - const [vercelJson, applyEntry, commitEntry] = await Promise.all([ + it("preserves inherited and route-specific limits from the Next.js deployment", async () => { + const [vercelJson, defaultEntry, applyEntry, commitEntry, cancelEntry] = await Promise.all([ readFile(new URL("../../vercel.json", import.meta.url), "utf8"), + readFile(new URL("../../api/index.ts", import.meta.url), "utf8"), readFile(new URL("../../api/config-github-apply.ts", import.meta.url), "utf8"), readFile(new URL("../../api/config-github-commit.ts", import.meta.url), "utf8"), + readFile(new URL("../../api/config-github-cancel.ts", import.meta.url), "utf8"), ]); expect(JSON.parse(vercelJson)).toMatchObject({ @@ -19,13 +21,19 @@ describe("Vercel function durations", () => { source: "/api/:version/internal/config/github/commit", destination: "/api/config-github-commit", }, + { + source: "/api/:version/internal/config/github/cancel", + destination: "/api/config-github-cancel", + }, { source: "/(.*)", destination: "/api", }, ], }); + expect(defaultEntry).not.toContain("maxDuration"); expect(applyEntry).toContain("maxDuration: 800"); expect(commitEntry).toContain("maxDuration: 120"); + expect(cancelEntry).toContain("maxDuration: 60"); }); }); diff --git a/apps/backend/vercel.json b/apps/backend/vercel.json index fb7b45f13..f12b1888e 100644 --- a/apps/backend/vercel.json +++ b/apps/backend/vercel.json @@ -4,6 +4,7 @@ "rewrites": [ { "source": "/api/:version/internal/config/github/apply", "destination": "/api/config-github-apply" }, { "source": "/api/:version/internal/config/github/commit", "destination": "/api/config-github-commit" }, + { "source": "/api/:version/internal/config/github/cancel", "destination": "/api/config-github-cancel" }, { "source": "/(.*)", "destination": "/api" } ], "crons": [