Repository: semantic-release/semantic-release (js)

Issue:
Possible error in plugin loading logic, says Succeed and Fail for @semantic-release/github
## Current behavior

See logs for Travis CI.  It loads the plugin and then says "Succeed" _and_ "Fail" which shouldn't both be possible.

![image](https://user-images.githubusercontent.com/2856501/40947058-9a61057e-6815-11e8-9619-98980b18e9b1.png)

## Expected behavior

Should just print "Succeed" message.

## Environment

- **semantic-release** version: Latest? Used `npx semantic-release`
- CI environment: TravisCI
- Plugins used: None, defaults?
- **semantic-release** configuration: 
- CI logs: https://travis-ci.org/Microsoft/ConversationLearner-SDK/builds/388041180


Pull request:
fix(plugin-load): clarify load message
added quotes around plugin name to set it apart from the message. without the quotes, some consumers
were missunderstanding the successful loading of the `fail` plugin as a load failure and assuming
something was broken

resolves #811

Patch:
diff --git a/lib/plugins/normalize.js b/lib/plugins/normalize.js
index 42c5522..d2fa173 100644
--- a/lib/plugins/normalize.js
+++ b/lib/plugins/normalize.js
@@ -15,9 +15,9 @@ module.exports = (pluginType, pluginsPath, globalOpts, pluginOpts, logger) => {
 
   if (!isFunction(pluginOpts)) {
     if (pluginsPath[path]) {
-      logger.log('Load plugin %s from %s in shareable config %s', pluginType, path, pluginsPath[path]);
+      logger.log('Load plugin "%s" from %s in shareable config %s', pluginType, path, pluginsPath[path]);
     } else {
-      logger.log('Load plugin %s from %s', pluginType, path);
+      logger.log('Load plugin "%s" from %s', pluginType, path);
     }
   }
 


Test patch:
diff --git a/test/plugins/normalize.test.js b/test/plugins/normalize.test.js
index 6fbbaa5..4b26c00 100644
--- a/test/plugins/normalize.test.js
+++ b/test/plugins/normalize.test.js
@@ -14,7 +14,7 @@ test('Normalize and load plugin from string', t => {
 
   t.is(plugin.pluginName, './test/fixtures/plugin-noop');
   t.is(typeof plugin, 'function');
-  t.deepEqual(t.context.log.args[0], ['Load plugin %s from %s', 'verifyConditions', './test/fixtures/plugin-noop']);
+  t.deepEqual(t.context.log.args[0], ['Load plugin "%s" from %s', 'verifyConditions', './test/fixtures/plugin-noop']);
 });
 
 test('Normalize and load plugin from object', t => {
@@ -22,7 +22,7 @@ test('Normalize and load plugin from object', t => {
 
   t.is(plugin.pluginName, './test/fixtures/plugin-noop');
   t.is(typeof plugin, 'function');
-  t.deepEqual(t.context.log.args[0], ['Load plugin %s from %s', 'publish', './test/fixtures/plugin-noop']);
+  t.deepEqual(t.context.log.args[0], ['Load plugin "%s" from %s', 'publish', './test/fixtures/plugin-noop']);
 });
 
 test('Normalize and load plugin from a base file path', t => {
@@ -37,7 +37,7 @@ test('Normalize and load plugin from a base file path', t => {
   t.is(plugin.pluginName, './plugin-noop');
   t.is(typeof plugin, 'function');
   t.deepEqual(t.context.log.args[0], [
-    'Load plugin %s from %s in shareable config %s',
+    'Load plugin "%s" from %s in shareable config %s',
     'verifyConditions',
     './plugin-noop',
     './test/fixtures',
@@ -85,7 +85,7 @@ test('Normalize and load plugin that retuns multiple functions', t => {
   const plugin = normalize('verifyConditions', {}, {}, './test/fixtures/multi-plugin', t.context.logger);
 
   t.is(typeof plugin, 'function');
-  t.deepEqual(t.context.log.args[0], ['Load plugin %s from %s', 'verifyConditions', './test/fixtures/multi-plugin']);
+  t.deepEqual(t.context.log.args[0], ['Load plugin "%s" from %s', 'verifyConditions', './test/fixtures/multi-plugin']);
 });
 
 test('Wrap "analyzeCommits" plugin in a function that validate the output of the plugin', async t => {