fix: correctly resolve plugins installed globally with npx
				
					
				
			This bug affects only plugins defined with the `plugins` option and wrapped in an Array to add a configuration
This commit is contained in:
		
							parent
							
								
									2b082acc73
								
							
						
					
					
						commit
						eafbb343dd
					
				| @ -6,6 +6,7 @@ const debug = require('debug')('semantic-release:config'); | |||||||
| const {repoUrl} = require('./git'); | const {repoUrl} = require('./git'); | ||||||
| const PLUGINS_DEFINITIONS = require('./definitions/plugins'); | const PLUGINS_DEFINITIONS = require('./definitions/plugins'); | ||||||
| const plugins = require('./plugins'); | const plugins = require('./plugins'); | ||||||
|  | const {validatePlugin, parseConfig} = require('./plugins/utils'); | ||||||
| 
 | 
 | ||||||
| const CONFIG_NAME = 'release'; | const CONFIG_NAME = 'release'; | ||||||
| const CONFIG_FILES = [ | const CONFIG_FILES = [ | ||||||
| @ -37,17 +38,21 @@ module.exports = async (context, opts) => { | |||||||
| 
 | 
 | ||||||
|         // For each plugin defined in a shareable config, save in `pluginsPath` the extendable config path,
 |         // For each plugin defined in a shareable config, save in `pluginsPath` the extendable config path,
 | ||||||
|         // so those plugin will be loaded relatively to the config file
 |         // so those plugin will be loaded relatively to the config file
 | ||||||
|         Object.entries(extendsOpts).reduce((pluginsPath, [option, value]) => { |         Object.entries(extendsOpts) | ||||||
|           if (PLUGINS_DEFINITIONS[option] || option === 'plugins') { |           .filter(([, value]) => Boolean(value)) | ||||||
|             castArray(value) |           .reduce((pluginsPath, [option, value]) => { | ||||||
|               .filter(plugin => isString(plugin) || (isPlainObject(plugin) && isString(plugin.path))) |             castArray(value).forEach(plugin => { | ||||||
|               .map(plugin => (isString(plugin) ? plugin : plugin.path)) |               if (option === 'plugins' && validatePlugin(plugin)) { | ||||||
|               .forEach(plugin => { |                 pluginsPath[parseConfig(plugin)[0]] = extendPath; | ||||||
|                 pluginsPath[plugin] = extendPath; |               } else if ( | ||||||
|               }); |                 PLUGINS_DEFINITIONS[option] && | ||||||
|           } |                 (isString(plugin) || (isPlainObject(plugin) && isString(plugin.path))) | ||||||
|           return pluginsPath; |               ) { | ||||||
|         }, pluginsPath); |                 pluginsPath[isString(plugin) ? plugin : plugin.path] = extendPath; | ||||||
|  |               } | ||||||
|  |             }); | ||||||
|  |             return pluginsPath; | ||||||
|  |           }, pluginsPath); | ||||||
| 
 | 
 | ||||||
|         return {...result, ...extendsOpts}; |         return {...result, ...extendsOpts}; | ||||||
|       }, {}), |       }, {}), | ||||||
|  | |||||||
| @ -212,7 +212,7 @@ test('Read configuration from file path in "extends"', async t => { | |||||||
|     branch: 'test_branch', |     branch: 'test_branch', | ||||||
|     repositoryUrl: 'https://host.null/owner/module.git', |     repositoryUrl: 'https://host.null/owner/module.git', | ||||||
|     tagFormat: `v\${version}`, |     tagFormat: `v\${version}`, | ||||||
|     plugins: false, |     plugins: ['plugin-1', ['plugin-2', {plugin2Opt: 'value'}]], | ||||||
|   }; |   }; | ||||||
|   // Create package.json and shareable.json in repository root
 |   // Create package.json and shareable.json in repository root
 | ||||||
|   await outputJson(path.resolve(cwd, 'package.json'), {release: pkgOptions}); |   await outputJson(path.resolve(cwd, 'package.json'), {release: pkgOptions}); | ||||||
| @ -227,6 +227,8 @@ test('Read configuration from file path in "extends"', async t => { | |||||||
|   t.deepEqual(t.context.plugins.args[0][1], { |   t.deepEqual(t.context.plugins.args[0][1], { | ||||||
|     analyzeCommits: './shareable.json', |     analyzeCommits: './shareable.json', | ||||||
|     generateNotes: './shareable.json', |     generateNotes: './shareable.json', | ||||||
|  |     'plugin-1': './shareable.json', | ||||||
|  |     'plugin-2': './shareable.json', | ||||||
|   }); |   }); | ||||||
| }); | }); | ||||||
| 
 | 
 | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user