kit
kit copied to clipboard
Netlify builds fail when split functions for layout group endpoints are generated
Describe the bug
After migrating to the latest svelte version and following this guide to do so, I have noticed that all builds using adapter-netlify fail if the adapter is configured like so:
kit: {
adapter: adapter({
edge: false,
split: true
})
}
I must use split as my render function generated by the adapter exceeds the 50MB size limit for Netlify functions. This way, I have come across the following error in the Netlify build log.
Packaging Functions from .netlify/functions-internal directory: 1:07:35 PM: - (layoutgroup)-demo.mjs 1:07:35 PM: - index.mjs
Deploy did not succeed: [PUT /sites/{site_id}/deploys/{deploy_id}][422] updateSiteDeploy default &{Code:422 Message:Incorrect function names. Name should consist of only alphanumeric characters, hyphen & underscores}
This error clearly states that Netlify doesn't support the brackets "()" as characters inside function names. This issue is reproducible, and I have provided a minimal repo to test this out. Note that you must deploy to Netlify to see the build fail.
Reproduction
Minimal repo to reproduce can be found below. Note: You will have to deploy to Netlify to see the error. https://github.com/Conceptiks/netlify-layout-group-bug
Logs
1:07:35 PM: ────────────────────────────────────────────────────────────────
1:07:35 PM: 2. Functions bundling
1:07:35 PM: ────────────────────────────────────────────────────────────────
1:07:35 PM:
1:07:35 PM: Packaging Functions from .netlify/functions-internal directory:
1:07:35 PM: - (layoutgroup)-demo.mjs
1:07:35 PM: - index.mjs
1:07:35 PM:
1:07:36 PM:
1:07:36 PM: (Functions bundling completed in 758ms)
1:07:36 PM:
1:07:36 PM: ────────────────────────────────────────────────────────────────
1:07:36 PM: 3. Deploy site
1:07:36 PM: ────────────────────────────────────────────────────────────────
1:07:36 PM:
1:07:36 PM: Starting to deploy site from 'build'
1:07:36 PM: Creating deploy tree
1:07:37 PM:
1:07:37 PM: ────────────────────────────────────────────────────────────────
1:07:37 PM: Configuration error
1:07:37 PM: ────────────────────────────────────────────────────────────────
1:07:37 PM:
1:07:37 PM: Error message
1:07:37 PM: Deploy did not succeed: [PUT /sites/{site_id}/deploys/{deploy_id}][422] updateSiteDeploy default &{Code:422 Message:Incorrect function names. Name should consist of only alphanumeric characters, hyphen & underscores}
1:07:37 PM:
1:07:37 PM: Resolved config
1:07:37 PM: build:
1:07:37 PM: command: npm run build
1:07:37 PM: commandOrigin: ui
1:07:37 PM: publish: /opt/build/repo/build
1:07:37 PM: publishOrigin: ui
1:07:37 PM: headers:
1:07:37 PM: - for: /_app/immutable/*
values:
cache-control: public, immutable, max-age=31536000
redirects:
- from: /
status: 200
to: /.netlify/functions/index
- from: //__data.js
status: 200
to: /.netlify/functions/index
- from: /(layoutgroup)/demo
status: 200
to: /.netlify/functions/(layoutgroup)-demo
- from: /(layoutgroup)/demo/__data.js
status: 200
to: /.netlify/functions/(layoutgroup)-demo
1:07:37 PM: Execution cancelled
1:07:37 PM: Error running command: Command was cancelled
1:07:37 PM: Failing build: Failed to build site
1:07:37 PM: Finished processing build request in 16.833005617s
System Info
System:
OS: Linux 5.15 Ubuntu 22.04 LTS 22.04 (Jammy Jellyfish)
CPU: (16) x64 Intel(R) Core(TM) i9-9900K CPU @ 3.60GHz
Memory: 23.69 GB / 31.28 GB
Container: Yes
Shell: 5.1.16 - /bin/bash
Binaries:
Node: 16.16.0 - /usr/local/bin/node
npm: 8.11.0 - /usr/local/bin/npm
Browsers:
Chrome: 104.0.5112.79
npmPackages:
@sveltejs/adapter-auto: next => 1.0.0-next.74
@sveltejs/adapter-netlify: ^1.0.0-next.77 => 1.0.0-next.77
@sveltejs/kit: next => 1.0.0-next.483
svelte: ^3.44.0 => 3.50.1
vite: ^3.1.0 => 3.1.1
Severity
blocking an upgrade
Additional Information
No response
Since this topic is still open: Unfortunately, I have no experience in the development of adapters, otherwise I would be more than happy to assist in creating the PR. Looking around in the repo for the adapter, I think I have identified the correct part of the code where something needs to be changed:
https://github.com/sveltejs/kit/blob/315b64316d8159a58a0b45970f59f58a30cd8a26/packages/adapter-netlify/index.js#L163-L203
The question that I can't answer is how these serverless functions are linked to the inner workings of SvelteKit. I assume that randomly renaming the Netlify functions will result in a broken adapter, although I have not tried this.
Can anyone help here?