Skip to content
Permalink
Browse files

[now-build-utils] Use latest node if no package.json found (#3587)

In a previous release, we pinned the node version to the project so that we could upgrade new projects to a newer version of Node.js while maintaining backwards compatibility with existing projects.

This puts some burden on the user when they're deployment is a year old and their pinned version of Node reaches EOL. Because we currently force the user to add a package.json.

This PR changes the behavior so projects are no longer pinned. Instead, newer deployments get the latest Node unless they opt-in and pin via package.json.
  • Loading branch information
styfle authored and kodiakhq committed Jan 14, 2020
1 parent fc4cb9a commit ce76dc980db831ea1cd5af658dbd0c23ba002cc2
@@ -25,10 +25,6 @@ const upstreamProvider =
'This change is the result of a decision made by an upstream infrastructure provider (AWS).' +
'\nRead more: https://docs.aws.amazon.com/lambda/latest/dg/runtime-support-policy.html';

export function getOldestNodeVersion(): NodeVersion {
return allOptions[allOptions.length - 1];
}

export function getLatestNodeVersion(): NodeVersion {
return allOptions[0];
}
@@ -41,7 +37,7 @@ export async function getSupportedNodeVersion(
engineRange?: string,
isAuto?: boolean
): Promise<NodeVersion> {
let selection = getOldestNodeVersion();
let selection = getLatestNodeVersion();

if (engineRange) {
const found = allOptions.some(o => {
@@ -139,8 +139,8 @@ export function getSpawnOptions(

export async function getNodeVersion(
destPath: string,
minNodeVersion?: string,
config?: Config,
_nodeVersion?: string,
_config?: Config,
meta?: Meta
): Promise<NodeVersion> {
if (meta && meta.isDev) {
@@ -150,18 +150,10 @@ export async function getNodeVersion(
}
const { packageJson } = await scanParentDirs(destPath, true);
let range: string | undefined;
let isAuto = false;
let isAuto = true;
if (packageJson && packageJson.engines && packageJson.engines.node) {
range = packageJson.engines.node;
} else if (minNodeVersion) {
range = minNodeVersion;
isAuto = true;
} else if (config && config.nodeVersion) {
range = config.nodeVersion;
isAuto = true;
} else if (config && config.zeroConfig) {
range = '10.x';
isAuto = true;
isAuto = false;
}
return getSupportedNodeVersion(range, isAuto);
}
@@ -96,18 +96,6 @@ it('should match all semver ranges', async () => {
expect(await getSupportedNodeVersion('^10.5.0')).toHaveProperty('major', 10);
});

it('should select correct node version in getNodeVersion()', async () => {
expect(
await getNodeVersion('/tmp', undefined, { nodeVersion: '12.x' })
).toHaveProperty('major', 12);
expect(
await getNodeVersion('/tmp', undefined, { nodeVersion: '10.x' })
).toHaveProperty('major', 10);
expect(
await getNodeVersion('/tmp', '10.x', { nodeVersion: '12.x' })
).toHaveProperty('major', 10);
});

it('should ignore node version in now dev getNodeVersion()', async () => {
expect(
await getNodeVersion(
@@ -1,5 +1,5 @@
{
"engines": {
"node": "10.0.0 - 10.99.0"
"node": "10.0.0 - 10.99.99"
}
}
@@ -19,11 +19,6 @@ async function runBuildLambda(inputPath) {
const nowJson = require(nowJsonRef.fsPath);
expect(nowJson.builds.length).toBe(1);
const build = nowJson.builds[0];
if (!build.config || !build.config.nodeVersion) {
// Mimic api-deployments when a new project is created
const nodeVersion = getLatestNodeVersion().range;
build.config = { ...build.config, nodeVersion };
}
expect(build.src.includes('*')).toBeFalsy();
const entrypoint = build.src.replace(/^\//, ''); // strip leftmost slash
expect(inputFiles[entrypoint]).toBeDefined();

1 comment on commit ce76dc9

@now

This comment has been minimized.

Please sign in to comment.
You can’t perform that action at this time.