Skip to content

Commit

Permalink
fix(npm): use nvmrc from lock file dir (#18978)
Browse files Browse the repository at this point in the history
Co-authored-by: Michael Kriese <michael.kriese@visualon.de>
  • Loading branch information
rarkins and viceice committed Nov 18, 2022
1 parent ff96c5f commit d1d6feb
Show file tree
Hide file tree
Showing 6 changed files with 24 additions and 20 deletions.
2 changes: 1 addition & 1 deletion lib/modules/manager/npm/post-update/lerna.ts
Expand Up @@ -43,7 +43,7 @@ export async function generateLockFiles(
}
logger.debug(`Spawning lerna with ${lernaClient} to create lock files`);
const toolConstraints: ToolConstraint[] = [
await getNodeToolConstraint(config, []),
await getNodeToolConstraint(config, [], lockFileDir),
];
const cmd: string[] = [];
let cmdOptions = '';
Expand Down
20 changes: 11 additions & 9 deletions lib/modules/manager/npm/post-update/node-version.spec.ts
Expand Up @@ -17,34 +17,34 @@ describe('modules/manager/npm/post-update/node-version', () => {
it('returns package.json range', async () => {
fs.readLocalFile.mockResolvedValueOnce(null as never);
fs.readLocalFile.mockResolvedValueOnce(null as never);
const res = await getNodeConstraint(config);
const res = await getNodeConstraint(config, '');
expect(res).toBe('^12.16.0');
});

it('returns .node-version value', async () => {
fs.readLocalFile.mockResolvedValueOnce(null as never);
fs.readLocalFile.mockResolvedValueOnce('12.16.1\n');
const res = await getNodeConstraint(config);
const res = await getNodeConstraint(config, '');
expect(res).toBe('12.16.1');
});

it('returns .nvmrc value', async () => {
fs.readLocalFile.mockResolvedValueOnce('12.16.2\n');
const res = await getNodeConstraint(config);
const res = await getNodeConstraint(config, '');
expect(res).toBe('12.16.2');
});

it('ignores unusable ranges in dotfiles', async () => {
fs.readLocalFile.mockResolvedValueOnce('latest');
fs.readLocalFile.mockResolvedValueOnce('lts');
const res = await getNodeConstraint(config);
const res = await getNodeConstraint(config, '');
expect(res).toBe('^12.16.0');
});

it('returns no constraint', async () => {
fs.readLocalFile.mockResolvedValueOnce(null as never);
fs.readLocalFile.mockResolvedValueOnce(null as never);
const res = await getNodeConstraint({ ...config, constraints: null });
const res = await getNodeConstraint({ ...config, constraints: null }, '');
expect(res).toBeNull();
});
});
Expand All @@ -64,17 +64,19 @@ describe('modules/manager/npm/post-update/node-version', () => {
describe('getNodeToolConstraint()', () => {
it('returns getNodeUpdate', async () => {
expect(
await getNodeToolConstraint(config, [
{ depName: 'node', newValue: '16.15.0' },
])
await getNodeToolConstraint(
config,
[{ depName: 'node', newValue: '16.15.0' }],
''
)
).toEqual({
toolName: 'node',
constraint: '16.15.0',
});
});

it('returns getNodeConstraint', async () => {
expect(await getNodeToolConstraint(config, [])).toEqual({
expect(await getNodeToolConstraint(config, [], '')).toEqual({
toolName: 'node',
constraint: '^12.16.0',
});
Expand Down
16 changes: 9 additions & 7 deletions lib/modules/manager/npm/post-update/node-version.ts
@@ -1,7 +1,8 @@
import semver from 'semver';
import upath from 'upath';
import { logger } from '../../../../logger';
import type { ToolConstraint } from '../../../../util/exec/types';
import { getSiblingFileName, readLocalFile } from '../../../../util/fs';
import { readLocalFile } from '../../../../util/fs';
import { newlineRegex, regEx } from '../../../../util/regex';
import type { PostUpdateConfig, Upgrade } from '../../types';

Expand Down Expand Up @@ -33,13 +34,13 @@ function getPackageJsonConstraint(
}

export async function getNodeConstraint(
config: Partial<PostUpdateConfig>
config: Partial<PostUpdateConfig>,
lockFileDir: string
): Promise<string | null> {
const { packageFile } = config;
// TODO: fix types (#7154)
const constraint =
(await getNodeFile(getSiblingFileName(packageFile!, '.nvmrc'))) ??
(await getNodeFile(getSiblingFileName(packageFile!, '.node-version'))) ??
(await getNodeFile(upath.join(lockFileDir, '.nvmrc'))) ??
(await getNodeFile(upath.join(lockFileDir, '.node-version'))) ??
getPackageJsonConstraint(config);
if (!constraint) {
logger.debug('No node constraint found - using latest');
Expand All @@ -53,10 +54,11 @@ export function getNodeUpdate(upgrades: Upgrade[]): string | undefined {

export async function getNodeToolConstraint(
config: Partial<PostUpdateConfig>,
upgrades: Upgrade[]
upgrades: Upgrade[],
lockFileDir: string
): Promise<ToolConstraint> {
const constraint =
getNodeUpdate(upgrades) ?? (await getNodeConstraint(config));
getNodeUpdate(upgrades) ?? (await getNodeConstraint(config, lockFileDir));

return {
toolName: 'node',
Expand Down
2 changes: 1 addition & 1 deletion lib/modules/manager/npm/post-update/npm.ts
Expand Up @@ -63,7 +63,7 @@ export async function generateLockFile(
cwdFile: lockFileName,
extraEnv,
toolConstraints: [
await getNodeToolConstraint(config, upgrades),
await getNodeToolConstraint(config, upgrades, lockFileDir),
npmToolConstraint,
],
docker: {
Expand Down
2 changes: 1 addition & 1 deletion lib/modules/manager/npm/post-update/pnpm.ts
Expand Up @@ -46,7 +46,7 @@ export async function generateLockFile(
image: 'sidecar',
},
toolConstraints: [
await getNodeToolConstraint(config, upgrades),
await getNodeToolConstraint(config, upgrades, lockFileDir),
pnpmToolConstraint,
],
};
Expand Down
2 changes: 1 addition & 1 deletion lib/modules/manager/npm/post-update/yarn.ts
Expand Up @@ -99,7 +99,7 @@ export async function generateLockFile(
let lockFile: string | null = null;
try {
const toolConstraints: ToolConstraint[] = [
await getNodeToolConstraint(config, upgrades),
await getNodeToolConstraint(config, upgrades, lockFileDir),
];
const yarnUpdate = upgrades.find(isYarnUpdate);
const yarnCompatibility = yarnUpdate
Expand Down

0 comments on commit d1d6feb

Please sign in to comment.