1 | /**
|
2 | * peer dependencies can define js-builder "plugins" by defining
|
3 | * a @jenkins-cd/js-builder.js file.
|
4 | */
|
5 |
|
6 | var paths = require('./paths');
|
7 | var path = require('path');
|
8 | var cwd = process.cwd();
|
9 | var fs = require('fs');
|
10 | var dependencies = require('./dependecies');
|
11 | var logger = require('./logger');
|
12 |
|
13 | exports.install = function(builder) {
|
14 | // Iterate over all of the installed node_modules. If a given dependency
|
15 | // is listed as a dependency of "this" package, then lets see if it has
|
16 | // a @jenkins-cd/js-builder.js file.
|
17 |
|
18 | paths.walkDirs(cwd + '/node_modules', function(dir) {
|
19 | var packageJsonFile = path.resolve(dir, 'package.json');
|
20 | if (fs.existsSync(packageJsonFile)) {
|
21 | try {
|
22 | var packageJson = require(packageJsonFile);
|
23 | if (dependencies.getDependency(packageJson.name)) {
|
24 | var pluginFile = path.resolve(dir, '@jenkins-cd/js-builder.js');
|
25 | if (fs.existsSync(pluginFile)) {
|
26 | logger.logInfo('Running Jenkins js-builder plugin: ' + packageJson.name);
|
27 | var plugin = require(pluginFile);
|
28 | // The plugin impl can execute it's init code at the
|
29 | // top level, or within an install function. Having an
|
30 | // install function can simplify test implementation
|
31 | // for the plugin by giving it some control over its
|
32 | // lifecycle.
|
33 | if (typeof plugin.install === 'function') {
|
34 | plugin.install(builder);
|
35 | }
|
36 | }
|
37 | }
|
38 | } finally {
|
39 | return false; // Don't recurse down inside the top level NPM packages.
|
40 | }
|
41 | }
|
42 | });
|
43 | }; |
\ | No newline at end of file |