diff --git a/lib/getWorkspacesYarn.js b/lib/getWorkspacesYarn.js index 1579e378..2990d872 100644 --- a/lib/getWorkspacesYarn.js +++ b/lib/getWorkspacesYarn.js @@ -12,13 +12,19 @@ function getWorkspacesYarn(cwd) { // Load package.json const manifest = getManifest(`${cwd}/package.json`); - // Only continue if manifest.workspaces is an array of strings. - if (!checker("string[]+")(manifest.workspaces)) - throw new TypeError("package.json: workspaces: Must be non-empty array of string"); + let packages = manifest.workspaces; + if (packages && packages.packages) { + packages = packages.packages; + } + + // Only continue if manifest.workspaces or manifest.workspaces.packages is an array of strings. + if (!checker("string[]+")(packages)) { + throw new TypeError("package.json: workspaces or workspaces.packages: Must be non-empty array of string"); + } // Turn workspaces into list of package.json files. const workspaces = glob.sync( - manifest.workspaces.map((p) => p.replace(/\/?$/, "/package.json")), + packages.map((p) => p.replace(/\/?$/, "/package.json")), { cwd: cwd, realpath: true, diff --git a/test/fixtures/yarnWorkspacesPackages/package.json b/test/fixtures/yarnWorkspacesPackages/package.json new file mode 100644 index 00000000..6c393aca --- /dev/null +++ b/test/fixtures/yarnWorkspacesPackages/package.json @@ -0,0 +1,20 @@ +{ + "name": "msr-test-yarn", + "author": "Dave Houlbrooke =8.3" + }, + "workspaces": { + "packages": ["packages/*"] + }, + "release": { + "plugins": [ + "@semantic-release/commit-analyzer", + "@semantic-release/release-notes-generator" + ], + "noCi": true + } +} \ No newline at end of file diff --git a/test/fixtures/yarnWorkspacesPackages/packages/a/package.json b/test/fixtures/yarnWorkspacesPackages/packages/a/package.json new file mode 100644 index 00000000..92d8046e --- /dev/null +++ b/test/fixtures/yarnWorkspacesPackages/packages/a/package.json @@ -0,0 +1,8 @@ +{ + "name": "msr-test-a", + "version": "0.0.0", + "peerDependencies": { + "msr-test-c": "*", + "left-pad": "latest" + } +} \ No newline at end of file diff --git a/test/fixtures/yarnWorkspacesPackages/packages/b/package.json b/test/fixtures/yarnWorkspacesPackages/packages/b/package.json new file mode 100644 index 00000000..1812781a --- /dev/null +++ b/test/fixtures/yarnWorkspacesPackages/packages/b/package.json @@ -0,0 +1,11 @@ +{ + "name": "msr-test-b", + "version": "0.0.0", + "dependencies": { + "msr-test-a": "*" + }, + "devDependencies": { + "msr-test-c": "*", + "left-pad": "latest" + } +} \ No newline at end of file diff --git a/test/fixtures/yarnWorkspacesPackages/packages/c/.releaserc.json b/test/fixtures/yarnWorkspacesPackages/packages/c/.releaserc.json new file mode 100644 index 00000000..64f41b15 --- /dev/null +++ b/test/fixtures/yarnWorkspacesPackages/packages/c/.releaserc.json @@ -0,0 +1,3 @@ +{ + "tagFormat": "multi-semantic-release-test-c@v${version}" +} \ No newline at end of file diff --git a/test/fixtures/yarnWorkspacesPackages/packages/c/package.json b/test/fixtures/yarnWorkspacesPackages/packages/c/package.json new file mode 100644 index 00000000..0bdb1273 --- /dev/null +++ b/test/fixtures/yarnWorkspacesPackages/packages/c/package.json @@ -0,0 +1,8 @@ +{ + "name": "msr-test-c", + "version": "0.0.0", + "devDependencies": { + "msr-test-b": "*", + "msr-test-d": "*" + } +} \ No newline at end of file diff --git a/test/fixtures/yarnWorkspacesPackages/packages/d/package.json b/test/fixtures/yarnWorkspacesPackages/packages/d/package.json new file mode 100644 index 00000000..fa64f232 --- /dev/null +++ b/test/fixtures/yarnWorkspacesPackages/packages/d/package.json @@ -0,0 +1,4 @@ +{ + "name": "msr-test-d", + "version": "0.0.0" +} \ No newline at end of file diff --git a/test/lib/getWorkspacesYarn.test.js b/test/lib/getWorkspacesYarn.test.js index 6c0ca596..954ccda3 100644 --- a/test/lib/getWorkspacesYarn.test.js +++ b/test/lib/getWorkspacesYarn.test.js @@ -27,4 +27,13 @@ describe("getWorkspacesYarn()", () => { expect(() => getWorkspacesYarn(resolved)).toThrow(Error); expect(() => getWorkspacesYarn(resolved)).toThrow("contain one or more workspaces"); }); + test("Works correctly with workspaces.packages", () => { + const resolved = resolve(`${__dirname}/../fixtures/yarnWorkspacesPackages`); + expect(getWorkspacesYarn(resolved)).toEqual([ + `${resolved}/packages/a/package.json`, + `${resolved}/packages/b/package.json`, + `${resolved}/packages/c/package.json`, + `${resolved}/packages/d/package.json`, + ]); + }); }); diff --git a/yarn.lock b/yarn.lock index dd883925..e3483aa0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2059,7 +2059,7 @@ debug@^3.1.0: dependencies: ms "^2.1.1" -debuglog@*, debuglog@^1.0.1: +debuglog@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492" integrity sha1-qiT/uaw9+aI1GDfPstJ5NgzXhJI= @@ -3338,7 +3338,7 @@ import-local@^3.0.2: pkg-dir "^4.2.0" resolve-cwd "^3.0.0" -imurmurhash@*, imurmurhash@^0.1.4: +imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= @@ -4519,11 +4519,6 @@ lockfile@^1.0.4: dependencies: signal-exit "^3.0.2" -lodash._baseindexof@*: - version "3.1.0" - resolved "https://registry.yarnpkg.com/lodash._baseindexof/-/lodash._baseindexof-3.1.0.tgz#fe52b53a1c6761e42618d654e4a25789ed61822c" - integrity sha1-/lK1OhxnYeQmGNZU5KJXie1hgiw= - lodash._baseuniq@~4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/lodash._baseuniq/-/lodash._baseuniq-4.6.0.tgz#0ebb44e456814af7905c6212fa2c9b2d51b841e8" @@ -4532,33 +4527,11 @@ lodash._baseuniq@~4.6.0: lodash._createset "~4.0.0" lodash._root "~3.0.0" -lodash._bindcallback@*: - version "3.0.1" - resolved "https://registry.yarnpkg.com/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz#e531c27644cf8b57a99e17ed95b35c748789392e" - integrity sha1-5THCdkTPi1epnhftlbNcdIeJOS4= - -lodash._cacheindexof@*: - version "3.0.2" - resolved "https://registry.yarnpkg.com/lodash._cacheindexof/-/lodash._cacheindexof-3.0.2.tgz#3dc69ac82498d2ee5e3ce56091bafd2adc7bde92" - integrity sha1-PcaayCSY0u5ePOVgkbr9Ktx73pI= - -lodash._createcache@*: - version "3.1.2" - resolved "https://registry.yarnpkg.com/lodash._createcache/-/lodash._createcache-3.1.2.tgz#56d6a064017625e79ebca6b8018e17440bdcf093" - integrity sha1-VtagZAF2JeeevKa4AY4XRAvc8JM= - dependencies: - lodash._getnative "^3.0.0" - lodash._createset@~4.0.0: version "4.0.3" resolved "https://registry.yarnpkg.com/lodash._createset/-/lodash._createset-4.0.3.tgz#0f4659fbb09d75194fa9e2b88a6644d363c9fe26" integrity sha1-D0ZZ+7CddRlPqeK4imZE02PJ/iY= -lodash._getnative@*, lodash._getnative@^3.0.0: - version "3.9.1" - resolved "https://registry.yarnpkg.com/lodash._getnative/-/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5" - integrity sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U= - lodash._reinterpolate@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d" @@ -4599,11 +4572,6 @@ lodash.isstring@^4.0.1: resolved "https://registry.yarnpkg.com/lodash.isstring/-/lodash.isstring-4.0.1.tgz#d527dfb5456eca7cc9bb95d5daeaf88ba54a5451" integrity sha1-1SfftUVuynzJu5XV2ur4i6VKVFE= -lodash.restparam@*: - version "3.6.1" - resolved "https://registry.yarnpkg.com/lodash.restparam/-/lodash.restparam-3.6.1.tgz#936a4e309ef330a7645ed4145986c85ae5b20805" - integrity sha1-k2pOMJ7zMKdkXtQUWYbIWuWyCAU= - lodash.sortby@^4.7.0: version "4.7.0" resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438"