1 | 'use strict';
|
2 |
|
3 | const MavenTaskFlow = require('./taskflows/java/maven/maven-task-flow');
|
4 | const NpmTaskFlow = require('./taskflows/nodejs/npm/npm-task-flow');
|
5 | const ComposerTaskFlow = require('./taskflows/php/composer/composer-task-flow');
|
6 | const PipTaskFlow = require('./taskflows/python/pip/pip-task-flow');
|
7 | const DotnetTaskFlow = require('./taskflows/dotnetcore/dotnet/dotnet-task-flow');
|
8 | const DefaultTaskFlow = require('./taskflows/default-task-flow');
|
9 |
|
10 | const _ = require('lodash');
|
11 | const log = require('./utils/log');
|
12 | const glob = require('glob');
|
13 |
|
14 | const 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 |
|
48 | class 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 |
|
102 | module.exports = Builder;
|