From f6a1f4d43a8e4635bd4bb0133714d5fee70228e9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Eduardo=20Bou=C3=A7as?= Date: Wed, 20 Mar 2024 23:19:51 +0000 Subject: [PATCH 1/3] fix: stop pinning plugins with prerelease versions --- packages/build/src/plugins/pinned_version.js | 11 +++- packages/build/src/utils/semver.js | 6 ++ .../netlify-plugin-contextual-env/index.js | 3 + .../manifest.yml | 2 + .../package.json | 8 +++ .../.netlify/plugins/package.json | 12 ++++ .../fixtures/pin_prerelease/package.json | 9 +++ .../tests/plugins_list/snapshots/tests.js.md | 59 ++++++++++++++++++ .../plugins_list/snapshots/tests.js.snap | Bin 4512 -> 4585 bytes packages/build/tests/plugins_list/tests.js | 6 ++ 10 files changed, 114 insertions(+), 2 deletions(-) create mode 100644 packages/build/tests/plugins_list/fixtures/pin_prerelease/.netlify/plugins/node_modules/netlify-plugin-contextual-env/index.js create mode 100644 packages/build/tests/plugins_list/fixtures/pin_prerelease/.netlify/plugins/node_modules/netlify-plugin-contextual-env/manifest.yml create mode 100644 packages/build/tests/plugins_list/fixtures/pin_prerelease/.netlify/plugins/node_modules/netlify-plugin-contextual-env/package.json create mode 100644 packages/build/tests/plugins_list/fixtures/pin_prerelease/.netlify/plugins/package.json create mode 100644 packages/build/tests/plugins_list/fixtures/pin_prerelease/package.json diff --git a/packages/build/src/plugins/pinned_version.js b/packages/build/src/plugins/pinned_version.js index 8c7508a22c..6cc5b41907 100644 --- a/packages/build/src/plugins/pinned_version.js +++ b/packages/build/src/plugins/pinned_version.js @@ -1,5 +1,5 @@ import { handleBuildError } from '../error/handle.js' -import { getMajorVersion } from '../utils/semver.js' +import { getMajorVersion, isPrerelease } from '../utils/semver.js' // Retrieve plugin's pinned major versions by fetching the latest `PluginRun` // Only applies to `netlify.toml`-only installed plugins. @@ -80,10 +80,17 @@ export const pinPlugins = async function ({ // - the plugin was installed in the UI // - both the build and the plugin succeeded const shouldPinVersion = function ({ - pluginOptions: { packageName, pinnedVersion, loadedFrom, origin }, + pluginOptions: { + packageName, + pinnedVersion, + pluginPackageJson: { version }, + loadedFrom, + origin, + }, failedPlugins, }) { return ( + !isPrerelease(version) && pinnedVersion === undefined && loadedFrom === 'auto_install' && origin === 'ui' && diff --git a/packages/build/src/utils/semver.js b/packages/build/src/utils/semver.js index f7b2b2a4c5..fd68787ee6 100644 --- a/packages/build/src/utils/semver.js +++ b/packages/build/src/utils/semver.js @@ -32,3 +32,9 @@ export const getMajorVersion = function (version) { const patchVersion = semver.patch(version) return `${majorVersion}.${minorVersion}.${patchVersion}` } + +export const isPrerelease = function (version) { + // Prerelease versions are excluded from ranges unless `includePrerelease` is + // set to `true`. + return !semver.satisfies(version, '>=0.0.0', { includePrerelease: false }) +} diff --git a/packages/build/tests/plugins_list/fixtures/pin_prerelease/.netlify/plugins/node_modules/netlify-plugin-contextual-env/index.js b/packages/build/tests/plugins_list/fixtures/pin_prerelease/.netlify/plugins/node_modules/netlify-plugin-contextual-env/index.js new file mode 100644 index 0000000000..5af9c00980 --- /dev/null +++ b/packages/build/tests/plugins_list/fixtures/pin_prerelease/.netlify/plugins/node_modules/netlify-plugin-contextual-env/index.js @@ -0,0 +1,3 @@ +export const onPreBuild = function () { + console.log('test') +} diff --git a/packages/build/tests/plugins_list/fixtures/pin_prerelease/.netlify/plugins/node_modules/netlify-plugin-contextual-env/manifest.yml b/packages/build/tests/plugins_list/fixtures/pin_prerelease/.netlify/plugins/node_modules/netlify-plugin-contextual-env/manifest.yml new file mode 100644 index 0000000000..a3512f0259 --- /dev/null +++ b/packages/build/tests/plugins_list/fixtures/pin_prerelease/.netlify/plugins/node_modules/netlify-plugin-contextual-env/manifest.yml @@ -0,0 +1,2 @@ +name: test +inputs: [] diff --git a/packages/build/tests/plugins_list/fixtures/pin_prerelease/.netlify/plugins/node_modules/netlify-plugin-contextual-env/package.json b/packages/build/tests/plugins_list/fixtures/pin_prerelease/.netlify/plugins/node_modules/netlify-plugin-contextual-env/package.json new file mode 100644 index 0000000000..dbdc68ea41 --- /dev/null +++ b/packages/build/tests/plugins_list/fixtures/pin_prerelease/.netlify/plugins/node_modules/netlify-plugin-contextual-env/package.json @@ -0,0 +1,8 @@ +{ + "name": "netlify-plugin-contextual-env", + "version": "1.2.3-rc", + "type": "module", + "description": "test", + "license": "MIT", + "repository": "test" +} diff --git a/packages/build/tests/plugins_list/fixtures/pin_prerelease/.netlify/plugins/package.json b/packages/build/tests/plugins_list/fixtures/pin_prerelease/.netlify/plugins/package.json new file mode 100644 index 0000000000..7229c0816f --- /dev/null +++ b/packages/build/tests/plugins_list/fixtures/pin_prerelease/.netlify/plugins/package.json @@ -0,0 +1,12 @@ +{ + "name": "netlify-local-plugins", + "description": "This directory contains Build plugins that have been automatically installed by Netlify.", + "version": "1.0.0", + "type": "module", + "private": true, + "author": "Netlify", + "license": "MIT", + "dependencies": { + "netlify-plugin-contextual-env": "1.2.3-rc" + } +} diff --git a/packages/build/tests/plugins_list/fixtures/pin_prerelease/package.json b/packages/build/tests/plugins_list/fixtures/pin_prerelease/package.json new file mode 100644 index 0000000000..c758eec5f6 --- /dev/null +++ b/packages/build/tests/plugins_list/fixtures/pin_prerelease/package.json @@ -0,0 +1,9 @@ +{ + "name": "module_plugin", + "version": "0.0.1", + "type": "module", + "description": "test", + "license": "MIT", + "repository": "test", + "dependencies": {} +} diff --git a/packages/build/tests/plugins_list/snapshots/tests.js.md b/packages/build/tests/plugins_list/snapshots/tests.js.md index beb3e73d47..44a05e79b1 100644 --- a/packages/build/tests/plugins_list/snapshots/tests.js.md +++ b/packages/build/tests/plugins_list/snapshots/tests.js.md @@ -2641,6 +2641,65 @@ Generated by [AVA](https://avajs.dev). (Netlify Build completed in 1ms)␊ Build step duration: Netlify Build completed in 1ms` +## Do not pin plugin with prerelease versions + +> Snapshot 1 + + `␊ + Netlify Build ␊ + ────────────────────────────────────────────────────────────────␊ + ␊ + > Version␊ + @netlify/build 1.0.0␊ + ␊ + > Flags␊ + debug: true␊ + repositoryRoot: packages/build/tests/plugins_list/fixtures/pin_prerelease␊ + sendStatus: true␊ + siteId: test␊ + testOpts:␊ + host: /test/socket␊ + pluginsListUrl: /test/socket␊ + scheme: http␊ + silentLingeringProcesses: true␊ + ␊ + > Current directory␊ + packages/build/tests/plugins_list/fixtures/pin_prerelease␊ + ␊ + > Config file␊ + No config file was defined: using default values.␊ + ␊ + > Resolved config␊ + build:␊ + publish: packages/build/tests/plugins_list/fixtures/pin_prerelease␊ + publishOrigin: default␊ + plugins:␊ + - inputs: {}␊ + origin: ui␊ + package: netlify-plugin-contextual-env␊ + ␊ + > Context␊ + production␊ + ␊ + > Available plugins␊ + ␊ + > Loading plugins␊ + - netlify-plugin-contextual-env 1-2-3-rc from Netlify app (latest 1-2-3-rc, expected 1-2-3-rc, compatible 1-2-3-rc)␊ + ␊ + netlify-plugin-contextual-env (onPreBuild event) ␊ + ────────────────────────────────────────────────────────────────␊ + ␊ + test␊ + ␊ + (netlify-plugin-contextual-env onPreBuild completed in 1ms)␊ + Build step duration: netlify-plugin-contextual-env onPreBuild completed in 1ms␊ + ␊ + Netlify Build Complete ␊ + ────────────────────────────────────────────────────────────────␊ + ␊ + (Netlify Build completed in 1ms)␊ + Build step duration: Netlify Build completed in 1ms` + ## Pin netlify.toml-only plugin versions > Snapshot 1 diff --git a/packages/build/tests/plugins_list/snapshots/tests.js.snap b/packages/build/tests/plugins_list/snapshots/tests.js.snap index 3dcaca82289b57ed0597615e7a5ccac0c2005c76..094b1e70f11869f37e1928e8c28895074aba12a4 100644 GIT binary patch delta 4190 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 delta 4116 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 S+PI(x*8c~_0eXOXumJ%2(EbMi diff --git a/packages/build/tests/plugins_list/tests.js b/packages/build/tests/plugins_list/tests.js index 6e6a47370a..79aa63411e 100644 --- a/packages/build/tests/plugins_list/tests.js +++ b/packages/build/tests/plugins_list/tests.js @@ -411,6 +411,12 @@ test('Pinning plugin versions takes into account the compatibility field', async }) }) +test('Do not pin plugin with prerelease versions', async (t) => { + // By setting the status to 500 we ensure that the endpoint for pinning is + // not being called, otherwise an error would be thrown. + await runWithUpdatePluginMock(t, 'pin_prerelease', { status: 500, testPlugin: { version: '1.2.3-rc' } }) +}) + const runWithPluginRunsMock = async function ( t, fixtureName, From adc65d4e47de834cb8c498412ec8f1bfef1a8ad7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Eduardo=20Bou=C3=A7as?= Date: Thu, 21 Mar 2024 09:05:11 +0000 Subject: [PATCH 2/3] refactor: simplify things --- packages/build/src/utils/semver.js | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/packages/build/src/utils/semver.js b/packages/build/src/utils/semver.js index fd68787ee6..15bb9b0764 100644 --- a/packages/build/src/utils/semver.js +++ b/packages/build/src/utils/semver.js @@ -34,7 +34,5 @@ export const getMajorVersion = function (version) { } export const isPrerelease = function (version) { - // Prerelease versions are excluded from ranges unless `includePrerelease` is - // set to `true`. - return !semver.satisfies(version, '>=0.0.0', { includePrerelease: false }) + return semver.prerelease(version) } From 2701063ba367dcf8d8048a2e8de3ba01c8afeffe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Eduardo=20Bou=C3=A7as?= Date: Thu, 21 Mar 2024 10:53:30 +0000 Subject: [PATCH 3/3] chore: update test --- .../snapshots/tests.js.md | 12 ++++++------ .../snapshots/tests.js.snap | Bin 407 -> 339 bytes .../tests/unit/validate_edge_manifest/tests.js | 5 +++++ 3 files changed, 11 insertions(+), 6 deletions(-) diff --git a/packages/build/tests/unit/validate_edge_manifest/snapshots/tests.js.md b/packages/build/tests/unit/validate_edge_manifest/snapshots/tests.js.md index 6bb2f6b34f..435ccc1128 100644 --- a/packages/build/tests/unit/validate_edge_manifest/snapshots/tests.js.md +++ b/packages/build/tests/unit/validate_edge_manifest/snapshots/tests.js.md @@ -9,17 +9,17 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `Validation of Edge Functions manifest failed␊ - TYPE must be object␊ + TYPE must be object␊ ␊ - > 1 | "json"␊ -   | ^^^^^^ 👈🏽 type must be object` + > 1 | "json"␊ + | ^^^^^^ 👈🏽 type must be object` ## should print error on empty manifest > Snapshot 1 `Validation of Edge Functions manifest failed␊ - REQUIRED must have required property 'bundler_version'␊ + REQUIRED must have required property 'bundler_version'␊ ␊ - > 1 | {}␊ -   | ^ ☹️ bundler_version is missing here!` + > 1 | {}␊ + | ^ ☹️ bundler_version is missing here!` diff --git a/packages/build/tests/unit/validate_edge_manifest/snapshots/tests.js.snap b/packages/build/tests/unit/validate_edge_manifest/snapshots/tests.js.snap index 493c5159d10a9f28bccf253867f404a130fe975d..4577a3380c2d5b0f54d29fae38778a9c0976a148 100644 GIT binary patch literal 339 zcmV-Z0j&N(RzV?6O6Aj3* zPabpFAs>qf00000000A(kFid}Fc^eW5JJkv8ypp)GcUkIkl3IC1PjQC|1>VH9c(8e zq71OWRFmk}lS5rVGiD8=)M? z7;T^xgesX790R6AO4bRhSni|FUQan^jvd`D2FpRM)>5$2st)TobHaCZiir0J+l5MM z!+x(IWkM1U_m6iY3<__=1ReJ&abdWL4GhulTdmq5yoNaW6lRnAyV+#)3b-n#xncvd z_B#j-a##I<@$?g8;UV}JM>pC#*y%=FUoT~>Bp5m`grWKmos;pmJ8_}7By(Dlv3{o0 lpk7`zn0On%yg!eCxhRCcDXbN$hl~uZegG+;xZb}3002_4kwgFh literal 407 zcmV;I0cid~RzV7l z{>OebbRUZd00000000BEQM*b5K@?3C5z<+wxdt)qZh}P`D_5}7ph5^Jvzfce#GRRS zW;PhqLMyvqXBXmEXyMQJ1LhN)-Nd{ILIkH6xQ}!0x%UhLKa`Ct{rHN8nGkPwbxXz} zg-9`B0F{yoqyQ#5BxDpg5iCG$m=+|mtwui#C?$r}vhjLmGn2gRMrLa*$et$vVwgqC z06f}6IE+OjN$3d=1cZf1bNPDN<@vhHPix0szFsQXpj_c;8hC6QeFW*Zv0>6e&LSK> zLG8~%Dh>x1?$QYCU*d(fmZC5&J3Ph0s1arwM_d;RCnmgxO;g7CWy_2(}s&}x|xfbalD7=oD!bG5qP+3t$KNd7Z zb=g6sEq!q{V{h+QvT~aIe0l$R>y3}Rpkbt%*-e?&Of;c|3b*Gk{tfG>aU?SX004`L ByNCb) diff --git a/packages/build/tests/unit/validate_edge_manifest/tests.js b/packages/build/tests/unit/validate_edge_manifest/tests.js index 5e75c64a65..95400edf43 100644 --- a/packages/build/tests/unit/validate_edge_manifest/tests.js +++ b/packages/build/tests/unit/validate_edge_manifest/tests.js @@ -1,6 +1,7 @@ import test from 'ava' import { validateEdgeFunctionsManifest } from '../../../lib/plugins_core/edge_functions/validate_manifest/validate_edge_functions_manifest.js' +import { removeErrorColors } from '../../../src/error/colors.js' test('should validate valid manifest', async (t) => { const manifest = { @@ -35,11 +36,15 @@ test('should print error on invalid manifest', async (t) => { const error = await t.throwsAsync(validateEdgeFunctionsManifest(manifest)) + removeErrorColors(error) + t.snapshot(error.message) }) test('should print error on empty manifest', async (t) => { const error = await t.throwsAsync(validateEdgeFunctionsManifest({})) + removeErrorColors(error) + t.snapshot(error.message) })