Skip to content

Commit

Permalink
feat(yarn): support packageManager url
Browse files Browse the repository at this point in the history
Closes #27656
  • Loading branch information
rarkins committed Mar 6, 2024
1 parent caecc5c commit 8a7053d
Show file tree
Hide file tree
Showing 2 changed files with 51 additions and 2 deletions.
42 changes: 42 additions & 0 deletions lib/modules/manager/npm/post-update/yarn.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -409,6 +409,48 @@ describe('modules/manager/npm/post-update/yarn', () => {
expect(res.lockFile).toBe('package-lock-contents');
});

it('supports URL for corepack', async () => {
process.env.CONTAINERBASE = 'true';
GlobalConfig.set({
localDir: '.',
binarySource: 'install',
cacheDir: '/tmp/cache',
});
Fixtures.mock(
{
'package.json':
'{ "packageManager": "yarn@https://nexus-proxy.repo.local.renovatebot.com/nexus/content/groups/npm-all/@yarnpkg/cli-dist/-/cli-dist-3.7.0.tgz#sha224.a06723957ae0292e21f598a45" }',
'yarn.lock': 'package-lock-contents',
},
'some-dir',
);
mockedFunction(getPkgReleases).mockResolvedValueOnce({
releases: [{ version: '0.10.0' }],
});
const execSnapshots = mockExecAll({
stdout: '2.1.0',
stderr: '',
});
const config = partial<PostUpdateConfig<NpmManagerData>>({
managerData: { hasPackageManager: true },
});
const res = await yarnHelper.generateLockFile('some-dir', {}, config);
expect(execSnapshots).toMatchObject([
{ cmd: 'install-tool node 16.16.0', options: { cwd: 'some-dir' } },
{ cmd: 'install-tool yarn-slim 0.10.0', options: { cwd: 'some-dir' } },
{
cmd: 'yarn install --ignore-engines --ignore-platform --network-timeout 100000 --ignore-scripts',
options: {
cwd: 'some-dir',
env: {
CI: 'true',
},
},
},
]);
expect(res.lockFile).toBe('package-lock-contents');
});

it('falls back to Yarn v1 for undefined constraint', async () => {
process.env.CONTAINERBASE = 'true';
GlobalConfig.set({
Expand Down
11 changes: 9 additions & 2 deletions lib/modules/manager/npm/post-update/yarn.ts
Original file line number Diff line number Diff line change
Expand Up @@ -110,8 +110,15 @@ async function determineYarnConstraint(
await lazyPgkJson.getValue(),
);
if (packageManagerVersion) {
logger.debug('Using yarn constraint from package.json>packageManager');
return packageManagerVersion;
if (semver.valid(packageManagerVersion)) {
logger.debug('Using yarn constraint from package.json>packageManager');
return packageManagerVersion;
}
logger.debug(
{ packageManagerVersion },
'Found yarn in package.json>packageManager but it is not a simple version. Assuming ^3.0.0',
);
return '^3.0.0';
}
const lockFileName = upath.join(lockFileDir, 'yarn.lock');
const lockConstraint = getYarnVersionFromLock(
Expand Down

0 comments on commit 8a7053d

Please sign in to comment.