mirror of
https://github.com/LukeHagar/vercel.git
synced 2025-12-10 04:22:12 +00:00
[build-utils][cli][client][node][next][static-config]: forward crons from vercel.json to config.json (#9454)
This PR changes the way cron jobs are being created in the build output API. This is my first time contributing here. If you see something unusual, let me know. ✅ Good for review Our goal is to: - Allow creating cron jobs via the `crons` property of `vercel.json` for end users - Allow framework authors to create cron jobs on Vercel via the `crons` property of the Build Output API configuration --- As you can see, we removed the previous implementation where cron jobs could be configured at the function code level (export const cron = ""), on top of vercel.json `functions` property. Here's why: - All frameworks would have to implement the configure at the function code level - Not all frameworks can easily map a path to a specific function (example: SvelteKit) and would have to bail on bundling functions inside the same lambda - Configuring a path + scheduler provides a better mapping of what cron jobs are as of today: API routes on a schedule and not functions on a schedule - Dynamic routes Cron Jobs will be supported: /api/crons/sync-slack-team/230 - Query parameters will be supported support: /api/crons/sync-slack-team/230?secret=32k13l2k13lk21 (= securing cron jobs v0) - 100% frameworks compatibility from day one Next.js and other frameworks may choose to implement their own cron jobs feature that will then need to be configured through the `crons` property of `config.json` (build output API). cc @timneutkens @Rich-Harris Internal thread: https://vercel.slack.com/archives/C04DWF5HB6K/p1676366892714349
This commit is contained in:
@@ -1104,32 +1104,20 @@ describe('build', () => {
|
||||
|
||||
it('should include crons property in build output', async () => {
|
||||
const cwd = fixture('with-cron');
|
||||
const output = join(cwd, '.vercel', 'output', 'functions', 'api');
|
||||
const output = join(cwd, '.vercel', 'output');
|
||||
|
||||
try {
|
||||
process.chdir(cwd);
|
||||
const exitCode = await build(client);
|
||||
expect(exitCode).toBe(0);
|
||||
|
||||
const edge = await fs.readJSON(
|
||||
join(output, 'edge.func', '.vc-config.json')
|
||||
);
|
||||
expect(edge).toHaveProperty('cron', '* * * * *');
|
||||
|
||||
const serverless = await fs.readJSON(
|
||||
join(output, 'serverless.func', '.vc-config.json')
|
||||
);
|
||||
expect(serverless).toHaveProperty('cron', '* * * * *');
|
||||
|
||||
const overwriteServerless = await fs.readJSON(
|
||||
join(output, 'overwrite', 'serverless.func', '.vc-config.json')
|
||||
);
|
||||
expect(overwriteServerless).toHaveProperty('cron', '0 10-20 * * *');
|
||||
|
||||
const overwriteEdge = await fs.readJSON(
|
||||
join(output, 'overwrite', 'edge.func', '.vc-config.json')
|
||||
);
|
||||
expect(overwriteEdge).toHaveProperty('cron', '10 * * * *');
|
||||
const config = await fs.readJSON(join(output, 'config.json'));
|
||||
expect(config).toHaveProperty('crons', [
|
||||
{
|
||||
path: '/api/cron-job',
|
||||
schedule: '0 0 * * *',
|
||||
},
|
||||
]);
|
||||
} finally {
|
||||
process.chdir(originalCwd);
|
||||
delete process.env.__VERCEL_BUILD_RUNNING;
|
||||
|
||||
Reference in New Issue
Block a user