forked from NativeScript/nativescript-cli
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathgradle-build-service.ts
72 lines (68 loc) · 1.9 KB
/
gradle-build-service.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
import { attachAwaitDetach } from "../../common/helpers";
import * as constants from "../../constants";
import { EventEmitter } from "events";
import {
IGradleBuildService,
IGradleBuildArgsService,
IGradleCommandService,
} from "../../definitions/gradle";
import { IAndroidBuildData } from "../../definitions/build";
import { IChildProcess } from "../../common/declarations";
import { injector } from "../../common/yok";
export class GradleBuildService
extends EventEmitter
implements IGradleBuildService {
constructor(
private $childProcess: IChildProcess,
private $gradleBuildArgsService: IGradleBuildArgsService,
private $gradleCommandService: IGradleCommandService
) {
super();
}
public async buildProject(
projectRoot: string,
buildData: IAndroidBuildData
): Promise<void> {
const buildTaskArgs = await this.$gradleBuildArgsService.getBuildTaskArgs(
buildData
);
const spawnOptions = {
emitOptions: { eventName: constants.BUILD_OUTPUT_EVENT_NAME },
throwError: true,
};
const gradleCommandOptions = {
cwd: projectRoot,
message: "Gradle build...",
stdio: buildData.buildOutputStdio,
gradlePath: buildData.gradlePath,
spawnOptions,
};
await attachAwaitDetach(
constants.BUILD_OUTPUT_EVENT_NAME,
this.$childProcess,
(data: any) => this.emit(constants.BUILD_OUTPUT_EVENT_NAME, data),
this.$gradleCommandService.executeCommand(
buildTaskArgs,
gradleCommandOptions
)
);
}
public async cleanProject(
projectRoot: string,
buildData: IAndroidBuildData
): Promise<void> {
const cleanTaskArgs = this.$gradleBuildArgsService.getCleanTaskArgs(
buildData
);
const gradleCommandOptions = {
cwd: projectRoot,
message: "Gradle clean...",
gradlePath: buildData.gradlePath,
};
await this.$gradleCommandService.executeCommand(
cleanTaskArgs,
gradleCommandOptions
);
}
}
injector.register("gradleBuildService", GradleBuildService);