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

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -6,4 +6,41 @@ branding:
icon: git-pull-request
runs:
using: node12
main: ../../dist/github/gitreleasemanager/create/bundle.js
main: ../../dist/github/gitreleasemanager/create/bundle.js
inputs:
owner:
description: The owner of the repository
required: true
default: ''
repository:
description: The name of the repository
required: true
default: ''
token:
description: The access token to access GitHub with
required: true
default: ''
milestone:
description: The milestone to use
required: false
default: ''
name:
description: The name of the release
required: false
default: ''
inputFilePath:
description: The path to the file to be used as the content of the release notes
required: false
default: ''
pre:
description: Creates the release as a pre-release
required: false
default: ''
targetcommitish:
description: The commit to tag. Can be a branch or SHA. Defaults to repository's default branch
required: false
default: ''
targetDirectory:
description: The directory on which GitReleaseManager should be executed. Defaults to current directory
required: false
default: ''

View File

@@ -2,6 +2,7 @@ import { IBuildAgent, TYPES, SetupOptions } from "../../core/common";
import { IGitReleaseManagerTool, GitReleaseManagerTool } from "../../tools/gitreleasemanager/gitreleasemanager-tool";
import container from "../../core/ioc";
import { Settings } from "../../tools/gitreleasemanager/settings";
container.bind<IGitReleaseManagerTool>(TYPES.IGitReleaseManagerTool).to(GitReleaseManagerTool);
@@ -29,6 +30,10 @@ export async function create() {
buildAgent.exportVariable("DOTNET_CLI_TELEMETRY_OPTOUT", "1");
const settings = Settings.getCreateSettings(buildAgent);
await gitReleaseManagerTool.create(settings);
buildAgent.setSucceeded("GitVersionManager created release successfully", true);
} catch (error) {
buildAgent.setFailed(error.message, true);

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
};
}
}