From 6177826f5fe1254de6b6e9902afaa72e89700495 Mon Sep 17 00:00:00 2001 From: Simon Knott Date: Wed, 22 May 2024 14:44:44 +0200 Subject: [PATCH 1/6] chore: test import order (#5650) --- .../zip-it-and-ship-it/tests/v2api.test.ts | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/packages/zip-it-and-ship-it/tests/v2api.test.ts b/packages/zip-it-and-ship-it/tests/v2api.test.ts index 66910e41b0..859d4be115 100644 --- a/packages/zip-it-and-ship-it/tests/v2api.test.ts +++ b/packages/zip-it-and-ship-it/tests/v2api.test.ts @@ -550,4 +550,27 @@ describe.runIf(semver.gte(nodeVersion, '18.13.0'))('V2 functions API', () => { expect(func.displayName).toBe('SSR Function') expect(func.generator).toBe('next-runtime@1.2.3') }) + + testMany( + 'Bootstrap is imported before user code so it can apply side-effects before the user code runs', + ['bundler_default', 'bundler_esbuild', 'bundler_esbuild_zisi', 'bundler_default_nft', 'bundler_nft'], + async (options) => { + const { files } = await zipFixture('v2-api', { + fixtureDir: FIXTURES_ESM_DIR, + opts: options, + }) + + const unzippedFunctions = await unzipFiles(files) + + const contents = await readFile(join(unzippedFunctions[0].unzipPath, files[0].entryFilename), { + encoding: 'utf-8', + }) + const positionOfBootstrapImport = contents.indexOf('___netlify-bootstrap.mjs') + const positionOfUserCodeImport = contents.indexOf('function.mjs') + + expect(positionOfBootstrapImport).toBeGreaterThan(0) + expect(positionOfUserCodeImport).toBeGreaterThan(0) + expect(positionOfBootstrapImport).toBeLessThan(positionOfUserCodeImport) + }, + ) }) From 58def4f72eec4c1eb20cddceab0d8fd3c4420e45 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Eduardo=20Bou=C3=A7as?= Date: Wed, 22 May 2024 14:05:53 +0100 Subject: [PATCH 2/6] feat: reduce build log verbosity (#5643) * feat: reduce build log verbosity * fix: fix logging * refactor: disable feature flag * chore: fix linting issues * chore: fix test * feat: add output gate to core steps * refactor: simplify logic * chore: enable feature flag * chore: update snapshot * chore: disable flag * refactor: rename `OutputGate` to `OutputFlusher` * chore: add test * chore: update snapshot --- packages/build/src/core/feature_flags.ts | 1 + packages/build/src/core/types.ts | 1 + packages/build/src/install/missing.js | 2 +- packages/build/src/log/logger.ts | 30 +++++++++-- packages/build/src/log/messages/core.ts | 11 ++-- packages/build/src/log/messages/install.js | 11 +--- packages/build/src/log/messages/steps.js | 4 -- packages/build/src/log/output_flusher.ts | 48 ++++++++++++++++++ packages/build/src/log/stream.js | 42 ++++++++++----- .../src/plugins_core/pre_cleanup/index.ts | 1 + .../src/plugins_core/pre_dev_cleanup/index.ts | 1 + packages/build/src/steps/core_step.ts | 8 ++- packages/build/src/steps/get.ts | 1 + packages/build/src/steps/plugin.js | 8 ++- packages/build/src/steps/return.js | 6 +-- packages/build/src/steps/run_step.ts | 21 +++++++- packages/build/tests/core/tests.js | 6 +-- .../build/tests/error/snapshots/tests.js.snap | Bin 2913 -> 2929 bytes packages/build/tests/functions/tests.js | 6 +-- .../build/tests/log/snapshots/tests.js.snap | Bin 991 -> 1000 bytes .../fixtures/mixed_events/manifest.yml | 2 + .../fixtures/mixed_events/netlify.toml | 2 + .../plugins/fixtures/mixed_events/plugin.js | 21 ++++++++ .../build/tests/plugins/snapshots/tests.js.md | 45 ++++++++++++++++ .../tests/plugins/snapshots/tests.js.snap | Bin 5635 -> 5751 bytes packages/build/tests/plugins/tests.js | 7 +++ packages/build/tests/pre_cleanup/tests.js | 12 +---- 27 files changed, 233 insertions(+), 64 deletions(-) create mode 100644 packages/build/src/log/output_flusher.ts create mode 100644 packages/build/tests/plugins/fixtures/mixed_events/manifest.yml create mode 100644 packages/build/tests/plugins/fixtures/mixed_events/netlify.toml create mode 100644 packages/build/tests/plugins/fixtures/mixed_events/plugin.js diff --git a/packages/build/src/core/feature_flags.ts b/packages/build/src/core/feature_flags.ts index 4c3022327d..a59bb864da 100644 --- a/packages/build/src/core/feature_flags.ts +++ b/packages/build/src/core/feature_flags.ts @@ -20,5 +20,6 @@ export const DEFAULT_FEATURE_FLAGS: FeatureFlags = { buildbot_zisi_system_log: false, edge_functions_cache_cli: false, edge_functions_system_logger: false, + netlify_build_reduced_output: false, netlify_build_updated_plugin_compatibility: false, } diff --git a/packages/build/src/core/types.ts b/packages/build/src/core/types.ts index 535be6325d..d746c361df 100644 --- a/packages/build/src/core/types.ts +++ b/packages/build/src/core/types.ts @@ -52,6 +52,7 @@ type EventHandlers = { | { handler: NetlifyPlugin[K] description: string + quiet?: boolean } } diff --git a/packages/build/src/install/missing.js b/packages/build/src/install/missing.js index b189fc843f..8df8d5eb29 100644 --- a/packages/build/src/install/missing.js +++ b/packages/build/src/install/missing.js @@ -17,7 +17,7 @@ import { addExactDependencies } from './main.js' // their `package.json`. export const installMissingPlugins = async function ({ missingPlugins, autoPluginsDir, mode, logs }) { const packages = missingPlugins.map(getPackage) - logInstallMissingPlugins(logs, packages) + logInstallMissingPlugins(logs, missingPlugins, packages) if (packages.length === 0) { return diff --git a/packages/build/src/log/logger.ts b/packages/build/src/log/logger.ts index cae5b84d12..1aa33cad9f 100644 --- a/packages/build/src/log/logger.ts +++ b/packages/build/src/log/logger.ts @@ -4,10 +4,17 @@ import figures from 'figures' import indentString from 'indent-string' import { getHeader } from './header.js' +import { OutputFlusher } from './output_flusher.js' import { serializeArray, serializeObject } from './serialize.js' import { THEME } from './theme.js' -export type BufferedLogs = { stdout: string[]; stderr: string[] } +export type Logs = BufferedLogs | StreamedLogs +export type BufferedLogs = { stdout: string[]; stderr: string[]; outputFlusher?: OutputFlusher } +export type StreamedLogs = { outputFlusher?: OutputFlusher } + +export const logsAreBuffered = (logs: Logs | undefined): logs is BufferedLogs => { + return logs !== undefined && 'stdout' in logs +} const INDENT_SIZE = 2 @@ -35,7 +42,7 @@ export const getBufferLogs = (config: { buffer?: boolean }): BufferedLogs | unde // This should be used instead of `console.log()` as it allows us to instrument // how any build logs is being printed. export const log = function ( - logs: BufferedLogs | undefined, + logs: Logs | undefined, string: string, config: { indent?: boolean; color?: (string: string) => string } = {}, ) { @@ -44,10 +51,12 @@ export const log = function ( const stringB = String(stringA).replace(EMPTY_LINES_REGEXP, EMPTY_LINE) const stringC = color === undefined ? stringB : color(stringB) - if (logs !== undefined) { - // `logs` is a stateful variable + logs?.outputFlusher?.flush() + if (logsAreBuffered(logs)) { + // `logs` is a stateful variable logs.stdout.push(stringC) + return } @@ -178,3 +187,16 @@ export const getSystemLogger = function ( return (...args) => fileDescriptor.write(`${reduceLogLines(args)}\n`) } + +export const addOutputGate = (logs: Logs, outputFlusher: OutputFlusher): Logs => { + if (logsAreBuffered(logs)) { + return { + ...logs, + outputFlusher, + } + } + + return { + outputFlusher, + } +} diff --git a/packages/build/src/log/messages/core.ts b/packages/build/src/log/messages/core.ts index 7ad0505433..e856a3f8c2 100644 --- a/packages/build/src/log/messages/core.ts +++ b/packages/build/src/log/messages/core.ts @@ -7,6 +7,7 @@ import { roundTimerToMillisecs } from '../../time/measure.js' import { ROOT_PACKAGE_JSON } from '../../utils/json.js' import { getLogHeaderFunc } from '../header_func.js' import { log, logMessage, logWarning, logHeader, logSubHeader, logWarningArray, BufferedLogs } from '../logger.js' +import { OutputFlusher } from '../output_flusher.js' import { THEME } from '../theme.js' import { logConfigOnError } from './config.js' @@ -29,13 +30,17 @@ export const logBuildError = function ({ error, netlifyConfig, logs, debug }) { export const logBuildSuccess = function (logs) { logHeader(logs, 'Netlify Build Complete') - logMessage(logs, '') } -export const logTimer = function (logs, durationNs, timerName, systemLog) { +export const logTimer = function (logs, durationNs, timerName, systemLog, outputFlusher?: OutputFlusher) { const durationMs = roundTimerToMillisecs(durationNs) const duration = prettyMs(durationMs) - log(logs, THEME.dimWords(`(${timerName} completed in ${duration})`)) + + if (!outputFlusher || outputFlusher.flushed) { + log(logs, '') + log(logs, THEME.dimWords(`(${timerName} completed in ${duration})`)) + } + systemLog(`Build step duration: ${timerName} completed in ${durationMs}ms`) } diff --git a/packages/build/src/log/messages/install.js b/packages/build/src/log/messages/install.js index ae04593cc8..873c2a332d 100644 --- a/packages/build/src/log/messages/install.js +++ b/packages/build/src/log/messages/install.js @@ -1,20 +1,13 @@ import { isRuntime } from '../../utils/runtime.js' import { log, logArray, logSubHeader } from '../logger.js' -export const logInstallMissingPlugins = function (logs, packages) { - const runtimes = packages.filter((pkg) => isRuntime(pkg)) - const plugins = packages.filter((pkg) => !isRuntime(pkg)) +export const logInstallMissingPlugins = function (logs, missingPlugins, packages) { + const plugins = missingPlugins.filter((pkg) => !isRuntime(pkg)) if (plugins.length !== 0) { logSubHeader(logs, 'Installing plugins') logArray(logs, packages) } - - if (runtimes.length !== 0) { - const [nextRuntime] = runtimes - - logSubHeader(logs, `Using Next.js Runtime - v${nextRuntime.pluginPackageJson.version}`) - } } export const logInstallIntegrations = function (logs, integrations) { diff --git a/packages/build/src/log/messages/steps.js b/packages/build/src/log/messages/steps.js index 1c9d9ea7be..698aed1515 100644 --- a/packages/build/src/log/messages/steps.js +++ b/packages/build/src/log/messages/steps.js @@ -16,7 +16,3 @@ const getDescription = function ({ coreStepDescription, netlifyConfig, packageNa export const logBuildCommandStart = function (logs, buildCommand) { log(logs, THEME.highlightWords(`$ ${buildCommand}`)) } - -export const logStepSuccess = function (logs) { - logMessage(logs, '') -} diff --git a/packages/build/src/log/output_flusher.ts b/packages/build/src/log/output_flusher.ts new file mode 100644 index 0000000000..c5fbdda656 --- /dev/null +++ b/packages/build/src/log/output_flusher.ts @@ -0,0 +1,48 @@ +import { Transform } from 'stream' + +const flusherSymbol = Symbol.for('@netlify/output-gate') + +/** + * Utility class for conditionally rendering certain output only if additional + * data flows through. The constructor takes a "buffer" function that renders + * the optional data. When flushed, that function is called. + */ +export class OutputFlusher { + private buffer: () => void + + flushed: boolean + + constructor(bufferFn: () => void) { + this.flushed = false + this.buffer = bufferFn + } + + flush() { + if (!this.flushed) { + this.buffer() + this.flushed = true + } + } +} + +/** + * A `Transform` stream that takes an `OutputFlusher` instance and flushes it + * whenever data flows through, before piping the data to its destination. + */ +export class OutputFlusherTransform extends Transform { + [flusherSymbol]: OutputFlusher + + constructor(flusher: OutputFlusher) { + super() + + this[flusherSymbol] = flusher + } + + _transform(chunk: any, _: string, callback: () => void) { + this[flusherSymbol].flush() + + this.push(chunk) + + callback() + } +} diff --git a/packages/build/src/log/stream.js b/packages/build/src/log/stream.js index 5db088fd36..cbc97f9b09 100644 --- a/packages/build/src/log/stream.js +++ b/packages/build/src/log/stream.js @@ -1,15 +1,18 @@ import { stdout, stderr } from 'process' import { promisify } from 'util' +import { logsAreBuffered } from './logger.js' +import { OutputFlusherTransform } from './output_flusher.js' + // TODO: replace with `timers/promises` after dropping Node < 15.0.0 const pSetTimeout = promisify(setTimeout) // We try to use `stdio: inherit` because it keeps `stdout/stderr` as `TTY`, // which solves many problems. However we can only do it in build.command. // Plugins have several events, so need to be switch on and off instead. -// In buffer mode (`logs` not `undefined`), `pipe` is necessary. +// In buffer mode, `pipe` is necessary. export const getBuildCommandStdio = function (logs) { - if (logs !== undefined) { + if (logsAreBuffered(logs)) { return 'pipe' } @@ -18,7 +21,7 @@ export const getBuildCommandStdio = function (logs) { // Add build command output export const handleBuildCommandOutput = function ({ stdout: commandStdout, stderr: commandStderr }, logs) { - if (logs === undefined) { + if (!logsAreBuffered(logs)) { return } @@ -35,12 +38,12 @@ const pushBuildCommandOutput = function (output, logsArray) { } // Start plugin step output -export const pipePluginOutput = function (childProcess, logs) { - if (logs === undefined) { - return streamOutput(childProcess) +export const pipePluginOutput = function (childProcess, logs, outputFlusher) { + if (!logsAreBuffered(logs)) { + return streamOutput(childProcess, outputFlusher) } - return pushOutputToLogs(childProcess, logs) + return pushOutputToLogs(childProcess, logs, outputFlusher) } // Stop streaming/buffering plugin step output @@ -48,7 +51,7 @@ export const unpipePluginOutput = async function (childProcess, logs, listeners) // Let `childProcess` `stdout` and `stderr` flush before stopping redirecting await pSetTimeout(0) - if (logs === undefined) { + if (!logsAreBuffered(logs)) { return unstreamOutput(childProcess) } @@ -56,7 +59,14 @@ export const unpipePluginOutput = async function (childProcess, logs, listeners) } // Usually, we stream stdout/stderr because it is more efficient -const streamOutput = function (childProcess) { +const streamOutput = function (childProcess, outputFlusher) { + if (outputFlusher) { + childProcess.stdout.pipe(new OutputFlusherTransform(outputFlusher)).pipe(stdout) + childProcess.stderr.pipe(new OutputFlusherTransform(outputFlusher)).pipe(stderr) + + return + } + childProcess.stdout.pipe(stdout) childProcess.stderr.pipe(stderr) } @@ -67,15 +77,21 @@ const unstreamOutput = function (childProcess) { } // In tests, we push to the `logs` array instead -const pushOutputToLogs = function (childProcess, logs) { - const stdoutListener = logsListener.bind(null, logs.stdout) - const stderrListener = logsListener.bind(null, logs.stderr) +const pushOutputToLogs = function (childProcess, logs, outputFlusher) { + const stdoutListener = logsListener.bind(null, logs.stdout, outputFlusher) + const stderrListener = logsListener.bind(null, logs.stderr, outputFlusher) + childProcess.stdout.on('data', stdoutListener) childProcess.stderr.on('data', stderrListener) + return { stdoutListener, stderrListener } } -const logsListener = function (logs, chunk) { +const logsListener = function (logs, outputFlusher, chunk) { + if (outputFlusher) { + outputFlusher.flush() + } + logs.push(chunk.toString().trimEnd()) } diff --git a/packages/build/src/plugins_core/pre_cleanup/index.ts b/packages/build/src/plugins_core/pre_cleanup/index.ts index fad0cf290b..e189b63128 100644 --- a/packages/build/src/plugins_core/pre_cleanup/index.ts +++ b/packages/build/src/plugins_core/pre_cleanup/index.ts @@ -24,4 +24,5 @@ export const preCleanup: CoreStep = { coreStepName: 'Pre cleanup', coreStepDescription: () => 'Cleaning up leftover files from previous builds', condition: blobsPresent, + quiet: true, } diff --git a/packages/build/src/plugins_core/pre_dev_cleanup/index.ts b/packages/build/src/plugins_core/pre_dev_cleanup/index.ts index 4c91ede997..c4a41a9c1c 100644 --- a/packages/build/src/plugins_core/pre_dev_cleanup/index.ts +++ b/packages/build/src/plugins_core/pre_dev_cleanup/index.ts @@ -67,4 +67,5 @@ export const preDevCleanup: CoreStep = { coreStepName: 'Pre Dev cleanup', coreStepDescription: () => 'Cleaning up leftover files from previous builds', condition, + quiet: true, } diff --git a/packages/build/src/steps/core_step.ts b/packages/build/src/steps/core_step.ts index 173ec98970..cfaab75cb2 100644 --- a/packages/build/src/steps/core_step.ts +++ b/packages/build/src/steps/core_step.ts @@ -1,5 +1,6 @@ import { setEnvChanges } from '../env/changes.js' import { addErrorInfo, isBuildError } from '../error/info.js' +import { addOutputGate } from '../log/logger.js' import { updateNetlifyConfig, listConfigSideFiles } from './update_config.js' @@ -37,7 +38,10 @@ export const fireCoreStep = async function ({ explicitSecretKeys, edgeFunctionsBootstrapURL, deployId, + outputFlusher, }) { + const logsA = addOutputGate(logs, outputFlusher) + try { const configSideFiles = await listConfigSideFiles([headersPath, redirectsPath]) const childEnvA = setEnvChanges(envChanges, { ...childEnv }) @@ -55,7 +59,7 @@ export const fireCoreStep = async function ({ packagePath, buildbotServerSocket, events, - logs, + logs: logsA, quiet, context, branch, @@ -88,7 +92,7 @@ export const fireCoreStep = async function ({ newConfigMutations, configSideFiles, errorParams, - logs, + logs: logsA, systemLog, debug, }) diff --git a/packages/build/src/steps/get.ts b/packages/build/src/steps/get.ts index 01ce46694d..449c265af1 100644 --- a/packages/build/src/steps/get.ts +++ b/packages/build/src/steps/get.ts @@ -67,6 +67,7 @@ const getEventSteps = function (eventHandlers?: any[]) { coreStepId: `options_${event}`, coreStepName: `options.${event}`, coreStepDescription: () => description, + quiet: eventHandler.quiet, } }) } diff --git a/packages/build/src/steps/plugin.js b/packages/build/src/steps/plugin.js index 6f68103174..50e4eabc8b 100644 --- a/packages/build/src/steps/plugin.js +++ b/packages/build/src/steps/plugin.js @@ -1,6 +1,7 @@ import { context, propagation } from '@opentelemetry/api' import { addErrorInfo } from '../error/info.js' +import { addOutputGate } from '../log/logger.js' import { logStepCompleted } from '../log/messages/ipc.js' import { pipePluginOutput, unpipePluginOutput } from '../log/stream.js' import { callChild } from '../plugins/ipc.js' @@ -31,16 +32,19 @@ export const firePluginStep = async function ({ steps, error, logs, + outputFlusher, systemLog, featureFlags, debug, verbose, }) { - const listeners = pipePluginOutput(childProcess, logs) + const listeners = pipePluginOutput(childProcess, logs, outputFlusher) const otelCarrier = {} propagation.inject(context.active(), otelCarrier) + const logsA = addOutputGate(logs, outputFlusher) + try { const configSideFiles = await listConfigSideFiles([headersPath, redirectsPath]) const { @@ -77,7 +81,7 @@ export const firePluginStep = async function ({ newConfigMutations, configSideFiles, errorParams, - logs, + logs: logsA, systemLog, debug, source: packageName, diff --git a/packages/build/src/steps/return.js b/packages/build/src/steps/return.js index dcc0f0b467..1c9707a324 100644 --- a/packages/build/src/steps/return.js +++ b/packages/build/src/steps/return.js @@ -1,5 +1,4 @@ import { logTimer } from '../log/messages/core.js' -import { logStepSuccess } from '../log/messages/steps.js' import { handleStepError } from './error.js' @@ -22,6 +21,7 @@ export const getStepReturn = function ({ headersPath, redirectsPath, logs, + outputFlusher, debug, timers, durationNs, @@ -48,9 +48,7 @@ export const getStepReturn = function ({ } if (!quiet) { - logStepSuccess(logs) - - logTimer(logs, durationNs, timerName, systemLog) + logTimer(logs, durationNs, timerName, systemLog, outputFlusher) } return { newEnvChanges, netlifyConfig, configMutations, headersPath, redirectsPath, newStatus, timers, metrics } diff --git a/packages/build/src/steps/run_step.ts b/packages/build/src/steps/run_step.ts index 450152a36a..5a7540f00a 100644 --- a/packages/build/src/steps/run_step.ts +++ b/packages/build/src/steps/run_step.ts @@ -3,6 +3,7 @@ import { trace } from '@opentelemetry/api' import { addMutableConstants } from '../core/constants.js' import { logStepStart } from '../log/messages/steps.js' +import { OutputFlusher } from '../log/output_flusher.js' import { runsAlsoOnBuildFailure, runsOnlyOnBuildFailure } from '../plugins/events.js' import { normalizeTagName } from '../report/statsd.js' import { measureDuration } from '../time/main.js' @@ -114,8 +115,19 @@ export const runStep = async function ({ return {} } - if (!quiet && !coreStepQuiet) { - logStepStart({ logs, event, packageName, coreStepDescription, error, netlifyConfig }) + const logPluginStart = + !quiet && !coreStepQuiet + ? () => logStepStart({ logs, event, packageName, coreStepDescription, error, netlifyConfig }) + : () => { + // no-op + } + + let outputFlusher: OutputFlusher | undefined + + if (featureFlags.netlify_build_reduced_output) { + outputFlusher = new OutputFlusher(logPluginStart) + } else { + logPluginStart() } const fireStep = getFireStep(packageName, coreStepId, event) @@ -136,6 +148,7 @@ export const runStep = async function ({ packageName, pluginPackageJson, loadedFrom, + outputFlusher, origin, coreStep, coreStepId, @@ -193,6 +206,7 @@ export const runStep = async function ({ headersPath: headersPathA, redirectsPath: redirectsPathA, logs, + outputFlusher, debug, timers: timersA, durationNs, @@ -295,6 +309,7 @@ const tFireStep = function ({ packageName, pluginPackageJson, loadedFrom, + outputFlusher, origin, coreStep, coreStepId, @@ -346,6 +361,7 @@ const tFireStep = function ({ buildbotServerSocket, events, logs, + outputFlusher, quiet, nodePath, childEnv, @@ -376,6 +392,7 @@ const tFireStep = function ({ packagePath, pluginPackageJson, loadedFrom, + outputFlusher, origin, envChanges, errorParams, diff --git a/packages/build/tests/core/tests.js b/packages/build/tests/core/tests.js index 6a6f55d164..c61de04624 100644 --- a/packages/build/tests/core/tests.js +++ b/packages/build/tests/core/tests.js @@ -79,10 +79,7 @@ test('Event handlers are called', async (t) => { test('Event handlers with description are called', async (t) => { let flag = false - const { - success, - logs: { stdout }, - } = await new Fixture('./fixtures/empty') + const { success } = await new Fixture('./fixtures/empty') .withFlags({ eventHandlers: { onPostBuild: { @@ -99,7 +96,6 @@ test('Event handlers with description are called', async (t) => { t.true(success) t.true(flag) - t.true(stdout.join('\n').includes('Test onPostBuild')) }) test('Event handlers do not displace plugin methods', async (t) => { diff --git a/packages/build/tests/error/snapshots/tests.js.snap b/packages/build/tests/error/snapshots/tests.js.snap index 44b038fdf57f169f95f4b3fc9790e4da1d347e67..fcc4bc616d4593463c7f13e798250b4431a17f9e 100644 GIT binary patch literal 2929 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 LH%+5#vXB4(f_0~* diff --git a/packages/build/tests/functions/tests.js b/packages/build/tests/functions/tests.js index 2fde6268f2..673156931d 100644 --- a/packages/build/tests/functions/tests.js +++ b/packages/build/tests/functions/tests.js @@ -1,5 +1,4 @@ import { readdir, rm, stat, writeFile } from 'fs/promises' -import { sep } from 'path' import { fileURLToPath } from 'url' import { Fixture, normalizeOutput, removeDir, getTempName } from '@netlify/testing' @@ -95,7 +94,7 @@ test('Functions: internal functions are cleared on the dev timeline', async (t) code: 'ENOENT', }) - const output = await fixture.runDev(() => {}) + await fixture.runDev(() => {}) // After running Netlify Build, the leftover files should have been removed // but the generated files should have been preserved. @@ -105,9 +104,6 @@ test('Functions: internal functions are cleared on the dev timeline', async (t) await t.throwsAsync(() => stat(`${fixture.repositoryRoot}/.netlify/edge-functions/leftover.mjs`), { code: 'ENOENT' }) await stat(`${fixture.repositoryRoot}/.netlify/functions-internal/from-plugin.mjs`) await stat(`${fixture.repositoryRoot}/.netlify/edge-functions/from-plugin.mjs`) - - t.true(output.includes('Cleaning up leftover files from previous builds')) - t.true(output.includes(`Cleaned up .netlify${sep}functions-internal, .netlify${sep}edge-functions`)) }) test('Functions: cleanup is only triggered when there are internal functions', async (t) => { diff --git a/packages/build/tests/log/snapshots/tests.js.snap b/packages/build/tests/log/snapshots/tests.js.snap index d107a909d4ddf98a27d21896e3ebdbc659de1baf..fb0c886c73e5e8dd70636367a7cce49fcfbf81d2 100644 GIT binary patch literal 1000 zcmV3RzVcSXyIAVJA3n*kf}i z{O(QJZ6AvW00000000B+SY2-1HV}4OG!FFE8w?hGa1dB>9;=5S$sz@UxQSsq0SXi- zxYDeaFqafKlz$KuNRTV!0?8?QgWjX3=wpW>rQOZe_Bu&hC$=CgL=9&+{O0Eq_w9J3 zOmRT3-=ULE;qlhCsR)iH=q6}^e_+%|RYGB=Q=vH)=7oMXfX>00(>l4b&f63)yk?_ zgf4Yvs?O!C3lz%?vs25Z2QV1l1gYzWv4t1EB_U5u)aZR_t%bF7NVA}SI+@*tZ6iw0 z&T*xrU8hsL*JeuSJBv7UGhoB$9gCsL@Q@>P>uQwOp2Hf*3F{cWbZ&@cn(PE@INq|D zy=}99L4>;Wf<0$yD3qa@sb0d*+?Q*Gt%+o#2YwFsegY>5+?mp?_>n?hyKJlot#%dF zv-dUc+It;#7!6&a4!g04z=}~gTd8Nk=N;L>k+BC9z93@!(0?h=G7H{ZUtqz%)~{Lc ze_+91+wfdkE{yJdI3orF|28l7C|VQ*6#xL0TJF^V literal 991 zcmV<510eiCRzVg1Yy*WDWP!FskS9Up{EFA@20Ks`R3pu|yAmuEOyd0cp>vW$t&0;~AxG~_kcBhjs%%VW(s<+y zr?s3bfM9x23+F0;SevFI%lpLg(wn@swgx7HR`$tO=*dhse&%uuQHB zVpGPQrOwR3x)Nb~o9s**Di>`pJXK_KXeeUQj12MQI$-urU8t00+MwWBK(qF)Yzhf= zR*x5H6A9DNK-cvx==smyEQlJkFb@+Z0~l*Exb{4F4 z7-4L51!(oiAg6~U=YJthzb#4AuXob)pGs3I*FPps&^5r{6{{|>6}ej5HA~P9#ZAqX znsp7b%rU!=Ep%O)t3C(`caV1?nWuP0Yy(v!9aQf`VW;9hKpHD<; z&a?gE{vGk$kXR{#D{GHriDu>6<*# N{saLxrxN}Z003?{+7JK$ diff --git a/packages/build/tests/plugins/fixtures/mixed_events/manifest.yml b/packages/build/tests/plugins/fixtures/mixed_events/manifest.yml new file mode 100644 index 0000000000..a3512f0259 --- /dev/null +++ b/packages/build/tests/plugins/fixtures/mixed_events/manifest.yml @@ -0,0 +1,2 @@ +name: test +inputs: [] diff --git a/packages/build/tests/plugins/fixtures/mixed_events/netlify.toml b/packages/build/tests/plugins/fixtures/mixed_events/netlify.toml new file mode 100644 index 0000000000..81b0ce8bb1 --- /dev/null +++ b/packages/build/tests/plugins/fixtures/mixed_events/netlify.toml @@ -0,0 +1,2 @@ +[[plugins]] +package = "./plugin" diff --git a/packages/build/tests/plugins/fixtures/mixed_events/plugin.js b/packages/build/tests/plugins/fixtures/mixed_events/plugin.js new file mode 100644 index 0000000000..17da379a6d --- /dev/null +++ b/packages/build/tests/plugins/fixtures/mixed_events/plugin.js @@ -0,0 +1,21 @@ +const noop = () => { + // no-op +} + +export const onPreBuild = async function () { + console.log('Hello from onPreBuild') +} + +export const onBuild = async function () { + await new Promise(resolve => setTimeout(resolve, 1_000)) + + noop() +} + +export const onPostBuild = async function () { + console.log('Hello from onPostBuild') +} + +export const onEnd = async function () { + noop() +} diff --git a/packages/build/tests/plugins/snapshots/tests.js.md b/packages/build/tests/plugins/snapshots/tests.js.md index aa3fcc5a4f..c235927f2f 100644 --- a/packages/build/tests/plugins/snapshots/tests.js.md +++ b/packages/build/tests/plugins/snapshots/tests.js.md @@ -2702,3 +2702,48 @@ Generated by [AVA](https://avajs.dev). ␊ (Netlify Build completed in 1ms)␊ Build step duration: Netlify Build completed in 1ms` + +## Plugin events that do not emit to stderr/stdout are hidden from the logs + +> Snapshot 1 + + `␊ + Netlify Build ␊ + ────────────────────────────────────────────────────────────────␊ + ␊ + > Version␊ + @netlify/build 1.0.0␊ + ␊ + > Flags␊ + debug: false␊ + ␊ + > Current directory␊ + packages/build/tests/plugins/fixtures/mixed_events␊ + ␊ + > Config file␊ + packages/build/tests/plugins/fixtures/mixed_events/netlify.toml␊ + ␊ + > Context␊ + production␊ + ␊ + > Loading plugins␊ + - ./plugin@1.0.0 from netlify.toml␊ + ␊ + ./plugin (onPreBuild event) ␊ + ────────────────────────────────────────────────────────────────␊ + ␊ + Hello from onPreBuild␊ + ␊ + (./plugin onPreBuild completed in 1ms)␊ + ␊ + ./plugin (onPostBuild event) ␊ + ────────────────────────────────────────────────────────────────␊ + ␊ + Hello from onPostBuild␊ + ␊ + (./plugin onPostBuild completed in 1ms)␊ + ␊ + Netlify Build Complete ␊ + ────────────────────────────────────────────────────────────────␊ + ␊ + (Netlify Build completed in 1ms)` diff --git a/packages/build/tests/plugins/snapshots/tests.js.snap b/packages/build/tests/plugins/snapshots/tests.js.snap index e9296c07c6d3d5507e0147b0b7a09927499e3b54..d91c72e00a3735febcbb0f217cdd3b8f60d117a1 100644 GIT binary patch literal 5751 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 pXHt8LrZu%H|E8%1z25vwwq2V3Ma{C6gYr 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 diff --git a/packages/build/tests/plugins/tests.js b/packages/build/tests/plugins/tests.js index f1940b2351..d59d1916c1 100644 --- a/packages/build/tests/plugins/tests.js +++ b/packages/build/tests/plugins/tests.js @@ -340,3 +340,10 @@ test('Plugins which export a factory function receive the inputs and a metadata const output = await new Fixture('./fixtures/dynamic_plugin').runWithBuild() t.snapshot(normalizeOutput(output)) }) + +test('Plugin events that do not emit to stderr/stdout are hidden from the logs', async (t) => { + const output = await new Fixture('./fixtures/mixed_events') + .withFlags({ debug: false, featureFlags: { netlify_build_reduced_output: true } }) + .runWithBuild() + t.snapshot(normalizeOutput(output)) +}) diff --git a/packages/build/tests/pre_cleanup/tests.js b/packages/build/tests/pre_cleanup/tests.js index 7af6e8c8ee..6ce58292b9 100644 --- a/packages/build/tests/pre_cleanup/tests.js +++ b/packages/build/tests/pre_cleanup/tests.js @@ -11,17 +11,13 @@ test('Build removes blobs directory before starting', async (t) => { await t.notThrowsAsync(access(blobsDir)) - const { - success, - logs: { stdout }, - } = await fixture + const { success } = await fixture .withFlags({ cwd: fixture.repositoryRoot, }) .runBuildProgrammatic() t.true(success) - t.true(stdout.join('\n').includes('Cleaning up leftover files from previous builds')) await t.throwsAsync(access(blobsDir)) }) @@ -51,10 +47,7 @@ test('monorepo > Build removes blobs directory before starting', async (t) => { const blobsDir = join(fixture.repositoryRoot, 'apps/app-1/.netlify/blobs/deploy') await t.notThrowsAsync(access(blobsDir)) - const { - success, - logs: { stdout }, - } = await fixture + const { success } = await fixture .withFlags({ cwd: fixture.repositoryRoot, packagePath: 'apps/app-1', @@ -62,7 +55,6 @@ test('monorepo > Build removes blobs directory before starting', async (t) => { .runBuildProgrammatic() t.true(success) - t.true(stdout.join('\n').includes('Cleaning up leftover files from previous builds')) await t.throwsAsync(access(blobsDir)) }) From 4355c096163bfa054ab0efcd79fb5d9d95047525 Mon Sep 17 00:00:00 2001 From: netlify-circleci <90861860+netlify-circleci@users.noreply.github.com> Date: Wed, 22 May 2024 08:21:05 -0500 Subject: [PATCH 3/6] chore: release main (#5651) --- .release-please-manifest.json | 2 +- package-lock.json | 2 +- packages/build/CHANGELOG.md | 7 +++++++ packages/build/package.json | 2 +- 4 files changed, 10 insertions(+), 3 deletions(-) diff --git a/.release-please-manifest.json b/.release-please-manifest.json index 736805e498..17b2e4f8f0 100644 --- a/.release-please-manifest.json +++ b/.release-please-manifest.json @@ -1,6 +1,6 @@ { "packages/build-info": "7.13.2", - "packages/build": "29.41.6", + "packages/build": "29.42.0", "packages/edge-bundler": "12.0.1", "packages/cache-utils": "5.1.5", "packages/config": "20.12.5", diff --git a/package-lock.json b/package-lock.json index 9e0c0b093a..096e0e4066 100644 --- a/package-lock.json +++ b/package-lock.json @@ -26594,7 +26594,7 @@ }, "packages/build": { "name": "@netlify/build", - "version": "29.41.6", + "version": "29.42.0", "license": "MIT", "dependencies": { "@bugsnag/js": "^7.0.0", diff --git a/packages/build/CHANGELOG.md b/packages/build/CHANGELOG.md index 2141d0a421..e16dfe5cc0 100644 --- a/packages/build/CHANGELOG.md +++ b/packages/build/CHANGELOG.md @@ -105,6 +105,13 @@ * dependencies * @netlify/config bumped from ^20.8.0 to ^20.8.1 +## [29.42.0](https://github.com/netlify/build/compare/build-v29.41.6...build-v29.42.0) (2024-05-22) + + +### Features + +* reduce build log verbosity ([#5643](https://github.com/netlify/build/issues/5643)) ([58def4f](https://github.com/netlify/build/commit/58def4f72eec4c1eb20cddceab0d8fd3c4420e45)) + ## [29.41.6](https://github.com/netlify/build/compare/build-v29.41.5...build-v29.41.6) (2024-05-22) diff --git a/packages/build/package.json b/packages/build/package.json index 653b8a2a4f..30fbd67b59 100644 --- a/packages/build/package.json +++ b/packages/build/package.json @@ -1,6 +1,6 @@ { "name": "@netlify/build", - "version": "29.41.6", + "version": "29.42.0", "description": "Netlify build module", "type": "module", "exports": "./lib/index.js", From 076b4b07c4595d943b0375edffe97eac22910cfd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Eduardo=20Bou=C3=A7as?= Date: Wed, 22 May 2024 17:04:52 +0100 Subject: [PATCH 4/6] fix: flush output from "Deploy site" step (#5652) --- packages/build/src/plugins_core/deploy/index.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/packages/build/src/plugins_core/deploy/index.js b/packages/build/src/plugins_core/deploy/index.js index cd48749c19..dd02159fd7 100644 --- a/packages/build/src/plugins_core/deploy/index.js +++ b/packages/build/src/plugins_core/deploy/index.js @@ -28,6 +28,9 @@ const coreStep = async function ({ }) { const client = createBuildbotClient(buildbotServerSocket) try { + // buildbot will emit logs. Flush the output to preserve the right order. + logs?.outputFlusher?.flush() + await connectBuildbotClient(client) await saveUpdatedConfig({ configMutations, From 466e98c2767fbd956a7de2c085bb390d75ddb22c Mon Sep 17 00:00:00 2001 From: netlify-circleci <90861860+netlify-circleci@users.noreply.github.com> Date: Wed, 22 May 2024 12:42:23 -0500 Subject: [PATCH 5/6] chore: release main (#5654) --- .release-please-manifest.json | 2 +- package-lock.json | 2 +- packages/build/CHANGELOG.md | 7 +++++++ packages/build/package.json | 2 +- 4 files changed, 10 insertions(+), 3 deletions(-) diff --git a/.release-please-manifest.json b/.release-please-manifest.json index 17b2e4f8f0..bccf33fd25 100644 --- a/.release-please-manifest.json +++ b/.release-please-manifest.json @@ -1,6 +1,6 @@ { "packages/build-info": "7.13.2", - "packages/build": "29.42.0", + "packages/build": "29.42.1", "packages/edge-bundler": "12.0.1", "packages/cache-utils": "5.1.5", "packages/config": "20.12.5", diff --git a/package-lock.json b/package-lock.json index 096e0e4066..d7412b5434 100644 --- a/package-lock.json +++ b/package-lock.json @@ -26594,7 +26594,7 @@ }, "packages/build": { "name": "@netlify/build", - "version": "29.42.0", + "version": "29.42.1", "license": "MIT", "dependencies": { "@bugsnag/js": "^7.0.0", diff --git a/packages/build/CHANGELOG.md b/packages/build/CHANGELOG.md index e16dfe5cc0..8283173ce1 100644 --- a/packages/build/CHANGELOG.md +++ b/packages/build/CHANGELOG.md @@ -105,6 +105,13 @@ * dependencies * @netlify/config bumped from ^20.8.0 to ^20.8.1 +## [29.42.1](https://github.com/netlify/build/compare/build-v29.42.0...build-v29.42.1) (2024-05-22) + + +### Bug Fixes + +* flush output from "Deploy site" step ([#5652](https://github.com/netlify/build/issues/5652)) ([076b4b0](https://github.com/netlify/build/commit/076b4b07c4595d943b0375edffe97eac22910cfd)) + ## [29.42.0](https://github.com/netlify/build/compare/build-v29.41.6...build-v29.42.0) (2024-05-22) diff --git a/packages/build/package.json b/packages/build/package.json index 30fbd67b59..69c895f895 100644 --- a/packages/build/package.json +++ b/packages/build/package.json @@ -1,6 +1,6 @@ { "name": "@netlify/build", - "version": "29.42.0", + "version": "29.42.1", "description": "Netlify build module", "type": "module", "exports": "./lib/index.js", From 439a846297bf14c4440e91084a459ab6da6a8e2f Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 22 May 2024 21:35:59 +0000 Subject: [PATCH 6/6] fix(deps): update dependency @netlify/plugins-list to ^6.80.0 (#5653) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package-lock.json | 8 ++++---- packages/build/package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index d7412b5434..3259249a55 100644 --- a/package-lock.json +++ b/package-lock.json @@ -6658,9 +6658,9 @@ "link": true }, "node_modules/@netlify/plugins-list": { - "version": "6.79.0", - "resolved": "https://registry.npmjs.org/@netlify/plugins-list/-/plugins-list-6.79.0.tgz", - "integrity": "sha512-ejgn9al6mzCCDTCkmoBfz4PY+aAGsbMeBXGI1YMWycHl8RVmEXJDgR0RwQEFxIIE9HEMfUtg2rFmxgvg2x6i5Q==", + "version": "6.80.0", + "resolved": "https://registry.npmjs.org/@netlify/plugins-list/-/plugins-list-6.80.0.tgz", + "integrity": "sha512-bCKLI51UZ70ziIWsf2nvgPd4XuG6m8AMCoHiYtl/BSsiaSBfmryZnTTqdRXerH09tBRpbPPwzaEgUJwyU9o8Qw==", "license": "MIT", "engines": { "node": "^14.14.0 || >=16.0.0" @@ -26606,7 +26606,7 @@ "@netlify/functions-utils": "^5.2.57", "@netlify/git-utils": "^5.1.1", "@netlify/opentelemetry-utils": "^1.2.1", - "@netlify/plugins-list": "^6.79.0", + "@netlify/plugins-list": "^6.80.0", "@netlify/run-utils": "^5.1.1", "@netlify/zip-it-and-ship-it": "9.33.0", "@sindresorhus/slugify": "^2.0.0", diff --git a/packages/build/package.json b/packages/build/package.json index 69c895f895..7835b4b17a 100644 --- a/packages/build/package.json +++ b/packages/build/package.json @@ -76,7 +76,7 @@ "@netlify/functions-utils": "^5.2.57", "@netlify/git-utils": "^5.1.1", "@netlify/opentelemetry-utils": "^1.2.1", - "@netlify/plugins-list": "^6.79.0", + "@netlify/plugins-list": "^6.80.0", "@netlify/run-utils": "^5.1.1", "@netlify/zip-it-and-ship-it": "9.33.0", "@sindresorhus/slugify": "^2.0.0",