yarn-berry.yarn-berry-offline: improved support for yarn v1 git dependencies (#402251)
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
diff --git a/packages/plugin-essentials/sources/commands/install.ts b/packages/plugin-essentials/sources/commands/install.ts
|
||||
index 9dcd02d..cf1765a 100644
|
||||
index 9dcd02d12..cf1765a20 100644
|
||||
--- a/packages/plugin-essentials/sources/commands/install.ts
|
||||
+++ b/packages/plugin-essentials/sources/commands/install.ts
|
||||
@@ -254,6 +254,7 @@ export default class YarnCommand extends BaseCommand {
|
||||
@@ -11,7 +11,7 @@ index 9dcd02d..cf1765a 100644
|
||||
configuration,
|
||||
json: this.json,
|
||||
diff --git a/packages/plugin-git/sources/GitFetcher.ts b/packages/plugin-git/sources/GitFetcher.ts
|
||||
index fe2a4fc..bfa8272 100644
|
||||
index fe2a4fce8..bfa82728e 100644
|
||||
--- a/packages/plugin-git/sources/GitFetcher.ts
|
||||
+++ b/packages/plugin-git/sources/GitFetcher.ts
|
||||
@@ -50,9 +50,14 @@ export class GitFetcher implements Fetcher {
|
||||
@@ -32,7 +32,7 @@ index fe2a4fc..bfa8272 100644
|
||||
|
||||
await scriptUtils.prepareExternalProject(cloneTarget, packagePath, {
|
||||
diff --git a/packages/plugin-npm/sources/NpmSemverFetcher.ts b/packages/plugin-npm/sources/NpmSemverFetcher.ts
|
||||
index 0f69423..5b21462 100644
|
||||
index 0f69423c7..5b21462a5 100644
|
||||
--- a/packages/plugin-npm/sources/NpmSemverFetcher.ts
|
||||
+++ b/packages/plugin-npm/sources/NpmSemverFetcher.ts
|
||||
@@ -47,6 +47,7 @@ export class NpmSemverFetcher implements Fetcher {
|
||||
@@ -44,7 +44,7 @@ index 0f69423..5b21462 100644
|
||||
try {
|
||||
sourceBuffer = await npmHttpUtils.get(NpmSemverFetcher.getLocatorUrl(locator), {
|
||||
diff --git a/packages/yarnpkg-core/sources/Cache.ts b/packages/yarnpkg-core/sources/Cache.ts
|
||||
index d5e6864..374b5d6 100644
|
||||
index d5e686420..374b5d67f 100644
|
||||
--- a/packages/yarnpkg-core/sources/Cache.ts
|
||||
+++ b/packages/yarnpkg-core/sources/Cache.ts
|
||||
@@ -158,6 +158,10 @@ export class Cache {
|
||||
@@ -59,27 +59,60 @@ index d5e6864..374b5d6 100644
|
||||
const mirrorPath = this.getLocatorMirrorPath(locator);
|
||||
|
||||
diff --git a/packages/yarnpkg-core/sources/scriptUtils.ts b/packages/yarnpkg-core/sources/scriptUtils.ts
|
||||
index b3c2c59..6b9eb2f 100644
|
||||
index b3c2c5903..641687745 100644
|
||||
--- a/packages/yarnpkg-core/sources/scriptUtils.ts
|
||||
+++ b/packages/yarnpkg-core/sources/scriptUtils.ts
|
||||
@@ -287,10 +287,6 @@ export async function prepareExternalProject(cwd: PortablePath, outputPath: Port
|
||||
// Run an install; we can't avoid it unless we inspect the
|
||||
// package.json, which I don't want to do to keep the codebase
|
||||
// clean (even if it has a slight perf cost when cloning v1 repos)
|
||||
@@ -262,20 +262,6 @@ export async function prepareExternalProject(cwd: PortablePath, outputPath: Port
|
||||
? [`workspace`, workspace]
|
||||
: [];
|
||||
|
||||
- // `set version` will update the Manifest to contain a `packageManager` field with the latest
|
||||
- // Yarn version which causes the results to change depending on when this command was run,
|
||||
- // therefore we revert any change made to it.
|
||||
- const manifestPath = ppath.join(cwd, Filename.manifest);
|
||||
- const manifestBuffer = await xfs.readFilePromise(manifestPath);
|
||||
-
|
||||
- // Makes sure that we'll be using Yarn 1.x
|
||||
- const version = await execUtils.pipevp(process.execPath, [process.argv[1], `set`, `version`, `classic`, `--only-if-needed`], {cwd, env, stdin, stdout, stderr, end: execUtils.EndStrategy.ErrorCode});
|
||||
- if (version.code !== 0)
|
||||
- return version.code;
|
||||
-
|
||||
- // Revert any changes made to the Manifest by `set version`.
|
||||
- await xfs.writeFilePromise(manifestPath, manifestBuffer);
|
||||
-
|
||||
// Otherwise Yarn 1 will pack the .yarn directory :(
|
||||
await xfs.appendFilePromise(ppath.join(cwd, `.npmignore` as PortablePath), `/.yarn\n`);
|
||||
|
||||
@@ -284,16 +270,8 @@ export async function prepareExternalProject(cwd: PortablePath, outputPath: Port
|
||||
// Remove environment variables that limit the install to just production dependencies
|
||||
delete env.NODE_ENV;
|
||||
|
||||
- // Run an install; we can't avoid it unless we inspect the
|
||||
- // package.json, which I don't want to do to keep the codebase
|
||||
- // clean (even if it has a slight perf cost when cloning v1 repos)
|
||||
- const install = await execUtils.pipevp(`yarn`, [`install`], {cwd, env, stdin, stdout, stderr, end: execUtils.EndStrategy.ErrorCode});
|
||||
- if (install.code !== 0)
|
||||
- return install.code;
|
||||
-
|
||||
stdout.write(`\n`);
|
||||
- stdout.write(`\n`);
|
||||
-
|
||||
- const pack = await execUtils.pipevp(`yarn`, [...workspaceCli, `pack`, `--filename`, npath.fromPortablePath(outputPath)], {cwd, env, stdin, stdout, stderr});
|
||||
+ env["SKIP_YARN_COREPACK_CHECK"] = "1";
|
||||
+ const pack = await execUtils.pipevp(`@yarnv1@`, [...workspaceCli, `--offline`, `pack`, `--filename`, npath.fromPortablePath(outputPath)], {cwd, env, stdin, stdout, stderr});
|
||||
if (pack.code !== 0)
|
||||
return pack.code;
|
||||
|
||||
const pack = await execUtils.pipevp(`yarn`, [...workspaceCli, `pack`, `--filename`, npath.fromPortablePath(outputPath)], {cwd, env, stdin, stdout, stderr});
|
||||
@@ -375,9 +371,6 @@ export async function prepareExternalProject(cwd: PortablePath, outputPath: Port
|
||||
// We can't use `npm ci` because some projects don't have npm
|
||||
// lockfiles that are up-to-date. Hopefully npm won't decide
|
||||
// to change the versions randomly.
|
||||
@@ -372,13 +350,6 @@ export async function prepareExternalProject(cwd: PortablePath, outputPath: Port
|
||||
delete env.NPM_CONFIG_PRODUCTION;
|
||||
delete env.NODE_ENV;
|
||||
|
||||
- // We can't use `npm ci` because some projects don't have npm
|
||||
- // lockfiles that are up-to-date. Hopefully npm won't decide
|
||||
- // to change the versions randomly.
|
||||
- const install = await execUtils.pipevp(`npm`, [`install`], {cwd, env, stdin, stdout, stderr, end: execUtils.EndStrategy.ErrorCode});
|
||||
- if (install.code !== 0)
|
||||
- return install.code;
|
||||
|
||||
-
|
||||
const packStream = new PassThrough();
|
||||
const packPromise = miscUtils.bufferStream(packStream);
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
diff --git a/packages/plugin-essentials/sources/commands/install.ts b/packages/plugin-essentials/sources/commands/install.ts
|
||||
index 90ba553..ef5368c 100644
|
||||
index 90ba55349..ef5368c1b 100644
|
||||
--- a/packages/plugin-essentials/sources/commands/install.ts
|
||||
+++ b/packages/plugin-essentials/sources/commands/install.ts
|
||||
@@ -302,6 +302,7 @@ export default class YarnCommand extends BaseCommand {
|
||||
@@ -11,7 +11,7 @@ index 90ba553..ef5368c 100644
|
||||
newSettings[rule.name] = rule.value;
|
||||
}
|
||||
diff --git a/packages/plugin-git/sources/GitFetcher.ts b/packages/plugin-git/sources/GitFetcher.ts
|
||||
index d9f8d85..4db9f90 100644
|
||||
index d9f8d85c7..4db9f9008 100644
|
||||
--- a/packages/plugin-git/sources/GitFetcher.ts
|
||||
+++ b/packages/plugin-git/sources/GitFetcher.ts
|
||||
@@ -50,7 +50,11 @@ export class GitFetcher implements Fetcher {
|
||||
@@ -28,7 +28,7 @@ index d9f8d85..4db9f90 100644
|
||||
|
||||
const packagePath = ppath.join(projectPath, `package.tgz`);
|
||||
diff --git a/packages/plugin-npm/sources/NpmSemverFetcher.ts b/packages/plugin-npm/sources/NpmSemverFetcher.ts
|
||||
index 7347859..ea5767f 100644
|
||||
index 7347859aa..ea5767f88 100644
|
||||
--- a/packages/plugin-npm/sources/NpmSemverFetcher.ts
|
||||
+++ b/packages/plugin-npm/sources/NpmSemverFetcher.ts
|
||||
@@ -45,6 +45,7 @@ export class NpmSemverFetcher implements Fetcher {
|
||||
@@ -40,7 +40,7 @@ index 7347859..ea5767f 100644
|
||||
try {
|
||||
sourceBuffer = await npmHttpUtils.get(NpmSemverFetcher.getLocatorUrl(locator), {
|
||||
diff --git a/packages/yarnpkg-core/sources/Cache.ts b/packages/yarnpkg-core/sources/Cache.ts
|
||||
index b712ecf..c7effbc 100644
|
||||
index b712ecf11..c7effbc61 100644
|
||||
--- a/packages/yarnpkg-core/sources/Cache.ts
|
||||
+++ b/packages/yarnpkg-core/sources/Cache.ts
|
||||
@@ -225,6 +225,10 @@ export class Cache {
|
||||
@@ -55,27 +55,60 @@ index b712ecf..c7effbc 100644
|
||||
const mirrorPath = this.getLocatorMirrorPath(locator);
|
||||
|
||||
diff --git a/packages/yarnpkg-core/sources/scriptUtils.ts b/packages/yarnpkg-core/sources/scriptUtils.ts
|
||||
index 2dcd7e5..fe40fbb 100644
|
||||
index 2dcd7e59e..a2a7f9791 100644
|
||||
--- a/packages/yarnpkg-core/sources/scriptUtils.ts
|
||||
+++ b/packages/yarnpkg-core/sources/scriptUtils.ts
|
||||
@@ -287,10 +287,6 @@ export async function prepareExternalProject(cwd: PortablePath, outputPath: Port
|
||||
// Run an install; we can't avoid it unless we inspect the
|
||||
// package.json, which I don't want to do to keep the codebase
|
||||
// clean (even if it has a slight perf cost when cloning v1 repos)
|
||||
@@ -262,20 +262,6 @@ export async function prepareExternalProject(cwd: PortablePath, outputPath: Port
|
||||
? [`workspace`, workspace]
|
||||
: [];
|
||||
|
||||
- // `set version` will update the Manifest to contain a `packageManager` field with the latest
|
||||
- // Yarn version which causes the results to change depending on when this command was run,
|
||||
- // therefore we revert any change made to it.
|
||||
- const manifestPath = ppath.join(cwd, Filename.manifest);
|
||||
- const manifestBuffer = await xfs.readFilePromise(manifestPath);
|
||||
-
|
||||
- // Makes sure that we'll be using Yarn 1.x
|
||||
- const version = await execUtils.pipevp(process.execPath, [process.argv[1], `set`, `version`, `classic`, `--only-if-needed`, `--yarn-path`], {cwd, env, stdin, stdout, stderr, end: execUtils.EndStrategy.ErrorCode});
|
||||
- if (version.code !== 0)
|
||||
- return version.code;
|
||||
-
|
||||
- // Revert any changes made to the Manifest by `set version`.
|
||||
- await xfs.writeFilePromise(manifestPath, manifestBuffer);
|
||||
-
|
||||
// Otherwise Yarn 1 will pack the .yarn directory :(
|
||||
await xfs.appendFilePromise(ppath.join(cwd, `.npmignore`), `/.yarn\n`);
|
||||
|
||||
@@ -284,16 +270,8 @@ export async function prepareExternalProject(cwd: PortablePath, outputPath: Port
|
||||
// Remove environment variables that limit the install to just production dependencies
|
||||
delete env.NODE_ENV;
|
||||
|
||||
- // Run an install; we can't avoid it unless we inspect the
|
||||
- // package.json, which I don't want to do to keep the codebase
|
||||
- // clean (even if it has a slight perf cost when cloning v1 repos)
|
||||
- const install = await execUtils.pipevp(`yarn`, [`install`], {cwd, env, stdin, stdout, stderr, end: execUtils.EndStrategy.ErrorCode});
|
||||
- if (install.code !== 0)
|
||||
- return install.code;
|
||||
-
|
||||
stdout.write(`\n`);
|
||||
- stdout.write(`\n`);
|
||||
-
|
||||
- const pack = await execUtils.pipevp(`yarn`, [...workspaceCli, `pack`, `--filename`, npath.fromPortablePath(outputPath)], {cwd, env, stdin, stdout, stderr});
|
||||
+ env["SKIP_YARN_COREPACK_CHECK"] = "1";
|
||||
+ const pack = await execUtils.pipevp(`@yarnv1@`, [...workspaceCli, `--offline`, `pack`, `--filename`, npath.fromPortablePath(outputPath)], {cwd, env, stdin, stdout, stderr});
|
||||
if (pack.code !== 0)
|
||||
return pack.code;
|
||||
|
||||
const pack = await execUtils.pipevp(`yarn`, [...workspaceCli, `pack`, `--filename`, npath.fromPortablePath(outputPath)], {cwd, env, stdin, stdout, stderr});
|
||||
@@ -375,9 +371,6 @@ export async function prepareExternalProject(cwd: PortablePath, outputPath: Port
|
||||
// We can't use `npm ci` because some projects don't have npm
|
||||
// lockfiles that are up-to-date. Hopefully npm won't decide
|
||||
// to change the versions randomly.
|
||||
@@ -372,13 +350,6 @@ export async function prepareExternalProject(cwd: PortablePath, outputPath: Port
|
||||
delete env.NPM_CONFIG_PRODUCTION;
|
||||
delete env.NODE_ENV;
|
||||
|
||||
- // We can't use `npm ci` because some projects don't have npm
|
||||
- // lockfiles that are up-to-date. Hopefully npm won't decide
|
||||
- // to change the versions randomly.
|
||||
- const install = await execUtils.pipevp(`npm`, [`install`, `--legacy-peer-deps`], {cwd, env, stdin, stdout, stderr, end: execUtils.EndStrategy.ErrorCode});
|
||||
- if (install.code !== 0)
|
||||
- return install.code;
|
||||
|
||||
-
|
||||
const packStream = new PassThrough();
|
||||
const packPromise = miscUtils.bufferStream(packStream);
|
||||
|
||||
|
||||
@@ -2,6 +2,8 @@
|
||||
lib,
|
||||
newScope,
|
||||
yarn-berry,
|
||||
yarn,
|
||||
replaceVars,
|
||||
libzip,
|
||||
zlib,
|
||||
zlib-ng,
|
||||
@@ -12,7 +14,11 @@ let
|
||||
"3" = final: {
|
||||
berryCacheVersion = "8";
|
||||
|
||||
berryOfflinePatches = [ ./berry-3-offline.patch ];
|
||||
berryOfflinePatches = [
|
||||
(replaceVars ./berry-3-offline.patch {
|
||||
yarnv1 = lib.getExe yarn;
|
||||
})
|
||||
];
|
||||
|
||||
# Known good version: 1.11.3
|
||||
libzip =
|
||||
@@ -29,7 +35,11 @@ let
|
||||
"4" = final: {
|
||||
berryCacheVersion = "10";
|
||||
|
||||
berryOfflinePatches = [ ./berry-4-offline.patch ];
|
||||
berryOfflinePatches = [
|
||||
(replaceVars ./berry-4-offline.patch {
|
||||
yarnv1 = lib.getExe yarn;
|
||||
})
|
||||
];
|
||||
|
||||
# Known good version: 1.11.3
|
||||
libzip =
|
||||
|
||||
@@ -75,7 +75,7 @@ yarnBerryConfigHook() {
|
||||
export npm_config_nodedir="@nodeSrc@"
|
||||
export npm_config_node_gyp="@nodeGyp@"
|
||||
|
||||
YARN_IGNORE_PATH=1 @yarn_offline@ install --mode=skip-build
|
||||
YARN_IGNORE_PATH=1 @yarn_offline@ install --mode=skip-build --inline-builds
|
||||
if [[ -z "${dontYarnBerryPatchShebangs-}" ]]; then
|
||||
echo "Running patchShebangs in between the Link and the Build step..."
|
||||
patchShebangs node_modules
|
||||
|
||||
@@ -13,18 +13,18 @@
|
||||
|
||||
rustPlatform.buildRustPackage (finalAttrs: {
|
||||
pname = "yarn-berry-${toString berryVersion}-fetcher";
|
||||
version = "1.2.1";
|
||||
version = "1.2.2";
|
||||
|
||||
src = fetchFromGitLab {
|
||||
domain = "cyberchaos.dev";
|
||||
owner = "yuka";
|
||||
repo = "yarn-berry-fetcher";
|
||||
tag = "1.2.1";
|
||||
hash = "sha256-gBre1LGyDVhikigWoWWW5qZyDCHp4lDONPqg1CRtaFM=";
|
||||
tag = finalAttrs.version;
|
||||
hash = "sha256-4lPnjLvS9MBtFyIqFKY91w/6MAesziGMJLrE60djEsI=";
|
||||
};
|
||||
|
||||
useFetchCargoVendor = true;
|
||||
cargoHash = "sha256-KNVfwv+qaJEu3TqhCKpiTfuRvFIFcHstcpjre/QXDso=";
|
||||
cargoHash = "sha256-i0AJ3z+7oSqBW45Vs6dojcipQPoaIa6bejhqCfkdZNA=";
|
||||
|
||||
env.YARN_ZIP_SUPPORTED_CACHE_VERSION = berryCacheVersion;
|
||||
env.LIBZIP_SYS_USE_PKG_CONFIG = 1;
|
||||
|
||||
Reference in New Issue
Block a user