1 | var _ = require('lodash');
|
2 | var async = require('async');
|
3 | var fs = require('fs-extra');
|
4 | var path = require('path');
|
5 |
|
6 | var util = require('any2api-util');
|
7 |
|
8 |
|
9 |
|
10 | var downloadDeps = function(metadata, dir, done) {
|
11 | if (_.isEmpty(metadata.dependencies)) return done();
|
12 |
|
13 | async.eachSeries(_.keys(metadata.dependencies), function(dep, callback) {
|
14 | var depDir = path.join(dir, dep);
|
15 |
|
16 | if (fs.existsSync(depDir)) return callback();
|
17 |
|
18 | var url = 'https://supermarket.getchef.com/cookbooks/' + dep + '/download';
|
19 |
|
20 | util.download({ dir: depDir, url: url }, function(err) {
|
21 | if (err) {
|
22 | fs.removeSync(depDir);
|
23 |
|
24 | return callback(err);
|
25 | }
|
26 |
|
27 | var metadataFile = path.join(depDir, 'metadata.json');
|
28 |
|
29 | if (fs.existsSync(metadataFile)) {
|
30 | var metadata = JSON.parse(fs.readFileSync(metadataFile));
|
31 |
|
32 | downloadDeps(metadata, dir, callback);
|
33 | }
|
34 | });
|
35 | }, done);
|
36 | };
|
37 |
|
38 |
|
39 |
|
40 | util.readInput(null, function(err, apiSpec, params) {
|
41 | if (err) throw err;
|
42 |
|
43 | var executable = apiSpec.executables[params._.executable_name];
|
44 | var execPath = path.resolve(apiSpec.apispec_path, '..', executable.path);
|
45 | var metadata = JSON.parse(fs.readFileSync(path.join(execPath, 'metadata.json')));
|
46 | var depsSubdir = 'cookbook_dependencies';
|
47 | var depsPath = path.join(execPath, depsSubdir);
|
48 |
|
49 | fs.mkdirsSync(depsPath);
|
50 |
|
51 | downloadDeps(metadata, depsPath, function(err) {
|
52 | if (err) throw err;
|
53 |
|
54 | executable.dependencies_subdir = depsSubdir;
|
55 |
|
56 | util.writeSpec({ apiSpec: apiSpec }, function(err) {
|
57 | if (err) throw err;
|
58 | });
|
59 | });
|
60 | });
|