Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix(publish): support inconsistent workspace prefix usage #3413

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
27 changes: 15 additions & 12 deletions commands/publish/index.js
Expand Up @@ -560,19 +560,22 @@ class PublishCommand extends Command {

return pMap(updatesWithWorkspaceLinks, (node) => {
for (const [depName, resolved] of node.localDependencies) {
let depVersion;
let savePrefix;
if (resolved.workspaceAlias) {
depVersion = this.updatesVersions.get(depName) || this.packageGraph.get(depName).pkg.version;
savePrefix = resolved.workspaceAlias === "*" ? "" : resolved.workspaceAlias;
} else {
const specMatch = resolved.workspaceSpec.match(/^workspace:([~^]?)(.*)/);
savePrefix = specMatch[1];
depVersion = specMatch[2];
// only update local dependencies with workspace: links
if (resolved.workspaceSpec) {
let depVersion;
let savePrefix;
if (resolved.workspaceAlias) {
depVersion = this.updatesVersions.get(depName) || this.packageGraph.get(depName).pkg.version;
savePrefix = resolved.workspaceAlias === "*" ? "" : resolved.workspaceAlias;
} else {
const specMatch = resolved.workspaceSpec.match(/^workspace:([~^]?)(.*)/);
savePrefix = specMatch[1];
depVersion = specMatch[2];
}

// it no longer matters if we mutate the shared Package instance
node.pkg.updateLocalDependency(resolved, depVersion, savePrefix, { retainWorkspacePrefix: false });
}

// it no longer matters if we mutate the shared Package instance
node.pkg.updateLocalDependency(resolved, depVersion, savePrefix, { retainWorkspacePrefix: false });
}

// writing changes to disk handled in serializeChanges()
Expand Down
29 changes: 26 additions & 3 deletions e2e/tests/lerna-publish/lerna-publish-npm-workspace-prefix.spec.ts
Expand Up @@ -38,6 +38,7 @@ describe("lerna-publish-workspace-prefix", () => {
await fixture.lerna("create test-workspace-exact -y");
await fixture.lerna("create test-workspace-compat -y");
await fixture.lerna("create test-workspace-approx -y");
await fixture.lerna("create test-no-workspace-prefix -y");
await fixture.lerna("create test-main -y");

await fixture.updateJson(`packages/test-main/package.json`, (json) => ({
Expand All @@ -50,6 +51,7 @@ describe("lerna-publish-workspace-prefix", () => {
"test-workspace-exact": `workspace:0.0.0`,
"test-workspace-compat": `workspace:^0.0.0`,
"test-workspace-approx": `workspace:~0.0.0`,
"test-no-workspace-prefix": `^0.0.0`,
},
}));

Expand All @@ -75,8 +77,9 @@ describe("lerna-publish-workspace-prefix", () => {
expect(replaceVersion(output.combinedOutput)).toMatchInlineSnapshot(`
lerna notice cli v999.9.9-e2e.0

Found 7 packages to publish:
Found 8 packages to publish:
- test-main => XX.XX.XX
- test-no-workspace-prefix => XX.XX.XX
- test-workspace-alias-caret => XX.XX.XX
- test-workspace-alias-star => XX.XX.XX
- test-workspace-alias-tilde => XX.XX.XX
Expand All @@ -88,9 +91,26 @@ describe("lerna-publish-workspace-prefix", () => {
lerna info publish Publishing packages to npm...
lerna notice Skipping all user and access validation due to third-party registry
lerna notice Make sure you're authenticated properly ¯\\_(ツ)_/¯
lerna WARN ENOLICENSE Packages test-main, test-workspace-alias-caret, test-workspace-alias-star, test-workspace-alias-tilde, test-workspace-approx, test-workspace-compat, and test-workspace-exact are missing a license.
lerna WARN ENOLICENSE Packages test-main, test-no-workspace-prefix, test-workspace-alias-caret, test-workspace-alias-star, test-workspace-alias-tilde, test-workspace-approx, test-workspace-compat, and test-workspace-exact are missing a license.
lerna WARN ENOLICENSE One way to fix this is to add a LICENSE.md file to the root of this repository.
lerna WARN ENOLICENSE See https://choosealicense.com for additional guidance.
lerna success published test-no-workspace-prefix XX.XX.XX
lerna notice
lerna notice 📦 test-no-workspace-prefix@XX.XX.XX
lerna notice === Tarball Contents ===
lerna notice XXXB lib/test-no-workspace-prefix.js
lerna notice XXXB package.json
lerna notice XXXB README.md
lerna notice === Tarball Details ===
lerna notice name: test-no-workspace-prefix
lerna notice version: XX.XX.XX
lerna notice filename: test-no-workspace-prefix-XX.XX.XX.tgz
lerna notice package size: XXXB
lerna notice unpacked size: XXXB
lerna notice shasum: {FULL_COMMIT_SHA}
lerna notice integrity: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
lerna notice total files: 3
lerna notice
lerna success published test-workspace-alias-caret XX.XX.XX
lerna notice
lerna notice 📦 test-workspace-alias-caret@XX.XX.XX
Expand Down Expand Up @@ -212,13 +232,14 @@ describe("lerna-publish-workspace-prefix", () => {
lerna notice
Successfully published:
- test-main@XX.XX.XX
- test-no-workspace-prefix@XX.XX.XX
- test-workspace-alias-caret@XX.XX.XX
- test-workspace-alias-star@XX.XX.XX
- test-workspace-alias-tilde@XX.XX.XX
- test-workspace-approx@XX.XX.XX
- test-workspace-compat@XX.XX.XX
- test-workspace-exact@XX.XX.XX
lerna success published 7 packages
lerna success published 8 packages

`);

Expand All @@ -242,6 +263,8 @@ describe("lerna-publish-workspace-prefix", () => {
await unpublish("test-workspace-exact");
await unpublish("test-workspace-compat");
await unpublish("test-workspace-approx");
await unpublish("test-no-workspace-prefix");
await unpublish("test-main");
});
});
});