From 52444a01b5600ca225077aafc0638f462d46d4a6 Mon Sep 17 00:00:00 2001 From: 1aron Date: Tue, 15 Aug 2023 23:59:43 +0800 Subject: [PATCH] Fix(Semantic Release): No inclusion of NPM packages based on publishConfig --- packages/semantic-release-config/configure.js | 14 +++++++++++-- packages/semantic-release-config/package.json | 2 ++ .../tests/publish/package.json | 6 ++++++ .../tests/publish/public/package.json | 6 ++++++ .../tests/publish/restricted/package.json | 6 ++++++ .../tests/publish/test.ts | 10 ++++++++++ pnpm-lock.yaml | 20 ++++++++++++------- 7 files changed, 55 insertions(+), 9 deletions(-) create mode 100644 packages/semantic-release-config/tests/publish/package.json create mode 100644 packages/semantic-release-config/tests/publish/public/package.json create mode 100644 packages/semantic-release-config/tests/publish/restricted/package.json create mode 100644 packages/semantic-release-config/tests/publish/test.ts diff --git a/packages/semantic-release-config/configure.js b/packages/semantic-release-config/configure.js index 8b289f5..cf2b4c1 100644 --- a/packages/semantic-release-config/configure.js +++ b/packages/semantic-release-config/configure.js @@ -1,6 +1,9 @@ +const path = require('path') const releaseRules = require('./rules') const extend = require('@techor/extend').default const { explorePackageManager, readPNPMWorkspaces, readWorkspaces, queryWorkspaces } = require('@techor/npm') +const { readJSONFileSync } = require('@techor/fs') +const log = require('@techor/log').default const defaultConfig = { branches: [ @@ -53,8 +56,15 @@ module.exports = (config) => { } if (workspaces?.length) { const resolvedWorkspaces = queryWorkspaces(workspaces) - console.log('Workspaces found:', resolvedWorkspaces) - newConfig.plugins.push(...resolvedWorkspaces.map((eachWorkspace) => ['@semantic-release/npm', { pkgRoot: eachWorkspace }])) + for (const eachWorkspace of resolvedWorkspaces) { + const eachWorkspacePackage = readJSONFileSync(path.join(eachWorkspace, 'package.json')) + if (eachWorkspacePackage?.publishConfig?.access === 'public') { + log.add`Add npm release for **${eachWorkspace}**` + newConfig.plugins.push(['@semantic-release/npm', { pkgRoot: eachWorkspace }]) + } else { + log.i`Skip npm release for **${eachWorkspace}**` + } + } } return newConfig } \ No newline at end of file diff --git a/packages/semantic-release-config/package.json b/packages/semantic-release-config/package.json index cfeef58..c618ca7 100644 --- a/packages/semantic-release-config/package.json +++ b/packages/semantic-release-config/package.json @@ -42,6 +42,8 @@ "dependencies": { "@techor/extend": "workspace:^", "@techor/npm": "workspace:^", + "@techor/fs": "workspace:^", + "@techor/log": "workspace:^", "conventional-changelog-techor": "workspace:^", "techor-conventional-commits": "workspace:^" } diff --git a/packages/semantic-release-config/tests/publish/package.json b/packages/semantic-release-config/tests/publish/package.json new file mode 100644 index 0000000..22c0f99 --- /dev/null +++ b/packages/semantic-release-config/tests/publish/package.json @@ -0,0 +1,6 @@ +{ + "workspaces": [ + "public", + "restricted" + ] +} \ No newline at end of file diff --git a/packages/semantic-release-config/tests/publish/public/package.json b/packages/semantic-release-config/tests/publish/public/package.json new file mode 100644 index 0000000..d84929c --- /dev/null +++ b/packages/semantic-release-config/tests/publish/public/package.json @@ -0,0 +1,6 @@ +{ + "name": "@tests/semantic-release-config-public", + "publishConfig": { + "access": "public" + } +} \ No newline at end of file diff --git a/packages/semantic-release-config/tests/publish/restricted/package.json b/packages/semantic-release-config/tests/publish/restricted/package.json new file mode 100644 index 0000000..87f3af6 --- /dev/null +++ b/packages/semantic-release-config/tests/publish/restricted/package.json @@ -0,0 +1,6 @@ +{ + "name": "@tests/semantic-release-config-restricted", + "publishConfig": { + "access": "restricted" + } +} \ No newline at end of file diff --git a/packages/semantic-release-config/tests/publish/test.ts b/packages/semantic-release-config/tests/publish/test.ts new file mode 100644 index 0000000..7891096 --- /dev/null +++ b/packages/semantic-release-config/tests/publish/test.ts @@ -0,0 +1,10 @@ +import configure from '../../configure' + +it('only publishs the public packages', () => { + process.chdir(__dirname) + const config: any = configure() + expect(config.plugins.filter((eachPlugin) => eachPlugin[0] === '@semantic-release/npm')) + .toEqual([ + ["@semantic-release/npm", { "pkgRoot": "public" }] + ]) +}) \ No newline at end of file diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 3fd2a88..32e0c30 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -159,13 +159,13 @@ importers: version: 5.0.0 conventional-changelog-techor: specifier: '' - version: 2.5.8 + version: 2.5.9 conventional-commits-parser: specifier: ^3.2.4 version: 3.2.4 techor-conventional-commits: specifier: '' - version: 2.5.8 + version: 2.5.9 packages/glob: dependencies: @@ -330,6 +330,12 @@ importers: '@techor/extend': specifier: workspace:^ version: link:../extend + '@techor/fs': + specifier: workspace:^ + version: link:../fs + '@techor/log': + specifier: workspace:^ + version: link:../log '@techor/npm': specifier: workspace:^ version: link:../npm @@ -3086,12 +3092,12 @@ packages: through2: 4.0.2 dev: true - /conventional-changelog-techor@2.5.8: - resolution: {integrity: sha512-LwsoJj0Ghrz7sX8Seo398dovKqXjehaZbl35hJTvK+us5503Iy2uq+sFnYV1oruOUY5L1uffADlrQwyGD8PpMg==} + /conventional-changelog-techor@2.5.9: + resolution: {integrity: sha512-z2HIBVBhuMwEmnIlHLioj86gECzDMJcCdFtFWcUSYd89xNK8yYswHcjzfob1iZ/TS30U7+xH4iLIgyj0yLZJfw==} dependencies: compare-func: 2.0.0 dedent: 0.7.0 - techor-conventional-commits: 2.5.8 + techor-conventional-commits: 2.5.9 dev: false /conventional-changelog-writer@5.0.1: @@ -6704,8 +6710,8 @@ packages: streamx: 2.15.0 dev: true - /techor-conventional-commits@2.5.8: - resolution: {integrity: sha512-Tk3CiAqns5wbxhwM9ZEdC62HIXKQtSjXAymETg7f5HJBlixzYMjhDLzvVyWdsuBofD8jB3UE1gzyXqxIyWz6rQ==} + /techor-conventional-commits@2.5.9: + resolution: {integrity: sha512-0F5PO2Qke5/Xu3WcFhIQXPmUtkKPvdqLKvC/l4LZHlOIQTQiecJI8hxCukMzkvuAnCqLFF8fk0G4bRTWjj9E0g==} dev: false /temp-dir@3.0.0: