added prettier tool

This commit is contained in:
Artur Stolear
2020-03-10 11:42:51 +02:00
parent 5c4fb6ec6b
commit 2690f37786
32 changed files with 930 additions and 902 deletions

View File

@@ -1,73 +1,79 @@
export enum CommonFields {
repository = "repository",
owner = "owner",
token = "token",
targetDirectory = "targetDirectory",
repository = 'repository',
owner = 'owner',
token = 'token',
targetDirectory = 'targetDirectory'
}
export enum CreateFields {
milestone = "milestone",
name = "name",
inputFileName = "inputFileName",
isPreRelease = "isPreRelease",
commit = "commit",
assets = "assets",
milestone = 'milestone',
name = 'name',
inputFileName = 'inputFileName',
isPreRelease = 'isPreRelease',
commit = 'commit',
assets = 'assets'
}
export enum DiscardFields {
milestone = "milestone",
milestone = 'milestone'
}
export enum CloseFields {
milestone = "milestone",
milestone = 'milestone'
}
export enum OpenFields {
milestone = "milestone",
milestone = 'milestone'
}
export enum PublishFields {
tagName = "tagName",
tagName = 'tagName'
}
export enum AddAssetFields {
tagName = "tagName",
assets = "assets",
tagName = 'tagName',
assets = 'assets'
}
export interface GitReleaseManagerSettings {
[CommonFields.repository]: string;
[CommonFields.owner]: string;
[CommonFields.token]: string;
[CommonFields.targetDirectory]: string;
[CommonFields.repository]: string
[CommonFields.owner]: string
[CommonFields.token]: string
[CommonFields.targetDirectory]: string
}
export interface GitReleaseManagerCreateSettings extends GitReleaseManagerSettings {
[CreateFields.milestone]: string;
[CreateFields.name]: string;
[CreateFields.inputFileName]: string;
[CreateFields.isPreRelease]: boolean;
[CreateFields.commit]: string;
[CreateFields.assets]?: string[];
export interface GitReleaseManagerCreateSettings
extends GitReleaseManagerSettings {
[CreateFields.milestone]: string
[CreateFields.name]: string
[CreateFields.inputFileName]: string
[CreateFields.isPreRelease]: boolean
[CreateFields.commit]: string
[CreateFields.assets]?: string[]
}
export interface GitReleaseManagerDiscardSettings extends GitReleaseManagerSettings {
[DiscardFields.milestone]: string;
export interface GitReleaseManagerDiscardSettings
extends GitReleaseManagerSettings {
[DiscardFields.milestone]: string
}
export interface GitReleaseManagerCloseSettings extends GitReleaseManagerSettings {
[CloseFields.milestone]: string;
export interface GitReleaseManagerCloseSettings
extends GitReleaseManagerSettings {
[CloseFields.milestone]: string
}
export interface GitReleaseManagerOpenSettings extends GitReleaseManagerSettings {
[OpenFields.milestone]: string;
export interface GitReleaseManagerOpenSettings
extends GitReleaseManagerSettings {
[OpenFields.milestone]: string
}
export interface GitReleaseManagerPublishSettings extends GitReleaseManagerSettings {
[PublishFields.tagName]: string;
export interface GitReleaseManagerPublishSettings
extends GitReleaseManagerSettings {
[PublishFields.tagName]: string
}
export interface GitReleaseManagerAddAssetSettings extends GitReleaseManagerSettings {
[AddAssetFields.tagName]: string;
[AddAssetFields.assets]: string[];
export interface GitReleaseManagerAddAssetSettings
extends GitReleaseManagerSettings {
[AddAssetFields.tagName]: string
[AddAssetFields.assets]: string[]
}

View File

@@ -1,29 +1,35 @@
import { IBuildAgent } from "../../core/models";
import {IBuildAgent} from '../../core/models'
import {
GitReleaseManagerSettings,
CommonFields, CreateFields, DiscardFields,
CloseFields, OpenFields, PublishFields,
CommonFields,
CreateFields,
DiscardFields,
CloseFields,
OpenFields,
PublishFields,
AddAssetFields,
GitReleaseManagerCreateSettings,
GitReleaseManagerDiscardSettings,
GitReleaseManagerCloseSettings,
GitReleaseManagerOpenSettings,
GitReleaseManagerPublishSettings,
GitReleaseManagerAddAssetSettings,
} from "./models";
GitReleaseManagerAddAssetSettings
} from './models'
export class Settings {
public static getCreateSettings(
buildAgent: IBuildAgent
): GitReleaseManagerCreateSettings {
const milestone = buildAgent.getInput(CreateFields.milestone)
const name = buildAgent.getInput(CreateFields.name)
const inputFileName = buildAgent.getInput(CreateFields.inputFileName)
const isPreRelease = buildAgent.getBooleanInput(
CreateFields.isPreRelease
)
const commit = buildAgent.getInput(CreateFields.commit)
const assets = buildAgent.getListInput(CreateFields.assets)
public static getCreateSettings(buildAgent: IBuildAgent): GitReleaseManagerCreateSettings {
const milestone = buildAgent.getInput(CreateFields.milestone);
const name = buildAgent.getInput(CreateFields.name);
const inputFileName = buildAgent.getInput(CreateFields.inputFileName);
const isPreRelease = buildAgent.getBooleanInput(CreateFields.isPreRelease);
const commit = buildAgent.getInput(CreateFields.commit);
const assets = buildAgent.getListInput(CreateFields.assets);
const commonSettings = Settings.getCommonSettings(buildAgent);
const commonSettings = Settings.getCommonSettings(buildAgent)
return {
...commonSettings,
milestone,
@@ -35,51 +41,61 @@ export class Settings {
}
}
public static getDiscardSettings(buildAgent: IBuildAgent): GitReleaseManagerDiscardSettings {
const milestone = buildAgent.getInput(DiscardFields.milestone);
public static getDiscardSettings(
buildAgent: IBuildAgent
): GitReleaseManagerDiscardSettings {
const milestone = buildAgent.getInput(DiscardFields.milestone)
const commonSettings = Settings.getCommonSettings(buildAgent);
const commonSettings = Settings.getCommonSettings(buildAgent)
return {
...commonSettings,
milestone,
milestone
}
}
public static getCloseSettings(buildAgent: IBuildAgent): GitReleaseManagerCloseSettings {
const milestone = buildAgent.getInput(CloseFields.milestone);
public static getCloseSettings(
buildAgent: IBuildAgent
): GitReleaseManagerCloseSettings {
const milestone = buildAgent.getInput(CloseFields.milestone)
const commonSettings = Settings.getCommonSettings(buildAgent);
const commonSettings = Settings.getCommonSettings(buildAgent)
return {
...commonSettings,
milestone,
milestone
}
}
public static getOpenSettings(buildAgent: IBuildAgent): GitReleaseManagerOpenSettings {
const milestone = buildAgent.getInput(OpenFields.milestone);
public static getOpenSettings(
buildAgent: IBuildAgent
): GitReleaseManagerOpenSettings {
const milestone = buildAgent.getInput(OpenFields.milestone)
const commonSettings = Settings.getCommonSettings(buildAgent);
const commonSettings = Settings.getCommonSettings(buildAgent)
return {
...commonSettings,
milestone,
milestone
}
}
public static getPublishSettings(buildAgent: IBuildAgent): GitReleaseManagerPublishSettings {
const tagName = buildAgent.getInput(PublishFields.tagName);
public static getPublishSettings(
buildAgent: IBuildAgent
): GitReleaseManagerPublishSettings {
const tagName = buildAgent.getInput(PublishFields.tagName)
const commonSettings = Settings.getCommonSettings(buildAgent);
const commonSettings = Settings.getCommonSettings(buildAgent)
return {
...commonSettings,
tagName,
tagName
}
}
public static getAddAssetSettings(buildAgent: IBuildAgent): GitReleaseManagerAddAssetSettings {
const tagName = buildAgent.getInput(AddAssetFields.tagName);
const assets = buildAgent.getListInput(AddAssetFields.assets);
public static getAddAssetSettings(
buildAgent: IBuildAgent
): GitReleaseManagerAddAssetSettings {
const tagName = buildAgent.getInput(AddAssetFields.tagName)
const assets = buildAgent.getListInput(AddAssetFields.assets)
const commonSettings = Settings.getCommonSettings(buildAgent);
const commonSettings = Settings.getCommonSettings(buildAgent)
return {
...commonSettings,
tagName,
@@ -87,17 +103,21 @@ export class Settings {
}
}
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);
const targetDirectory = buildAgent.getInput(CommonFields.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)
const targetDirectory = buildAgent.getInput(
CommonFields.targetDirectory
)
return {
owner,
repository,
token,
targetDirectory,
};
targetDirectory
}
}
}

View File

@@ -1,9 +1,9 @@
import path = require("path");
import path = require('path')
import { TYPES, IBuildAgent, IExecResult } from "../../core/models";
import { injectable, inject } from "inversify";
import { DotnetTool, IDotnetTool } from "../../core/dotnet-tool";
import { IVersionManager } from "../../core/versionManager";
import {TYPES, IBuildAgent, IExecResult} from '../../core/models'
import {injectable, inject} from 'inversify'
import {DotnetTool, IDotnetTool} from '../../core/dotnet-tool'
import {IVersionManager} from '../../core/versionManager'
import {
GitReleaseManagerSettings,
@@ -12,186 +12,222 @@ import {
GitReleaseManagerCloseSettings,
GitReleaseManagerOpenSettings,
GitReleaseManagerPublishSettings,
GitReleaseManagerAddAssetSettings,
} from "./models";
GitReleaseManagerAddAssetSettings
} from './models'
export interface IGitReleaseManagerTool extends IDotnetTool {
install(versionSpec: string, includePrerelease: boolean): Promise<void>;
create(settings: GitReleaseManagerCreateSettings): Promise<IExecResult>;
discard(settings: GitReleaseManagerDiscardSettings): Promise<IExecResult>;
close(settings: GitReleaseManagerCloseSettings): Promise<IExecResult>;
open(settings: GitReleaseManagerOpenSettings): Promise<IExecResult>;
publish(settings: GitReleaseManagerPublishSettings): Promise<IExecResult>;
addAsset(settings: GitReleaseManagerAddAssetSettings): Promise<IExecResult>;
install(versionSpec: string, includePrerelease: boolean): Promise<void>
create(settings: GitReleaseManagerCreateSettings): Promise<IExecResult>
discard(settings: GitReleaseManagerDiscardSettings): Promise<IExecResult>
close(settings: GitReleaseManagerCloseSettings): Promise<IExecResult>
open(settings: GitReleaseManagerOpenSettings): Promise<IExecResult>
publish(settings: GitReleaseManagerPublishSettings): Promise<IExecResult>
addAsset(settings: GitReleaseManagerAddAssetSettings): Promise<IExecResult>
}
@injectable()
export class GitReleaseManagerTool extends DotnetTool implements IGitReleaseManagerTool {
export class GitReleaseManagerTool extends DotnetTool
implements IGitReleaseManagerTool {
constructor(
@inject(TYPES.IBuildAgent) buildAgent: IBuildAgent,
@inject(TYPES.IVersionManager) versionManager: IVersionManager
) {
super(buildAgent, versionManager);
super(buildAgent, versionManager)
}
public async install(versionSpec: string, includePrerelease: boolean): Promise<void> {
await this.toolInstall("GitReleaseManager.Tool", versionSpec, false, includePrerelease);
public async install(
versionSpec: string,
includePrerelease: boolean
): Promise<void> {
await this.toolInstall(
'GitReleaseManager.Tool',
versionSpec,
false,
includePrerelease
)
}
public create(settings: GitReleaseManagerCreateSettings): Promise<IExecResult> {
const args = this.getCreateArguments(settings);
public create(
settings: GitReleaseManagerCreateSettings
): Promise<IExecResult> {
const args = this.getCreateArguments(settings)
return this.execute("dotnet-gitreleasemanager", args);
return this.execute('dotnet-gitreleasemanager', args)
}
public discard(settings: GitReleaseManagerDiscardSettings): Promise<IExecResult> {
const args = this.getDiscardArguments(settings);
public discard(
settings: GitReleaseManagerDiscardSettings
): Promise<IExecResult> {
const args = this.getDiscardArguments(settings)
return this.execute("dotnet-gitreleasemanager", args);
return this.execute('dotnet-gitreleasemanager', args)
}
public close(settings: GitReleaseManagerCloseSettings): Promise<IExecResult> {
const args = this.getCloseArguments(settings);
public close(
settings: GitReleaseManagerCloseSettings
): Promise<IExecResult> {
const args = this.getCloseArguments(settings)
return this.execute("dotnet-gitreleasemanager", args);
return this.execute('dotnet-gitreleasemanager', args)
}
public open(settings: GitReleaseManagerOpenSettings): Promise<IExecResult> {
const args = this.getOpenArguments(settings);
const args = this.getOpenArguments(settings)
return this.execute("dotnet-gitreleasemanager", args);
return this.execute('dotnet-gitreleasemanager', args)
}
public publish(settings: GitReleaseManagerPublishSettings): Promise<IExecResult> {
const args = this.getPublishArguments(settings);
public publish(
settings: GitReleaseManagerPublishSettings
): Promise<IExecResult> {
const args = this.getPublishArguments(settings)
return this.execute("dotnet-gitreleasemanager", args);
return this.execute('dotnet-gitreleasemanager', args)
}
public addAsset(settings: GitReleaseManagerAddAssetSettings): Promise<IExecResult> {
const args = this.getAddAssetArguments(settings);
public addAsset(
settings: GitReleaseManagerAddAssetSettings
): Promise<IExecResult> {
const args = this.getAddAssetArguments(settings)
return this.execute("dotnet-gitreleasemanager", args);
return this.execute('dotnet-gitreleasemanager', args)
}
private getCommonArguments(settings: GitReleaseManagerSettings): string[] {
const args: string[] = [];
const args: string[] = []
args.push("--owner", settings.owner);
args.push("--repository", settings.repository);
args.push("--token", settings.token);
args.push('--owner', settings.owner)
args.push('--repository', settings.repository)
args.push('--token', settings.token)
settings.targetDirectory = this.getRepoDir(settings.targetDirectory);
settings.targetDirectory = this.getRepoDir(settings.targetDirectory)
args.push("--targetDirectory", settings.targetDirectory);
args.push('--targetDirectory', settings.targetDirectory)
return args;
return args
}
private getCreateArguments(settings: GitReleaseManagerCreateSettings): string[] {
const args: string[] = ['create', ...this.getCommonArguments(settings)];
private getCreateArguments(
settings: GitReleaseManagerCreateSettings
): string[] {
const args: string[] = ['create', ...this.getCommonArguments(settings)]
if (settings.milestone) {
args.push("--milestone", settings.milestone);
args.push('--milestone', settings.milestone)
}
if (settings.name) {
args.push("--name", settings.name);
args.push('--name', settings.name)
}
if (settings.commit) {
args.push("--targetcommitish", settings.commit);
args.push('--targetcommitish', settings.commit)
}
if (settings.inputFileName) {
if (this.buildAgent.fileExists(settings.inputFileName)) {
args.push("--inputFilePath", settings.inputFileName);
args.push('--inputFilePath', settings.inputFileName)
} else {
throw new Error("GitReleaseManager inputFilePath not found at " + settings.inputFileName);
throw new Error(
'GitReleaseManager inputFilePath not found at ' +
settings.inputFileName
)
}
}
if (settings.isPreRelease) {
args.push("--pre");
args.push('--pre')
}
if (settings.assets && settings.assets.length > 0) {
settings.assets = settings.assets.map(asset => {
return path.join(settings.targetDirectory, asset)
})
args.push("--assets", settings.assets.join(","));
args.push('--assets', settings.assets.join(','))
}
return args;
return args
}
private getDiscardArguments(settings: GitReleaseManagerDiscardSettings): string[] {
const args: string[] = ['discard', ...this.getCommonArguments(settings)];
private getDiscardArguments(
settings: GitReleaseManagerDiscardSettings
): string[] {
const args: string[] = ['discard', ...this.getCommonArguments(settings)]
if (settings.milestone) {
args.push("--milestone", settings.milestone);
args.push('--milestone', settings.milestone)
}
return args;
return args
}
private getCloseArguments(settings: GitReleaseManagerCloseSettings): string[] {
const args: string[] = ['close', ...this.getCommonArguments(settings)];
private getCloseArguments(
settings: GitReleaseManagerCloseSettings
): string[] {
const args: string[] = ['close', ...this.getCommonArguments(settings)]
if (settings.milestone) {
args.push("--milestone", settings.milestone);
args.push('--milestone', settings.milestone)
}
return args;
return args
}
private getOpenArguments(settings: GitReleaseManagerOpenSettings): string[] {
const args: string[] = ['open', ...this.getCommonArguments(settings)];
private getOpenArguments(
settings: GitReleaseManagerOpenSettings
): string[] {
const args: string[] = ['open', ...this.getCommonArguments(settings)]
if (settings.milestone) {
args.push("--milestone", settings.milestone);
args.push('--milestone', settings.milestone)
}
return args;
return args
}
private getPublishArguments(settings: GitReleaseManagerPublishSettings): string[] {
const args: string[] = ['publish', ...this.getCommonArguments(settings)];
private getPublishArguments(
settings: GitReleaseManagerPublishSettings
): string[] {
const args: string[] = ['publish', ...this.getCommonArguments(settings)]
if (settings.tagName) {
args.push("--tagName", settings.tagName);
args.push('--tagName', settings.tagName)
}
return args;
return args
}
private getAddAssetArguments(settings: GitReleaseManagerAddAssetSettings): string[] {
const args: string[] = ['addasset', ...this.getCommonArguments(settings)];
private getAddAssetArguments(
settings: GitReleaseManagerAddAssetSettings
): string[] {
const args: string[] = [
'addasset',
...this.getCommonArguments(settings)
]
if (settings.tagName) {
args.push("--tagName", settings.tagName);
args.push('--tagName', settings.tagName)
}
if (settings.assets && settings.assets.length > 0) {
settings.assets = settings.assets.map(asset => {
return path.join(settings.targetDirectory, asset)
})
args.push("--assets", settings.assets.join(","));
args.push('--assets', settings.assets.join(','))
}
return args;
return args
}
private getRepoDir(targetPath: string): string {
let workDir: string;
const srcDir = this.buildAgent.getSourceDir();
let workDir: string
const srcDir = this.buildAgent.getSourceDir()
if (!targetPath) {
workDir = srcDir;
workDir = srcDir
} else {
if (this.buildAgent.directoryExists(targetPath)) {
workDir = path.join(srcDir, targetPath);
workDir = path.join(srcDir, targetPath)
} else {
throw new Error("Directory not found at " + targetPath);
throw new Error('Directory not found at ' + targetPath)
}
}
return workDir.replace(/\\/g, "/");
return workDir.replace(/\\/g, '/')
}
}

View File

@@ -1,52 +1,52 @@
export enum ExecuteFields {
targetPath = "targetPath",
useConfigFile = "useConfigFile",
configFilePath = "configFilePath",
updateAssemblyInfo = "updateAssemblyInfo",
updateAssemblyInfoFilename = "updateAssemblyInfoFilename",
additionalArguments = "additionalArguments",
srcDir = "srcDir",
};
targetPath = 'targetPath',
useConfigFile = 'useConfigFile',
configFilePath = 'configFilePath',
updateAssemblyInfo = 'updateAssemblyInfo',
updateAssemblyInfoFilename = 'updateAssemblyInfoFilename',
additionalArguments = 'additionalArguments',
srcDir = 'srcDir'
}
export interface GitVersionSettings {
[ExecuteFields.targetPath]: string;
[ExecuteFields.useConfigFile]: boolean;
[ExecuteFields.configFilePath]: string;
[ExecuteFields.updateAssemblyInfo]: boolean;
[ExecuteFields.updateAssemblyInfoFilename]: string;
[ExecuteFields.additionalArguments]: string;
[ExecuteFields.srcDir]: string;
[ExecuteFields.targetPath]: string
[ExecuteFields.useConfigFile]: boolean
[ExecuteFields.configFilePath]: string
[ExecuteFields.updateAssemblyInfo]: boolean
[ExecuteFields.updateAssemblyInfoFilename]: string
[ExecuteFields.additionalArguments]: string
[ExecuteFields.srcDir]: string
}
export interface GitVersionOutput {
Major: number;
Minor: number;
Patch: number;
PreReleaseTag: string;
PreReleaseTagWithDash: string;
PreReleaseLabel: string;
PreReleaseNumber: number;
WeightedPreReleaseNumber: number;
BuildMetaData: number;
BuildMetaDataPadded: string;
FullBuildMetaData: string;
MajorMinorPatch: string;
SemVer: string;
LegacySemVer: string;
LegacySemVerPadded: string;
AssemblySemVer: string;
AssemblySemFileVer: string;
FullSemVer: string;
InformationalVersion: string;
BranchName: string;
Sha: string;
ShortSha: string;
NuGetVersionV2: string;
NuGetVersion: string;
NuGetPreReleaseTagV2: string;
NuGetPreReleaseTag: string;
VersionSourceSha: string;
CommitsSinceVersionSource: number;
CommitsSinceVersionSourcePadded: string;
CommitDate: string;
Major: number
Minor: number
Patch: number
PreReleaseTag: string
PreReleaseTagWithDash: string
PreReleaseLabel: string
PreReleaseNumber: number
WeightedPreReleaseNumber: number
BuildMetaData: number
BuildMetaDataPadded: string
FullBuildMetaData: string
MajorMinorPatch: string
SemVer: string
LegacySemVer: string
LegacySemVerPadded: string
AssemblySemVer: string
AssemblySemFileVer: string
FullSemVer: string
InformationalVersion: string
BranchName: string
Sha: string
ShortSha: string
NuGetVersionV2: string
NuGetVersion: string
NuGetPreReleaseTagV2: string
NuGetPreReleaseTag: string
VersionSourceSha: string
CommitsSinceVersionSource: number
CommitsSinceVersionSourcePadded: string
CommitDate: string
}

View File

@@ -1,21 +1,30 @@
import { IBuildAgent } from "../../core/models";
import {IBuildAgent} from '../../core/models'
import { GitVersionSettings, ExecuteFields } from "./models";
import {GitVersionSettings, ExecuteFields} from './models'
export class Settings {
public static getGitVersionSettings(
buildAgent: IBuildAgent
): GitVersionSettings {
const targetPath = buildAgent.getInput(ExecuteFields.targetPath)
public static getGitVersionSettings(buildAgent: IBuildAgent): GitVersionSettings {
const targetPath = buildAgent.getInput(ExecuteFields.targetPath);
const useConfigFile = buildAgent.getBooleanInput(
ExecuteFields.useConfigFile
)
const configFilePath = buildAgent.getInput(ExecuteFields.configFilePath)
const useConfigFile = buildAgent.getBooleanInput(ExecuteFields.useConfigFile);
const configFilePath = buildAgent.getInput(ExecuteFields.configFilePath);
const updateAssemblyInfo = buildAgent.getBooleanInput(
ExecuteFields.updateAssemblyInfo
)
const updateAssemblyInfoFilename = buildAgent.getInput(
ExecuteFields.updateAssemblyInfoFilename
)
const updateAssemblyInfo = buildAgent.getBooleanInput(ExecuteFields.updateAssemblyInfo);
const updateAssemblyInfoFilename = buildAgent.getInput(ExecuteFields.updateAssemblyInfoFilename);
const additionalArguments = buildAgent.getInput(
ExecuteFields.additionalArguments
)
const additionalArguments = buildAgent.getInput(ExecuteFields.additionalArguments);
const srcDir = buildAgent.getSourceDir().replace(/\\/g, "/");
const srcDir = buildAgent.getSourceDir().replace(/\\/g, '/')
return {
targetPath,
@@ -24,7 +33,7 @@ export class Settings {
updateAssemblyInfo,
updateAssemblyInfoFilename,
additionalArguments,
srcDir,
};
srcDir
}
}
}
}

View File

@@ -1,120 +1,183 @@
import path = require("path");
import path = require('path')
import { injectable, inject } from "inversify";
import { IExecResult, IBuildAgent, TYPES } from "../../core/models";
import { DotnetTool, IDotnetTool } from "../../core/dotnet-tool";
import { GitVersionSettings, GitVersionOutput, ExecuteFields } from "./models";
import { IVersionManager } from "../../core/versionManager";
import {injectable, inject} from 'inversify'
import {IExecResult, IBuildAgent, TYPES} from '../../core/models'
import {DotnetTool, IDotnetTool} from '../../core/dotnet-tool'
import {GitVersionSettings, GitVersionOutput, ExecuteFields} from './models'
import {IVersionManager} from '../../core/versionManager'
export interface IGitVersionTool extends IDotnetTool {
install(versionSpec: string, includePrerelease: boolean): Promise<void>;
run(options: GitVersionSettings): Promise<IExecResult>;
writeGitVersionToAgent(gitversion: GitVersionOutput): void;
install(versionSpec: string, includePrerelease: boolean): Promise<void>
run(options: GitVersionSettings): Promise<IExecResult>
writeGitVersionToAgent(gitversion: GitVersionOutput): void
}
@injectable()
export class GitVersionTool extends DotnetTool implements IGitVersionTool {
constructor(
@inject(TYPES.IBuildAgent) buildAgent: IBuildAgent,
@inject(TYPES.IVersionManager) versionManager: IVersionManager
) {
super(buildAgent, versionManager);
super(buildAgent, versionManager)
}
public async install(versionSpec: string, includePrerelease: boolean): Promise<void> {
await this.toolInstall("GitVersion.Tool", versionSpec, false, includePrerelease);
public async install(
versionSpec: string,
includePrerelease: boolean
): Promise<void> {
await this.toolInstall(
'GitVersion.Tool',
versionSpec,
false,
includePrerelease
)
}
public run(options: GitVersionSettings): Promise<IExecResult> {
const workDir = this.getRepoDir(options.targetPath);
const workDir = this.getRepoDir(options.targetPath)
const args = this.getArguments(workDir, options);
const args = this.getArguments(workDir, options)
return this.execute("dotnet-gitversion", args);
return this.execute('dotnet-gitversion', args)
}
private getRepoDir(targetPath: string): string {
let workDir: string;
const srcDir = this.buildAgent.getSourceDir();
let workDir: string
const srcDir = this.buildAgent.getSourceDir()
if (!targetPath) {
workDir = srcDir;
workDir = srcDir
} else {
if (this.buildAgent.directoryExists(targetPath)) {
workDir = path.join(srcDir, targetPath);
workDir = path.join(srcDir, targetPath)
} else {
throw new Error("Directory not found at " + targetPath);
throw new Error('Directory not found at ' + targetPath)
}
}
return workDir.replace(/\\/g, "/");
return workDir.replace(/\\/g, '/')
}
private getArguments(workDir: string, options: GitVersionSettings): string[] {
const args = [
workDir,
"/output", "json",
"/output", "buildserver",
];
private getArguments(
workDir: string,
options: GitVersionSettings
): string[] {
const args = [workDir, '/output', 'json', '/output', 'buildserver']
const {
useConfigFile,
configFilePath,
updateAssemblyInfo,
updateAssemblyInfoFilename,
additionalArguments,
} = options;
additionalArguments
} = options
if (useConfigFile) {
if (this.buildAgent.isValidInputFile("configFilePath", configFilePath)) {
args.push("/config", configFilePath);
if (
this.buildAgent.isValidInputFile(
'configFilePath',
configFilePath
)
) {
args.push('/config', configFilePath)
} else {
throw new Error("GitVersion configuration file not found at " + configFilePath);
throw new Error(
'GitVersion configuration file not found at ' +
configFilePath
)
}
}
if (updateAssemblyInfo) {
args.push("/updateassemblyinfo");
if (this.buildAgent.isValidInputFile("updateAssemblyInfoFilename", updateAssemblyInfoFilename)) {
args.push(updateAssemblyInfoFilename);
args.push('/updateassemblyinfo')
if (
this.buildAgent.isValidInputFile(
'updateAssemblyInfoFilename',
updateAssemblyInfoFilename
)
) {
args.push(updateAssemblyInfoFilename)
} else {
throw new Error("AssemblyInfoFilename file not found at " + updateAssemblyInfoFilename);
throw new Error(
'AssemblyInfoFilename file not found at ' +
updateAssemblyInfoFilename
)
}
}
args.push(additionalArguments);
return args;
args.push(additionalArguments)
return args
}
public writeGitVersionToAgent(gitversion: GitVersionOutput): void {
this.buildAgent.setOutput("major", gitversion.Major.toString());
this.buildAgent.setOutput("minor", gitversion.Minor.toString());
this.buildAgent.setOutput("patch", gitversion.Patch.toString());
this.buildAgent.setOutput("preReleaseTag", gitversion.PreReleaseTag);
this.buildAgent.setOutput("preReleaseTagWithDash", gitversion.PreReleaseTagWithDash);
this.buildAgent.setOutput("preReleaseLabel", gitversion.PreReleaseLabel);
this.buildAgent.setOutput("preReleaseNumber", gitversion.PreReleaseNumber.toString());
this.buildAgent.setOutput("weightedPreReleaseNumber", gitversion.WeightedPreReleaseNumber.toString());
this.buildAgent.setOutput("buildMetaData", gitversion.BuildMetaData.toString());
this.buildAgent.setOutput("buildMetaDataPadded", gitversion.BuildMetaDataPadded);
this.buildAgent.setOutput("fullBuildMetaData", gitversion.FullBuildMetaData);
this.buildAgent.setOutput("majorMinorPatch", gitversion.MajorMinorPatch);
this.buildAgent.setOutput("semVer", gitversion.SemVer);
this.buildAgent.setOutput("legacySemVer", gitversion.LegacySemVer);
this.buildAgent.setOutput("legacySemVerPadded", gitversion.LegacySemVerPadded);
this.buildAgent.setOutput("assemblySemVer", gitversion.AssemblySemVer);
this.buildAgent.setOutput("assemblySemFileVer", gitversion.AssemblySemFileVer);
this.buildAgent.setOutput("fullSemVer", gitversion.FullSemVer);
this.buildAgent.setOutput("informationalVersion", gitversion.InformationalVersion);
this.buildAgent.setOutput("branchName", gitversion.BranchName);
this.buildAgent.setOutput("sha", gitversion.Sha);
this.buildAgent.setOutput("shortSha", gitversion.ShortSha);
this.buildAgent.setOutput("nuGetVersionV2", gitversion.NuGetVersionV2);
this.buildAgent.setOutput("nuGetVersion", gitversion.NuGetVersion);
this.buildAgent.setOutput("nuGetPreReleaseTagV2", gitversion.NuGetPreReleaseTagV2);
this.buildAgent.setOutput("nuGetPreReleaseTag", gitversion.NuGetPreReleaseTag);
this.buildAgent.setOutput("versionSourceSha", gitversion.VersionSourceSha);
this.buildAgent.setOutput("commitsSinceVersionSource", gitversion.CommitsSinceVersionSource.toString());
this.buildAgent.setOutput("commitsSinceVersionSourcePadded", gitversion.CommitsSinceVersionSourcePadded);
this.buildAgent.setOutput("commitDate", gitversion.CommitDate);
this.buildAgent.setOutput('major', gitversion.Major.toString())
this.buildAgent.setOutput('minor', gitversion.Minor.toString())
this.buildAgent.setOutput('patch', gitversion.Patch.toString())
this.buildAgent.setOutput('preReleaseTag', gitversion.PreReleaseTag)
this.buildAgent.setOutput(
'preReleaseTagWithDash',
gitversion.PreReleaseTagWithDash
)
this.buildAgent.setOutput('preReleaseLabel', gitversion.PreReleaseLabel)
this.buildAgent.setOutput(
'preReleaseNumber',
gitversion.PreReleaseNumber.toString()
)
this.buildAgent.setOutput(
'weightedPreReleaseNumber',
gitversion.WeightedPreReleaseNumber.toString()
)
this.buildAgent.setOutput(
'buildMetaData',
gitversion.BuildMetaData.toString()
)
this.buildAgent.setOutput(
'buildMetaDataPadded',
gitversion.BuildMetaDataPadded
)
this.buildAgent.setOutput(
'fullBuildMetaData',
gitversion.FullBuildMetaData
)
this.buildAgent.setOutput('majorMinorPatch', gitversion.MajorMinorPatch)
this.buildAgent.setOutput('semVer', gitversion.SemVer)
this.buildAgent.setOutput('legacySemVer', gitversion.LegacySemVer)
this.buildAgent.setOutput(
'legacySemVerPadded',
gitversion.LegacySemVerPadded
)
this.buildAgent.setOutput('assemblySemVer', gitversion.AssemblySemVer)
this.buildAgent.setOutput(
'assemblySemFileVer',
gitversion.AssemblySemFileVer
)
this.buildAgent.setOutput('fullSemVer', gitversion.FullSemVer)
this.buildAgent.setOutput(
'informationalVersion',
gitversion.InformationalVersion
)
this.buildAgent.setOutput('branchName', gitversion.BranchName)
this.buildAgent.setOutput('sha', gitversion.Sha)
this.buildAgent.setOutput('shortSha', gitversion.ShortSha)
this.buildAgent.setOutput('nuGetVersionV2', gitversion.NuGetVersionV2)
this.buildAgent.setOutput('nuGetVersion', gitversion.NuGetVersion)
this.buildAgent.setOutput(
'nuGetPreReleaseTagV2',
gitversion.NuGetPreReleaseTagV2
)
this.buildAgent.setOutput(
'nuGetPreReleaseTag',
gitversion.NuGetPreReleaseTag
)
this.buildAgent.setOutput(
'versionSourceSha',
gitversion.VersionSourceSha
)
this.buildAgent.setOutput(
'commitsSinceVersionSource',
gitversion.CommitsSinceVersionSource.toString()
)
this.buildAgent.setOutput(
'commitsSinceVersionSourcePadded',
gitversion.CommitsSinceVersionSourcePadded
)
this.buildAgent.setOutput('commitDate', gitversion.CommitDate)
}
}