Files
actions/src/github/build-agent.ts
2019-11-22 14:54:31 +02:00

115 lines
3.2 KiB
TypeScript

import * as path from "path";
import * as uuidV4 from "uuid/v4";
import * as core from "@actions/core";
import * as exe from "@actions/exec";
import * as io from "@actions/io";
import * as toolCache from "@actions/tool-cache";
import { injectable } from "inversify";
import { IBuildAgent, IExecResult } from "../interface";
@injectable()
class BuildAgent implements IBuildAgent {
public find(toolName: string, versionSpec: string, arch?: string): string {
return toolCache.find(toolName, versionSpec, arch);
}
public cacheDir(sourceDir: string, tool: string, version: string, arch?: string): Promise<string> {
return toolCache.cacheDir(sourceDir, tool, version, arch);
}
public async createTempDir(): Promise<string> {
const IS_WINDOWS = process.platform === "win32";
let tempDirectory: string = process.env.RUNNER_TEMP || "";
if (!tempDirectory) {
let baseLocation: string;
if (IS_WINDOWS) {
// On Windows use the USERPROFILE env variable
baseLocation = process.env.USERPROFILE || "C:\\";
} else {
if (process.platform === "darwin") {
baseLocation = "/Users";
} else {
baseLocation = "/home";
}
}
tempDirectory = path.join(baseLocation, "actions", "temp");
}
const dest = path.join(tempDirectory, uuidV4());
await io.mkdirP(dest);
return dest;
}
public debug(message: string): void {
core.debug(message);
}
public setFailed(message: string, done?: boolean): void {
core.setFailed(message);
}
public setSucceeded(message: string, done?: boolean): void {
//
}
public exportVariable(name: string, val: string): void {
core.exportVariable(name, val);
}
public getVariable(name: string): string {
return process.env[name];
}
public addPath(inputPath: string): void {
core.addPath(inputPath);
}
public which(tool: string, check?: boolean): Promise<string> {
return io.which(tool, check);
}
public async exec(exec: string, args: string[]): Promise<IExecResult> {
const dotnetPath = await io.which(exec, true);
let resultCode = 0;
let stdout = "";
let stderr = "";
resultCode = await exe.exec(
`"${dotnetPath}"`,
args,
{
listeners: {
stderr: (data: Buffer) => {
stderr += data.toString();
},
stdout: (data: Buffer) => {
stdout += data.toString();
},
},
});
return {
code: resultCode,
error: null,
stderr,
stdout,
};
}
public getInput(input: string, required?: boolean): string {
return core.getInput(input, { required } as core.InputOptions);
}
public getBooleanInput(input: string, required?: boolean): boolean {
const inputValue = this.getInput(input, required);
return (inputValue || "false").toLowerCase() === "true";
}
}
export {
BuildAgent,
};