Skip to content

Commit cc55529

Browse files
authored
feat: send all bundlers to metric (#4798)
* feat: send all bundlers to metric * chore: code nit
1 parent fbc98fd commit cc55529

File tree

6 files changed

+35
-13
lines changed

6 files changed

+35
-13
lines changed

packages/build/src/plugins_core/functions/index.js renamed to packages/build/src/plugins_core/functions/index.ts

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { resolve } from 'path'
22

3-
import { zipFunctions } from '@netlify/zip-it-and-ship-it'
3+
import { NodeBundlerType, RuntimeType, zipFunctions } from '@netlify/zip-it-and-ship-it'
44
import { pathExists } from 'path-exists'
55

66
import { log } from '../../log/logger.js'
@@ -10,10 +10,14 @@ import { getZipError } from './error.js'
1010
import { getUserAndInternalFunctions, validateFunctionsSrc } from './utils.js'
1111
import { getZisiParameters } from './zisi.js'
1212

13-
// Returns `true` if at least one of the functions has been configured to use
14-
// esbuild.
15-
const isUsingEsbuild = (functionsConfig = {}) =>
16-
Object.values(functionsConfig).some((configObject) => configObject.node_bundler === 'esbuild')
13+
// Get a list of all unique bundlers in this run
14+
const getBundlers = (results: Awaited<ReturnType<typeof zipFunctions>> = []) =>
15+
// using a Set to filter duplicates
16+
new Set(
17+
results
18+
.map((bundle) => (bundle.runtime === RuntimeType.JAVASCRIPT ? bundle.bundler : null))
19+
.filter(Boolean) as NodeBundlerType[],
20+
)
1721

1822
const zipFunctionsAndLogResults = async ({
1923
buildDir,
@@ -37,7 +41,6 @@ const zipFunctionsAndLogResults = async ({
3741
isRunningLocally,
3842
repositoryRoot,
3943
})
40-
const bundler = isUsingEsbuild(functionsConfig) ? 'esbuild' : 'zisi'
4144

4245
try {
4346
// Printing an empty line before bundling output.
@@ -46,9 +49,11 @@ const zipFunctionsAndLogResults = async ({
4649
const sourceDirectories = [internalFunctionsSrc, functionsSrc].filter(Boolean)
4750
const results = await zipItAndShipIt.zipFunctions(sourceDirectories, functionsDist, zisiParameters)
4851

52+
const bundlers = Array.from(getBundlers(results))
53+
4954
logBundleResults({ logs, results })
5055

51-
return { bundler }
56+
return { bundlers }
5257
} catch (error) {
5358
throw await getZipError(error, functionsSrc)
5459
}
@@ -74,7 +79,7 @@ const coreStep = async function ({
7479
const functionsDist = resolve(buildDir, relativeFunctionsDist)
7580
const internalFunctionsSrc = resolve(buildDir, relativeInternalFunctionsSrc)
7681
const internalFunctionsSrcExists = await pathExists(internalFunctionsSrc)
77-
const functionsSrcExists = await validateFunctionsSrc({ functionsSrc, logs, relativeFunctionsSrc })
82+
const functionsSrcExists = await validateFunctionsSrc({ functionsSrc, relativeFunctionsSrc })
7883
const [userFunctions = [], internalFunctions = []] = await getUserAndInternalFunctions({
7984
featureFlags,
8085
functionsSrc,
@@ -104,7 +109,7 @@ const coreStep = async function ({
104109
return {}
105110
}
106111

107-
const { bundler } = await zipFunctionsAndLogResults({
112+
const { bundlers } = await zipFunctionsAndLogResults({
108113
buildDir,
109114
childEnv,
110115
featureFlags,
@@ -119,7 +124,7 @@ const coreStep = async function ({
119124

120125
return {
121126
tags: {
122-
bundler,
127+
bundler: bundlers,
123128
},
124129
}
125130
}
@@ -155,7 +160,7 @@ export const bundleFunctions = {
155160
// `zip-it-and-ship-it` methods. Therefore, we need to use an intermediary
156161
// function and export them so tests can use it.
157162
export const zipItAndShipIt = {
158-
async zipFunctions(...args) {
163+
async zipFunctions(...args: Parameters<typeof zipFunctions>) {
159164
return await zipFunctions(...args)
160165
},
161166
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export default true
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export default true
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
[functions]
2+
directory = "functions"
3+
node_bundler = "nft"
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
11
[functions]
22
directory = "functions"
3+
node_bundler = "zisi"

packages/build/tests/time/tests.js

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -62,13 +62,24 @@ test('Default --framework CLI flag to nothing', async (t) => {
6262
t.true(timerRequests.every((timerRequest) => !timerRequest.includes('framework:')))
6363
})
6464

65-
test('Sends a `bundler: "zisi"` tag when no functions use the esbuild bundler', async (t) => {
65+
test('Sends a `bundler: "zisi"` tag when bundler set to zisi', async (t) => {
6666
const timerRequests = await getAllTimerRequests(t, './fixtures/functions_zisi')
6767
const functionsBundlingRequest = timerRequests.find((timerRequest) =>
6868
timerRequest.includes('stage:functions_bundling'),
6969
)
7070

7171
t.true(functionsBundlingRequest.includes('bundler:zisi'))
72+
t.false(functionsBundlingRequest.includes('bundler:zisi,bundler:zisi'))
73+
})
74+
75+
test('Sends a `bundler: "nft"` tag when bundler set to nft', async (t) => {
76+
const timerRequests = await getAllTimerRequests(t, './fixtures/functions_nft')
77+
const functionsBundlingRequest = timerRequests.find((timerRequest) =>
78+
timerRequest.includes('stage:functions_bundling'),
79+
)
80+
81+
t.true(functionsBundlingRequest.includes('bundler:nft'))
82+
t.false(functionsBundlingRequest.includes('bundler:nft,bundler:nft'))
7283
})
7384

7485
test('Sends a `bundler: "esbuild"` tag when at least one function uses the esbuild bundler', async (t) => {
@@ -77,7 +88,7 @@ test('Sends a `bundler: "esbuild"` tag when at least one function uses the esbui
7788
timerRequest.includes('stage:functions_bundling'),
7889
)
7990

80-
t.true(functionsBundlingRequest.includes('bundler:esbuild'))
91+
t.true(functionsBundlingRequest.includes('bundler:nft,bundler:esbuild'))
8192
})
8293

8394
// Retrieve statsd packets sent to --statsd.host|port, and get their snapshot

0 commit comments

Comments
 (0)