Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: netlify/build
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: e4e9787bf94e540e36fffed843f9139fce67fbaa
Choose a base ref
...
head repository: netlify/build
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: d4a4f3c4e6171dc9a70e79b10e7f7be55f9e8d76
Choose a head ref
  • 3 commits
  • 25 files changed
  • 5 contributors

Commits on Jun 6, 2024

  1. feat: populate Blobs context in build plugins (#5571)

    * feat: populate Blobs context in build plugins
    
    * chore: fix test
    
    * chore: update test
    
    * chore: fix test
    
    * chore: fix formatting
    
    * chore: fix test
    
    * chore: update test
    
    * chore: update tests
    eduardoboucas authored Jun 6, 2024
    Copy the full SHA
    e037fbf View commit details
  2. feat: add new endpoint that uses flags and accountId (#5700)

    * feat: add new endpoint that uses flags and accountId
    
    * chore: forgotten prop
    
    * feat: add test coverage
    
    * chore: remove comments
    
    * chore: remove unused var
    
    * chore: add accountId to flags
    
    * chore: update snapshot
    
    ---------
    
    Co-authored-by: Lewis Thorley <lewis.thorley@netlify.com>
    Co-authored-by: Karin Hendrikse <30577427+khendrikse@users.noreply.github.com>
    3 people authored Jun 6, 2024
    Copy the full SHA
    07def29 View commit details

Commits on Jun 7, 2024

  1. chore: release main (#5699)

    netlify-circleci authored Jun 7, 2024
    Copy the full SHA
    d4a4f3c View commit details
4 changes: 2 additions & 2 deletions .release-please-manifest.json
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
{
"packages/build-info": "7.13.2",
"packages/build": "29.46.5",
"packages/build": "29.47.0",
"packages/edge-bundler": "12.0.1",
"packages/cache-utils": "5.1.5",
"packages/config": "20.14.1",
"packages/config": "20.15.0",
"packages/framework-info": "9.8.13",
"packages/functions-utils": "5.2.62",
"packages/git-utils": "5.1.1",
6 changes: 3 additions & 3 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

14 changes: 14 additions & 0 deletions packages/build/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -105,6 +105,20 @@
* dependencies
* @netlify/config bumped from ^20.8.0 to ^20.8.1

## [29.47.0](https://github.com/netlify/build/compare/build-v29.46.5...build-v29.47.0) (2024-06-06)


### Features

* populate Blobs context in build plugins ([#5571](https://github.com/netlify/build/issues/5571)) ([e037fbf](https://github.com/netlify/build/commit/e037fbf0b4ecddc6775c56eb6f58eb8570226827))


### Dependencies

* The following workspace dependencies were updated
* dependencies
* @netlify/config bumped from ^20.14.1 to ^20.15.0

## [29.46.5](https://github.com/netlify/build/compare/build-v29.46.4...build-v29.46.5) (2024-06-05)


4 changes: 2 additions & 2 deletions packages/build/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@netlify/build",
"version": "29.46.5",
"version": "29.47.0",
"description": "Netlify build module",
"type": "module",
"exports": "./lib/index.js",
@@ -70,7 +70,7 @@
"@bugsnag/js": "^7.0.0",
"@netlify/blobs": "^7.3.0",
"@netlify/cache-utils": "^5.1.5",
"@netlify/config": "^20.14.1",
"@netlify/config": "^20.15.0",
"@netlify/edge-bundler": "12.0.1",
"@netlify/framework-info": "^9.8.13",
"@netlify/functions-utils": "^5.2.62",
11 changes: 10 additions & 1 deletion packages/build/src/core/build.ts
Original file line number Diff line number Diff line change
@@ -14,6 +14,7 @@ import { reportStatuses } from '../status/report.js'
import { getDevSteps, getSteps } from '../steps/get.js'
import { runSteps } from '../steps/run_steps.js'
import { initTimers, measureDuration } from '../time/main.js'
import { getBlobsEnvironmentContext } from '../utils/blobs.js'

import { getConfigOpts, loadConfig } from './config.js'
import { getConstants } from './constants.js'
@@ -197,6 +198,7 @@ const tExecBuild = async function ({
dry,
mode,
api,
token,
errorMonitor,
deployId,
errorParams,
@@ -258,6 +260,7 @@ export const runAndReportBuild = async function ({
dry,
mode,
api,
token,
errorMonitor,
deployId,
errorParams,
@@ -310,6 +313,7 @@ export const runAndReportBuild = async function ({
dry,
mode,
api,
token,
errorMonitor,
deployId,
errorParams,
@@ -414,6 +418,7 @@ const initAndRunBuild = async function ({
dry,
mode,
api,
token,
errorMonitor,
deployId,
errorParams,
@@ -459,6 +464,10 @@ const initAndRunBuild = async function ({
systemLog,
})

const pluginsEnv = featureFlags.build_inject_blobs_context
? { ...childEnv, ...getBlobsEnvironmentContext({ api, deployId: deployId, siteId: siteInfo?.id, token }) }
: childEnv

if (pluginsOptionsA?.length) {
const buildPlugins = {}
for (const plugin of pluginsOptionsA) {
@@ -475,7 +484,7 @@ const initAndRunBuild = async function ({
const { childProcesses, timers: timersB } = await startPlugins({
pluginsOptions: pluginsOptionsA,
buildDir,
childEnv,
childEnv: pluginsEnv,
logs,
debug,
timers: timersA,
1 change: 1 addition & 0 deletions packages/build/src/core/feature_flags.ts
Original file line number Diff line number Diff line change
@@ -15,6 +15,7 @@ const getFeatureFlag = function (name: string): FeatureFlags {

// Default values for feature flags
export const DEFAULT_FEATURE_FLAGS: FeatureFlags = {
build_inject_blobs_context: false,
buildbot_zisi_trace_nft: false,
buildbot_zisi_esbuild_parser: false,
buildbot_zisi_system_log: false,
3 changes: 2 additions & 1 deletion packages/build/src/core/normalize_flags.ts
Original file line number Diff line number Diff line change
@@ -6,6 +6,7 @@ import { removeFalsy } from '../utils/remove_falsy.js'
import { DEFAULT_FEATURE_FLAGS } from './feature_flags.js'
import type { BuildFlags, Mode, TestOptions } from './types.js'

export const DEFAULT_API_HOST = 'api.netlify.com'
const REQUIRE_MODE: Mode = 'require'
const DEFAULT_EDGE_FUNCTIONS_DIST = '.netlify/edge-functions-dist/'
const DEFAULT_FUNCTIONS_DIST = '.netlify/functions/'
@@ -91,7 +92,7 @@ const getDefaultFlags = function ({ env: envOpt = {} }, combinedEnv) {
bugsnagKey: combinedEnv.BUGSNAG_KEY,
sendStatus: false,
saveConfig: false,
apiHost: 'api.netlify.com',
apiHost: DEFAULT_API_HOST,
testOpts: {},
featureFlags: DEFAULT_FEATURE_FLAGS,
statsd: { port: DEFAULT_STATSD_PORT },
3 changes: 2 additions & 1 deletion packages/build/src/plugins_core/blobs_upload/index.ts
Original file line number Diff line number Diff line change
@@ -4,6 +4,7 @@ import { getDeployStore } from '@netlify/blobs'
import pMap from 'p-map'
import semver from 'semver'

import { DEFAULT_API_HOST } from '../../core/normalize_flags.js'
import { log, logError } from '../../log/logger.js'
import { getFileWithMetadata, getKeysToUpload, scanForBlobs } from '../../utils/blobs.js'
import { type CoreStep, type CoreStepCondition, type CoreStepFunction } from '../types.js'
@@ -22,7 +23,7 @@ const coreStep: CoreStepFunction = async function ({
return {}
}
// for cli deploys with `netlify deploy --build` the `NETLIFY_API_HOST` is undefined
const apiHost = NETLIFY_API_HOST || 'api.netlify.com'
const apiHost = NETLIFY_API_HOST || DEFAULT_API_HOST

const storeOpts: Parameters<typeof getDeployStore>[0] = {
siteID: SITE_ID,
36 changes: 36 additions & 0 deletions packages/build/src/utils/blobs.ts
Original file line number Diff line number Diff line change
@@ -3,6 +3,8 @@ import path from 'node:path'

import { fdir } from 'fdir'

import { DEFAULT_API_HOST } from '../core/normalize_flags.js'

const LEGACY_BLOBS_PATH = '.netlify/blobs/deploy'
const DEPLOY_CONFIG_BLOBS_PATH = '.netlify/deploy/v1/blobs/deploy'

@@ -12,6 +14,40 @@ export const getBlobsDirs = (buildDir: string, packagePath?: string) => [
path.resolve(buildDir, packagePath || '', LEGACY_BLOBS_PATH),
]

interface EnvironmentContext {
api?: {
host: string
scheme: string
}
deployId?: string
siteId?: string
token?: string
}

// TODO: Move this work to a method exported by `@netlify/blobs`.
export const getBlobsEnvironmentContext = ({
api = { host: DEFAULT_API_HOST, scheme: 'https' },
deployId,
siteId,
token,
}: EnvironmentContext) => {
if (!deployId || !siteId || !token) {
return {}
}

const payload = {
apiURL: `${api.scheme}://${api.host}`,
deployID: deployId,
siteID: siteId,
token,
}
const encodedPayload = Buffer.from(JSON.stringify(payload)).toString('base64')

return {
NETLIFY_BLOBS_CONTEXT: encodedPayload,
}
}

/**
* Detect if there are any blobs to upload, and if so, what directory they're
* in and whether that directory is the legacy `.netlify/blobs` path or the
129 changes: 0 additions & 129 deletions packages/build/tests/install/snapshots/tests.js.md
Original file line number Diff line number Diff line change
@@ -598,73 +598,6 @@ Generated by [AVA](https://avajs.dev).
(Netlify Build completed in 1ms)␊
Build step duration: Netlify Build completed in 1ms`

## Functions: install dependencies handles errors

> Snapshot 1
`␊
Netlify Build ␊
────────────────────────────────────────────────────────────────␊
> Version␊
@netlify/build 1.0.0␊
> Flags␊
debug: true␊
repositoryRoot: packages/build/tests/install/fixtures/functions_error␊
testOpts:␊
pluginsListUrl: test␊
silentLingeringProcesses: true␊
> Current directory␊
packages/build/tests/install/fixtures/functions_error␊
> Config file␊
packages/build/tests/install/fixtures/functions_error/netlify.toml␊
> Resolved config␊
build:␊
publish: packages/build/tests/install/fixtures/functions_error␊
publishOrigin: default␊
functionsDirectory: packages/build/tests/install/fixtures/functions_error/functions␊
plugins:␊
- inputs: {}␊
origin: config␊
package: '@netlify/plugin-functions-install-core'␊
> Context␊
production␊
@netlify/plugin-functions-install-core (onPreBuild event) ␊
────────────────────────────────────────────────────────────────␊
Installing functions dependencies␊
Dependencies installation error ␊
────────────────────────────────────────────────────────────────␊
Error message␊
Error while installing dependencies in packages/build/tests/install/fixtures/functions_error/functions␊
npm ERR! code ENOVERSIONS␊
npm ERR! No versions available for math-avg-does-not-exist␊
Plugin details␊
Package: @netlify/plugin-functions-install-core␊
Version: 1.0.0␊
Repository: git+https://github.com/netlify/build.git␊
npm link: https://www.npmjs.com/package/@netlify/build␊
Report issues: https://github.com/netlify/build/issues␊
Resolved config␊
build:␊
publish: packages/build/tests/install/fixtures/functions_error␊
publishOrigin: default␊
functionsDirectory: packages/build/tests/install/fixtures/functions_error/functions␊
plugins:␊
- inputs: {}␊
origin: config␊
package: '@netlify/plugin-functions-install-core'`

## Install local plugin dependencies: with npm

> Snapshot 1
@@ -846,68 +779,6 @@ Generated by [AVA](https://avajs.dev).
(Netlify Build completed in 1ms)␊
Build step duration: Netlify Build completed in 1ms`

## Install local plugin dependencies: propagate errors

> Snapshot 1
`␊
Netlify Build ␊
────────────────────────────────────────────────────────────────␊
> Version␊
@netlify/build 1.0.0␊
> Flags␊
debug: true␊
repositoryRoot: packages/build/tests/install/fixtures/error␊
testOpts:␊
pluginsListUrl: test␊
silentLingeringProcesses: true␊
> Current directory␊
packages/build/tests/install/fixtures/error␊
> Config file␊
packages/build/tests/install/fixtures/error/netlify.toml␊
> Resolved config␊
build:␊
publish: packages/build/tests/install/fixtures/error␊
publishOrigin: default␊
plugins:␊
- inputs: {}␊
origin: config␊
package: '@netlify/plugin-local-install-core'␊
- inputs: {}␊
origin: config␊
package: ./plugin/main.js␊
> Context␊
production␊
> Installing local plugins dependencies␊
- ./plugin/main.js␊
Dependencies installation error ␊
────────────────────────────────────────────────────────────────␊
Error message␊
Error while installing dependencies in packages/build/tests/install/fixtures/error/plugin␊
npm ERR! code ENOVERSIONS␊
npm ERR! No versions available for this-dependency-does-not-exist␊
Resolved config␊
build:␊
publish: packages/build/tests/install/fixtures/error␊
publishOrigin: default␊
plugins:␊
- inputs: {}␊
origin: config␊
package: '@netlify/plugin-local-install-core'␊
- inputs: {}␊
origin: config␊
package: ./plugin/main.js`

## Install local plugin dependencies: already installed

> Snapshot 1
Binary file modified packages/build/tests/install/snapshots/tests.js.snap
Binary file not shown.
Loading