1 | var fs = require('fs');
|
2 | var path = require('path');
|
3 | var child = require('child_process');
|
4 | var _ = require('lodash');
|
5 | var exists = require('is-there');
|
6 | var state = require('../lib/state');
|
7 | var docker = require('../lib/docker');
|
8 | var platforms = require('../platforms');
|
9 |
|
10 | module.exports = function(topic) {
|
11 | return {
|
12 | topic: topic,
|
13 | command: 'create',
|
14 | description: 'creates a local development environment',
|
15 | help: `help text for ${topic}:create`,
|
16 | flags: [
|
17 | { name: 'template', description: 'create a Dockerfile based on a language template', hasValue: true }
|
18 | ],
|
19 | run: function(context) {
|
20 | createDockerfile(context.cwd, context.args.template);
|
21 | createImage(context.cwd);
|
22 | }
|
23 | };
|
24 | };
|
25 |
|
26 | function createDockerfile(dir, lang) {
|
27 | var dockerfile = path.join(dir, 'Dockerfile');
|
28 | var platform = lang ? platforms.find(lang) : platforms.detect(dir);
|
29 | if (!platform) return;
|
30 |
|
31 | var contents = platform.getDockerfile(dir);
|
32 | if (contents) {
|
33 | fs.writeFileSync(dockerfile, contents);
|
34 | console.log(`Wrote Dockerfile for ${platform.name} apps`);
|
35 | }
|
36 | }
|
37 |
|
38 | function createImage(dir) {
|
39 | var dockerfile = path.join(dir, 'Dockerfile');
|
40 | if (!exists.sync(dockerfile)) {
|
41 | console.error('Error: No Dockerfile found');
|
42 | process.exit();
|
43 | }
|
44 | var imageId = docker.buildImage(dir, dockerfile);
|
45 | state.set(dir, { runImageId: imageId });
|
46 | }
|