diff --git a/.gitignore b/.gitignore index 6193d01ca1..e349e86de0 100644 --- a/.gitignore +++ b/.gitignore @@ -109,3 +109,10 @@ site/ /tools /*.zip GitVersion.CommandLine/*/ + +#################### +# Node and Typescript +#################### +src/GitVersionTfsTask/node_modules/ +src/GitVersionTfsTask/*.d.ts +src/GitVersionTfsTask/*.js diff --git a/appveyor.yml b/appveyor.yml index d25bd9bb1f..d65c0dcabc 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -1,5 +1,6 @@ install: npm i -g tfx-cli + npm i -g typescript assembly_info: patch: false 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