UNPKG

2.81 kBJavaScriptView Raw
1'use strict';
2
3const MavenTaskFlow = require('./taskflows/java/maven/maven-task-flow');
4const NpmTaskFlow = require('./taskflows/nodejs/npm/npm-task-flow');
5const ComposerTaskFlow = require('./taskflows/php/composer/composer-task-flow');
6const PipTaskFlow = require('./taskflows/python/pip/pip-task-flow');
7const DotnetTaskFlow = require('./taskflows/dotnetcore/dotnet/dotnet-task-flow');
8const DefaultTaskFlow = require('./taskflows/default-task-flow');
9
10const _ = require('lodash');
11const log = require('./utils/log');
12const glob = require('glob');
13
14const runtimeTaskFlows = {
15 'java8': {
16 [MavenTaskFlow.getManifestName()]: MavenTaskFlow
17 },
18 'nodejs8': {
19 [NpmTaskFlow.getManifestName()]: NpmTaskFlow
20 },
21 'nodejs6': {
22 [NpmTaskFlow.getManifestName()]: NpmTaskFlow
23 },
24 'nodejs10': {
25 [NpmTaskFlow.getManifestName()]: NpmTaskFlow
26 },
27 'nodejs12': {
28 [NpmTaskFlow.getManifestName()]: NpmTaskFlow
29 },
30 'python2.7': {
31 [PipTaskFlow.getManifestName()]: PipTaskFlow
32 },
33 'python3': {
34 [PipTaskFlow.getManifestName()]: PipTaskFlow
35 },
36 'php7.2': {
37 [ComposerTaskFlow.getManifestName()]: ComposerTaskFlow
38 },
39 'custom': {
40 [NpmTaskFlow.getManifestName()]: NpmTaskFlow,
41 [PipTaskFlow.getManifestName()]: PipTaskFlow
42 },
43 'dotnetcore2.1': {
44 [DotnetTaskFlow.getManifestName()]: DotnetTaskFlow
45 }
46};
47
48class Builder {
49 constructor(serviceName, functionName, sourceDir, runtime, artifactDir, verbose, stages = ['install', 'build']) {
50 this.serviceName = serviceName;
51 this.functionName = functionName;
52 this.sourceDir = sourceDir;
53 this.runtime = runtime;
54 this.artifactDir = artifactDir;
55 this.verbose = verbose;
56 this.stages = stages;
57
58 if (this.verbose) {
59 log.level = 'debug';
60 }
61 }
62
63 async build() {
64 log.debug('builder begin to build, runtime is: %s, sourceDir: ', this.runtime, this.sourceDir);
65
66 const taskFlows = await Builder.detectTaskFlow(this.runtime, this.sourceDir);
67
68 if (!taskFlows) {
69 throw new Error('could not find TaskFlow for ' + this.runtime);
70 }
71
72 for (let TaskFlow of taskFlows) {
73 const taskFlow = new TaskFlow(this.serviceName, this.functionName, this.sourceDir, this.artifactDir, this.stages, this.runtime);
74
75 await taskFlow.start();
76 }
77 }
78
79 static async detectTaskFlow(runtime, sourceDir) {
80 const detectTaskFlows = [];
81
82 const taskFlows = runtimeTaskFlows[runtime];
83
84 const TaskFlow = _.find(taskFlows, (taskFlow, manifest) => {
85 const res = glob.sync(manifest, {
86 cwd: sourceDir
87 });
88
89 if (res && res.length) { return true; }
90 });
91
92 if (TaskFlow) {
93 detectTaskFlows.push(TaskFlow);
94 } else {
95 detectTaskFlows.push(DefaultTaskFlow);
96 }
97
98 return detectTaskFlows;
99 }
100}
101
102module.exports = Builder;