create action for GRM (2)

This commit is contained in:
Artur Stolear
2020-02-08 10:40:14 +02:00
parent b677d43869
commit 632a7fdad0
17 changed files with 832 additions and 30 deletions

View File

@@ -1,14 +1,19 @@
import { TYPES, IBuildAgent } from "../../core/common";
import path = require("path");
import { TYPES, IBuildAgent, IExecResult } from "../../core/common";
import { injectable, inject } from "inversify";
import { IDotnetTool } from "../../core/dotnet-tool";
import { GitReleaseManagerCreateSettings, GitReleaseManagerSettings, CreateFields, CommonFields } from "./models";
export interface IGitReleaseManagerTool {
install(versionSpec: string, includePrerelease: boolean): Promise<void>;
create(settings: GitReleaseManagerCreateSettings): Promise<IExecResult>;
}
@injectable()
export class GitReleaseManagerTool implements IGitReleaseManagerTool {
private buildAgent: IBuildAgent;
private dotnetTool: IDotnetTool;
constructor(
@@ -21,4 +26,44 @@ export class GitReleaseManagerTool implements IGitReleaseManagerTool {
public async install(versionSpec: string, includePrerelease: boolean): Promise<void> {
await this.dotnetTool.toolInstall("GitReleaseManager.Tool", versionSpec, false, includePrerelease);
}
public create(settings: GitReleaseManagerCreateSettings): Promise<IExecResult> {
const args = this.getCreateArguments(settings);
console.log(args);
return Promise.resolve(null);
// return this.buildAgent.exec("dotnet-gitreleasemanager", args);
}
getCommonArguments(settings: GitReleaseManagerSettings): string[] {
const args: string[] = [];
args.push("--owner", settings.owner);
args.push("--repository", settings.repository);
args.push("--token", settings.token);
return args;
}
getCreateArguments(settings: GitReleaseManagerCreateSettings): string[] {
const args: string[] = [...this.getCommonArguments(settings)];
args.push("--milestone", settings.milestone);
args.push("--name", settings.releaseName);
args.push("--targetcommitish", settings.commit);
args.push("--targetDirectory", settings.targetDirectory);
if (this.buildAgent.fileExists(settings.inputFileName)) {
args.push("--inputFilePath", settings.inputFileName);
} else {
throw new Error("GitReleaseManager inputFilePath not found at " + settings.inputFileName);
}
if (settings.isPreRelease) {
args.push("--pre");
}
return args;
}
}

View File

@@ -0,0 +1,31 @@
export enum CommonFields {
repository = "repository",
owner = "owner",
token = "token",
}
export enum CreateFields {
milestone = "milestone",
releaseName = "releaseName",
inputFileName = "inputFileName",
isPreRelease = "isPreRelease",
commit = "commit",
targetDirectory = "targetDirectory",
assets = "assets",
}
export interface GitReleaseManagerSettings {
[CommonFields.repository]: string;
[CommonFields.owner]: string;
[CommonFields.token]: string;
}
export interface GitReleaseManagerCreateSettings extends GitReleaseManagerSettings {
[CreateFields.milestone]: string;
[CreateFields.releaseName]: string;
[CreateFields.inputFileName]: string;
[CreateFields.isPreRelease]: boolean;
[CreateFields.commit]: string;
[CreateFields.targetDirectory]: string;
[CreateFields.assets]?: string[];
}

View File

@@ -0,0 +1,36 @@
import { IBuildAgent } from "../../core/common";
import { GitReleaseManagerSettings, CommonFields, CreateFields } from "./models";
export class Settings {
public static getCreateSettings(buildAgent: IBuildAgent) {
const milestone = buildAgent.getInput(CreateFields.milestone);
const releaseName = buildAgent.getInput(CreateFields.releaseName);
const inputFileName = buildAgent.getInput(CreateFields.inputFileName);
const isPreRelease = buildAgent.getBooleanInput(CreateFields.isPreRelease);
const commit = buildAgent.getInput(CreateFields.commit);
const targetDirectory = buildAgent.getInput(CreateFields.targetDirectory);
const commonSettings = Settings.getCommonSettings(buildAgent);
return {
...commonSettings,
milestone,
releaseName,
inputFileName,
isPreRelease,
commit,
targetDirectory
}
}
private static getCommonSettings(buildAgent: IBuildAgent): GitReleaseManagerSettings {
const owner = buildAgent.getInput(CommonFields.owner, true);
const repository = buildAgent.getInput(CommonFields.repository, true);
const token = buildAgent.getInput(CommonFields.token, true);
return {
owner,
repository,
token
};
}
}