Skip to content

Commit

Permalink
fix(publish): support inconsistent workspace prefix usage (#3413)
Browse files Browse the repository at this point in the history
  • Loading branch information
fahslaj committed Nov 7, 2022
1 parent 0161bbe commit da2274b
Show file tree
Hide file tree
Showing 2 changed files with 41 additions and 15 deletions.
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");
});
});
});

0 comments on commit da2274b

Please sign in to comment.