From 947b56ebb47dcd22903a8b3bc4e97b015f7980ed Mon Sep 17 00:00:00 2001 From: Cyprien Autexier Date: Wed, 15 Mar 2017 08:13:13 +0100 Subject: [PATCH] node execution engine --- .gitignore | 6 ++- appveyor.yml | 7 +++ src/GitVersionTfsTask/GitVersion.ts | 80 +++++++++++++++++++++++++++++ src/GitVersionTfsTask/package.json | 21 ++++++++ src/GitVersionTfsTask/task.json | 12 ++++- src/GitVersionTfsTask/tsconfig.json | 13 +++++ 6 files changed, 136 insertions(+), 3 deletions(-) create mode 100644 src/GitVersionTfsTask/GitVersion.ts create mode 100644 src/GitVersionTfsTask/package.json create mode 100644 src/GitVersionTfsTask/tsconfig.json diff --git a/.gitignore b/.gitignore index fa9646b36e..7010b5ec04 100644 --- a/.gitignore +++ b/.gitignore @@ -101,4 +101,8 @@ site/ # Visual Studio Code #################### -.vscode \ No newline at end of file +.vscode + +src/GitVersionTfsTask/node_modules/ +src/GitVersionTfsTask/*.d.ts +src/GitVersionTfsTask/*.js diff --git a/appveyor.yml b/appveyor.yml index 46018c2de1..8990d64c86 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -10,6 +10,13 @@ configuration: build_script: - cmd: nuget restore src/GitVersion.sln - cmd: npm i -g tfx-cli + - cmd: npm i -g typescript + + - cmd: mkdir src\GitVersionTfsTask\node_modules + - cmd: cd src\GitVersionTfsTask + - cmd: npm install + - cmd: cd ..\.. + - cmd: tsc -p src/GitVersionTfsTask - cmd: msbuild src/GitVersion.sln "/p:Configuration=%CONFIGURATION%;Platform=%PLATFORM%" - ps: .\build\NuGetCommandLineBuild\tools\GitVersion.exe /l console /output buildserver /updateAssemblyInfo diff --git a/src/GitVersionTfsTask/GitVersion.ts b/src/GitVersionTfsTask/GitVersion.ts new file mode 100644 index 0000000000..bd5b129df5 --- /dev/null +++ b/src/GitVersionTfsTask/GitVersion.ts @@ -0,0 +1,80 @@ +import tl = require('vsts-task-lib/task'); +import { IExecOptions, ToolRunner } from 'vsts-task-lib/toolrunner'; +import path = require('path'); +import q = require('q'); +import os = require('os'); + +var updateAssemblyInfo = tl.getBoolInput('updateAssemblyInfo'); +var updateAssemblyInfoFilename = tl.getInput('updateAssemblyInfoFilename'); +var additionalArguments = tl.getInput('additionalArguments'); +var gitVersionPath = tl.getInput('gitVersionPath'); +var preferBundledVersion = tl.getBoolInput('preferBundledVersion'); + +var currentDirectory = __dirname; + +var sourcesDirectory = tl.getVariable("Build.SourcesDirectory") + +if (!gitVersionPath) { + gitVersionPath = tl.which("GitVersion.exe"); + if (preferBundledVersion || !gitVersionPath) { + gitVersionPath = path.join(currentDirectory, "GitVersion.exe"); + } +} + +(async function execute() { + try { + + var execOptions: IExecOptions = { + cwd: undefined, + env: undefined, + silent: undefined, + failOnStdErr: undefined, + ignoreReturnCode: undefined, + errStream: undefined, + outStream: undefined, + windowsVerbatimArguments: undefined + }; + + var toolRunner: ToolRunner; + + var isWin32 = os.platform() == "win32"; + + if (isWin32) { + toolRunner = tl.tool(gitVersionPath); + } else { + toolRunner = tl.tool("mono"); + toolRunner.arg(gitVersionPath); + } + + toolRunner.arg([ + sourcesDirectory, + "/output", + "buildserver", + "/nofetch" + ]); + + if (updateAssemblyInfo) { + toolRunner.arg("/updateassemblyinfo") + if (updateAssemblyInfoFilename) { + toolRunner.arg(updateAssemblyInfoFilename); + } else { + toolRunner.arg("true"); + } + } + + if (additionalArguments) { + toolRunner.line(additionalArguments); + } + + var result = await toolRunner.exec(execOptions); + if (result) { + tl.setResult(tl.TaskResult.Failed, "An error occured during GitVersion execution") + } else { + tl.setResult(tl.TaskResult.Succeeded, "GitVersion executed successfully") + } + } + catch (err) { + tl.debug(err.stack) + tl.setResult(tl.TaskResult.Failed, err); + } +})(); diff --git a/src/GitVersionTfsTask/package.json b/src/GitVersionTfsTask/package.json new file mode 100644 index 0000000000..440d77056d --- /dev/null +++ b/src/GitVersionTfsTask/package.json @@ -0,0 +1,21 @@ +{ + "name": "gitversion", + "version": "1.0.0", + "private": true, + "description": "", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "author": "", + "license": "MIT", + "dependencies": { + "vsts-task-lib": "1.1.0", + "q" : "1.4.1" + }, + "devDependencies" :{ + "@types/minimatch": "^2.0.29", + "@types/node": "^7.0.5", + "@types/q": "0.0.32" + } +} diff --git a/src/GitVersionTfsTask/task.json b/src/GitVersionTfsTask/task.json index fb53dd9cca..58f8c6b6b4 100644 --- a/src/GitVersionTfsTask/task.json +++ b/src/GitVersionTfsTask/task.json @@ -56,11 +56,19 @@ "required": false, "helpMarkDown": "Optionally supply the path to GitVersion.exe", "groupName": "additional" + }, + { + "name": "preferBundledVersion", + "type": "boolean", + "label": "Prefer bundled GiVersion.exe", + "required": false, + "helpMarkDown": "If checked it will prefer the bundled version over a version found in path", + "groupName": "additional" } ], "execution": { - "PowerShell": { - "target": "$(currentDirectory)\\GitVersion.ps1", + "Node": { + "target": "GitVersion.js", "argumentFormat": "", "workingDirectory": "" } diff --git a/src/GitVersionTfsTask/tsconfig.json b/src/GitVersionTfsTask/tsconfig.json new file mode 100644 index 0000000000..df548cf72f --- /dev/null +++ b/src/GitVersionTfsTask/tsconfig.json @@ -0,0 +1,13 @@ +{ + "compilerOptions": { + "module": "commonjs", + "moduleResolution": "node", + "noImplicitAny": true, + "removeComments": true, + "preserveConstEnums": true, + "target": "es6", + "sourceMap": false, + "inlineSourceMap": true, + "declaration": true + } +} \ No newline at end of file