diff --git a/.eslintrc.js b/.eslintrc.js deleted file mode 100644 index d95df0c..0000000 --- a/.eslintrc.js +++ /dev/null @@ -1,14 +0,0 @@ -module.exports = { - root: true, - parser: '@typescript-eslint/parser', - plugins: [ - '@typescript-eslint', - 'sort-keys-fix' - ], - extends: [ - 'eslint:recommended', - 'plugin:@typescript-eslint/eslint-recommended', - 'plugin:@typescript-eslint/recommended', - 'prettier/@typescript-eslint', - ], -}; \ No newline at end of file diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 9f0509e..6d47e3e 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -23,6 +23,7 @@ jobs: git fetch --prune --unshallow - run: | npm install + npm run format-check npm run build:github npm run build:azure name: Build code diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 0000000..8c98911 --- /dev/null +++ b/.prettierignore @@ -0,0 +1,2 @@ +node_modules/ +src/*/node_modules/ diff --git a/.prettierrc.json b/.prettierrc.json new file mode 100644 index 0000000..5be86fb --- /dev/null +++ b/.prettierrc.json @@ -0,0 +1,11 @@ +{ + "printWidth": 80, + "tabWidth": 4, + "useTabs": false, + "semi": false, + "singleQuote": true, + "trailingComma": "none", + "bracketSpacing": false, + "arrowParens": "avoid", + "parser": "typescript" +} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 11e6339..b504aca 100644 --- a/package-lock.json +++ b/package-lock.json @@ -57,26 +57,6 @@ } } }, - "@babel/code-frame": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz", - "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==", - "dev": true, - "requires": { - "@babel/highlight": "^7.8.3" - } - }, - "@babel/highlight": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.8.3.tgz", - "integrity": "sha512-PX4y5xQUvy0fnEVHrYOarRPXVWafSjTW9T0Hab8gVIawpl2Sj0ORyrygANq+KjcNlSSTw0YCLSNA8OyZ1I4yEg==", - "dev": true, - "requires": { - "chalk": "^2.0.0", - "esutils": "^2.0.2", - "js-tokens": "^4.0.0" - } - }, "@types/node": { "version": "13.9.0", "resolved": "https://registry.npmjs.org/@types/node/-/node-13.9.0.tgz", @@ -294,9 +274,9 @@ "dev": true }, "acorn": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.0.tgz", - "integrity": "sha512-gac8OEcQ2Li1dxIEWGZzsp2BitJxwkwcOm0zHAJLcPJaVvm58FRnk6RkuLRpU1EujipU2ZFODv2P9DLMfnV8mw==", + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.1.tgz", + "integrity": "sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA==", "dev": true }, "aggregate-error": { @@ -531,15 +511,6 @@ "readable-stream": "^2.0.0" } }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, "arr-diff": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", @@ -954,12 +925,6 @@ "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", "dev": true }, - "builtin-modules": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", - "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", - "dev": true - }, "builtin-status-codes": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", @@ -1516,12 +1481,6 @@ "regexp.prototype.flags": "^1.2.0" } }, - "deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "dev": true - }, "define-properties": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", @@ -1588,12 +1547,6 @@ "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=", "dev": true }, - "diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true - }, "diffie-hellman": { "version": "5.0.3", "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", @@ -1739,12 +1692,6 @@ "estraverse": "^4.1.1" } }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true - }, "esrecurse": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", @@ -1760,12 +1707,6 @@ "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", "dev": true }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true - }, "events": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/events/-/events-3.1.0.tgz", @@ -2205,17 +2146,6 @@ "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", "dev": true }, - "fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "dev": true, - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, "fs-minipass": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", @@ -3362,22 +3292,6 @@ "integrity": "sha1-o6vicYryQaKykE+EpiWXDzia4yo=", "dev": true }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "js-yaml": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", - "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, "json-in-place": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/json-in-place/-/json-in-place-1.0.1.tgz", @@ -3405,33 +3319,6 @@ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "dev": true }, - "json-update": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/json-update/-/json-update-5.3.0.tgz", - "integrity": "sha512-NUvwm6DMKTVY4raxzAdQiakhD57BKxZwO/7xDYKO10purZiyFK9Gae+fVmAPl0g1WzuwfAJwZzuOcQUavgjE6w==", - "dev": true, - "requires": { - "deep-extend": "^0.6.0", - "fs-extra": "^8.1.0", - "lockfile": "~1.0.4", - "pify": "^4.0.1", - "underscore": "^1.9.2" - }, - "dependencies": { - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true - }, - "underscore": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.9.2.tgz", - "integrity": "sha512-D39qtimx0c1fI3ya1Lnhk3E9nONswSKhnffBI0gME9C99fYOkNi04xs8K6pePLhvl1frbDemkaBQ5ikWllR2HQ==", - "dev": true - } - } - }, "json5": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", @@ -3449,15 +3336,6 @@ } } }, - "jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6" - } - }, "jszip": { "version": "3.1.5", "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.1.5.tgz", @@ -3500,9 +3378,9 @@ } }, "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "dev": true }, "lazystream": { @@ -3571,15 +3449,6 @@ "path-exists": "^3.0.0" } }, - "lockfile": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/lockfile/-/lockfile-1.0.4.tgz", - "integrity": "sha512-cvbTwETRfsFh4nHsL1eGWapU1XFi5Ot9E85sWAwia7Y7EgB7vfqcZhTKZ+l7hCGxSPoushMv5GKhT5PdLv03WA==", - "dev": true, - "requires": { - "signal-exit": "^3.0.2" - } - }, "lodash": { "version": "4.17.15", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", @@ -4429,6 +4298,12 @@ "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", "dev": true }, + "prettier": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.19.1.tgz", + "integrity": "sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew==", + "dev": true + }, "process": { "version": "0.11.10", "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", @@ -5213,12 +5088,6 @@ "extend-shallow": "^3.0.0" } }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - }, "ssri": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/ssri/-/ssri-7.1.0.tgz", @@ -5661,36 +5530,6 @@ "integrity": "sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==", "dev": true }, - "tslint": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/tslint/-/tslint-6.0.0.tgz", - "integrity": "sha512-9nLya8GBtlFmmFMW7oXXwoXS1NkrccqTqAtwXzdPV9e2mqSEvCki6iHL/Fbzi5oqbugshzgGPk7KBb2qNP1DSA==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "builtin-modules": "^1.1.1", - "chalk": "^2.3.0", - "commander": "^2.12.1", - "diff": "^4.0.1", - "glob": "^7.1.1", - "js-yaml": "^3.13.1", - "minimatch": "^3.0.4", - "mkdirp": "^0.5.1", - "resolve": "^1.3.2", - "semver": "^5.3.0", - "tslib": "^1.10.0", - "tsutils": "^2.29.0" - } - }, - "tsutils": { - "version": "2.29.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.29.0.tgz", - "integrity": "sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==", - "dev": true, - "requires": { - "tslib": "^1.8.1" - } - }, "tty-browserify": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", @@ -5766,12 +5605,6 @@ "imurmurhash": "^0.1.4" } }, - "universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true - }, "unset-value": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", @@ -6147,6 +5980,14 @@ "regex-not": "^1.0.0", "snapdragon": "^0.8.1", "to-regex": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true + } } }, "pify": { diff --git a/package.json b/package.json index 7614867..ffb4e4e 100644 --- a/package.json +++ b/package.json @@ -8,6 +8,8 @@ }, "main": "main.js", "scripts": { + "format": "prettier --write src/**/*.ts", + "format-check": "prettier --check src/**/*.ts", "build:mock": "webpack --config webpack.config.js --env.agent=mock", "build:azure": "webpack --config webpack.config.js --env.agent=azure", "build:github": "webpack --config webpack.config.js --env.agent=github", @@ -39,13 +41,12 @@ "@types/q": "^1.5.2", "@types/semver-compare": "^1.0.1", "@types/uuid": "^3.4.7", - "json-update": "^5.3.0", + "prettier": "^1.19.1", "reflect-metadata": "^0.1.13", "replace-in-file-webpack-plugin": "^1.0.6", "terser-webpack-plugin": "^2.3.5", "tfx-cli": "^0.7.11", "ts-loader": "^6.2.1", - "tslint": "^6.0.0", "typescript": "^3.8.3", "webpack": "^4.42.0", "webpack-cli": "^3.3.11" diff --git a/src/agent/azure/build-agent.ts b/src/agent/azure/build-agent.ts index c617370..27cf510 100644 --- a/src/agent/azure/build-agent.ts +++ b/src/agent/azure/build-agent.ts @@ -1,106 +1,108 @@ -import { injectable } from "inversify"; +import {injectable} from 'inversify' -import * as taskLib from "azure-pipelines-task-lib/task"; -import * as toolLib from "azure-pipelines-tool-lib/tool"; +import * as taskLib from 'azure-pipelines-task-lib/task' +import * as toolLib from 'azure-pipelines-tool-lib/tool' -import { IBuildAgent, IExecResult } from "../../core/models"; +import {IBuildAgent, IExecResult} from '../../core/models' @injectable() class BuildAgent implements IBuildAgent { - public get agentName(): string { - return "Azure Pipelines"; + return 'Azure Pipelines' } public find(toolName: string, versionSpec: string, arch?: string): string { - return toolLib.findLocalTool(toolName, versionSpec, arch); + return toolLib.findLocalTool(toolName, versionSpec, arch) } - public cacheDir(sourceDir: string, tool: string, version: string, arch?: string): Promise { - return toolLib.cacheDir(sourceDir, tool, version, arch); + public cacheDir( + sourceDir: string, + tool: string, + version: string, + arch?: string + ): Promise { + return toolLib.cacheDir(sourceDir, tool, version, arch) } public createTempDir(): Promise { - return Promise.resolve(taskLib.getVariable("Agent.TempDirectory")); + return Promise.resolve(taskLib.getVariable('Agent.TempDirectory')) } public debug(message: string): void { - taskLib.debug(message); + taskLib.debug(message) } public setFailed(message: string, done?: boolean): void { - taskLib.setResult(taskLib.TaskResult.Failed, message, done); + taskLib.setResult(taskLib.TaskResult.Failed, message, done) } public setSucceeded(message: string, done?: boolean): void { - taskLib.setResult(taskLib.TaskResult.Succeeded, message, done); + taskLib.setResult(taskLib.TaskResult.Succeeded, message, done) } public exportVariable(name: string, val: string): void { - taskLib.setVariable(name, val); + taskLib.setVariable(name, val) } public getVariable(name: string): string { - return taskLib.getVariable(name); + return taskLib.getVariable(name) } public addPath(inputPath: string): void { - toolLib.prependPath(inputPath); + toolLib.prependPath(inputPath) } public which(tool: string, check?: boolean): Promise { - return Promise.resolve(taskLib.which(tool, check)); + return Promise.resolve(taskLib.which(tool, check)) } public exec(exec: string, args: string[]): Promise { - const tr = taskLib.tool(exec); - tr.arg(args); + const tr = taskLib.tool(exec) + tr.arg(args) - const result = tr.execSync(); + const result = tr.execSync() return Promise.resolve({ code: result.code, error: result.error, stderr: result.stderr, - stdout: result.stdout, - }); + stdout: result.stdout + }) } public getSourceDir(): string { - return this.getVariable("Build.SourcesDirectory"); + return this.getVariable('Build.SourcesDirectory') } public setOutput(name: string, value: string): void { - taskLib.setVariable(name, value); + taskLib.setVariable(name, value) } public getInput(input: string, required?: boolean): string { - return taskLib.getInput(input, required); + return taskLib.getInput(input, required) } public getListInput(input: string, required?: boolean): string[] { return taskLib .getInput(input, required) - .split("\n") - .filter(x => x !== ""); + .split('\n') + .filter(x => x !== '') } public getBooleanInput(input: string, required?: boolean): boolean { - return taskLib.getBoolInput(input, required); + return taskLib.getBoolInput(input, required) } public isValidInputFile(input: string, file: string): boolean { - return taskLib.filePathSupplied(input) && this.fileExists(file); + return taskLib.filePathSupplied(input) && this.fileExists(file) } public fileExists(file: string): boolean { - return taskLib.exist(file) && taskLib.stats(file).isFile(); + return taskLib.exist(file) && taskLib.stats(file).isFile() } public directoryExists(file: string): boolean { - return taskLib.exist(file) && taskLib.stats(file).isDirectory(); + return taskLib.exist(file) && taskLib.stats(file).isDirectory() } } -export { - BuildAgent, -}; +export {BuildAgent} diff --git a/src/agent/github/build-agent.ts b/src/agent/github/build-agent.ts index 453c725..15c25ca 100644 --- a/src/agent/github/build-agent.ts +++ b/src/agent/github/build-agent.ts @@ -1,62 +1,66 @@ -import * as fs from "fs"; -import * as path from "path"; +import * as fs from 'fs' +import * as path from 'path' -import uuidv4 from "uuid"; +import uuidv4 from 'uuid' -import * as core from "@actions/core"; -import * as exe from "@actions/exec"; -import * as io from "@actions/io"; -import * as toolCache from "@actions/tool-cache"; +import * as core from '@actions/core' +import * as exe from '@actions/exec' +import * as io from '@actions/io' +import * as toolCache from '@actions/tool-cache' -import { injectable } from "inversify"; +import {injectable} from 'inversify' -import { IBuildAgent, IExecResult } from "../../core/models"; +import {IBuildAgent, IExecResult} from '../../core/models' @injectable() class BuildAgent implements IBuildAgent { - public get agentName(): string { - return "GitHub Actions"; + return 'GitHub Actions' } public find(toolName: string, versionSpec: string, arch?: string): string { - return toolCache.find(toolName, versionSpec, arch); + return toolCache.find(toolName, versionSpec, arch) } - public cacheDir(sourceDir: string, tool: string, version: string, arch?: string): Promise { - return toolCache.cacheDir(sourceDir, tool, version, arch); + public cacheDir( + sourceDir: string, + tool: string, + version: string, + arch?: string + ): Promise { + return toolCache.cacheDir(sourceDir, tool, version, arch) } public async createTempDir(): Promise { - const IS_WINDOWS = process.platform === "win32"; + const IS_WINDOWS = process.platform === 'win32' - let tempDirectory: string = process.env.RUNNER_TEMP || ""; + let tempDirectory: string = process.env.RUNNER_TEMP || '' if (!tempDirectory) { - let baseLocation: string; + let baseLocation: string if (IS_WINDOWS) { // On Windows use the USERPROFILE env variable - baseLocation = process.env.USERPROFILE || "C:\\"; + baseLocation = process.env.USERPROFILE || 'C:\\' } else { - if (process.platform === "darwin") { - baseLocation = "/Users"; + if (process.platform === 'darwin') { + baseLocation = '/Users' } else { - baseLocation = "/home"; + baseLocation = '/home' } } - tempDirectory = path.join(baseLocation, "actions", "temp"); + tempDirectory = path.join(baseLocation, 'actions', 'temp') } - const dest = path.join(tempDirectory, uuidv4()); - await io.mkdirP(dest); - return dest; + const dest = path.join(tempDirectory, uuidv4()) + await io.mkdirP(dest) + return dest } public debug(message: string): void { - core.debug(message); + core.debug(message) } public setFailed(message: string, done?: boolean): void { - core.setFailed(message); + core.setFailed(message) } public setSucceeded(message: string, done?: boolean): void { @@ -64,108 +68,103 @@ class BuildAgent implements IBuildAgent { } public exportVariable(name: string, val: string): void { - core.exportVariable(name, val); + core.exportVariable(name, val) } public getVariable(name: string): string { - return process.env[name]; + return process.env[name] } public addPath(inputPath: string): void { - core.addPath(inputPath); + core.addPath(inputPath) } public which(tool: string, check?: boolean): Promise { - return io.which(tool, check); + return io.which(tool, check) } public async exec(exec: string, args: string[]): Promise { - const dotnetPath = await io.which(exec, true); - let resultCode = 0; - let stdout = ""; - let stderr = ""; - resultCode = await exe.exec( - `"${dotnetPath}"`, - args, - { - listeners: { - stderr: (data: Buffer) => { - stderr += data.toString(); - }, - stdout: (data: Buffer) => { - stdout += data.toString(); - }, + const dotnetPath = await io.which(exec, true) + let resultCode = 0 + let stdout = '' + let stderr = '' + resultCode = await exe.exec(`"${dotnetPath}"`, args, { + listeners: { + stderr: (data: Buffer) => { + stderr += data.toString() }, - }); + stdout: (data: Buffer) => { + stdout += data.toString() + } + } + }) return { code: resultCode, error: null, stderr, - stdout, - }; + stdout + } } public getSourceDir(): string { - return this.getVariable("GITHUB_WORKSPACE"); + return this.getVariable('GITHUB_WORKSPACE') } public setOutput(name: string, value: string): void { - core.setOutput(name, value); + core.setOutput(name, value) } public getInput(input: string, required?: boolean): string { - return core.getInput(input, { required } as core.InputOptions); + return core.getInput(input, {required} as core.InputOptions) } public getListInput(input: string, required?: boolean): string[] { return core - .getInput(input, { required } as core.InputOptions) - .split("\n") - .filter(x => x !== ""); + .getInput(input, {required} as core.InputOptions) + .split('\n') + .filter(x => x !== '') } public getBooleanInput(input: string, required?: boolean): boolean { - const inputValue = this.getInput(input, required); - return (inputValue || "false").toLowerCase() === "true"; + const inputValue = this.getInput(input, required) + return (inputValue || 'false').toLowerCase() === 'true' } public isValidInputFile(input: string, file: string): boolean { - return this.filePathSupplied(input) && this.fileExists(file); + return this.filePathSupplied(input) && this.fileExists(file) } public filePathSupplied(file: string): boolean { - const pathValue = path.resolve(this.getInput(file) || ""); - const repoRoot = this.getSourceDir(); - return pathValue !== repoRoot; + const pathValue = path.resolve(this.getInput(file) || '') + const repoRoot = this.getSourceDir() + return pathValue !== repoRoot } public fileExists(file: string): boolean { - return this._exist(file) && this._stats(file).isFile(); + return this._exist(file) && this._stats(file).isFile() } public directoryExists(file: string): boolean { - return this._exist(file) && this._stats(file).isDirectory(); + return this._exist(file) && this._stats(file).isDirectory() } private _exist(file: string): boolean { - let exist = false; + let exist = false try { - exist = !!(file && fs.statSync(file) != null); + exist = !!(file && fs.statSync(file) != null) } catch (err) { - if (err && err.code === "ENOENT") { - exist = false; + if (err && err.code === 'ENOENT') { + exist = false } else { - throw err; + throw err } } - return exist; + return exist } private _stats(file: string): fs.Stats { - return fs.statSync(file); + return fs.statSync(file) } - } +} -export { - BuildAgent, -}; +export {BuildAgent} diff --git a/src/agent/mock/build-agent.ts b/src/agent/mock/build-agent.ts index f33c5da..4da94d7 100644 --- a/src/agent/mock/build-agent.ts +++ b/src/agent/mock/build-agent.ts @@ -1,109 +1,111 @@ -import { injectable } from "inversify"; +import {injectable} from 'inversify' -import { IBuildAgent, IExecResult } from "../../core/models"; +import {IBuildAgent, IExecResult} from '../../core/models' @injectable() class BuildAgent implements IBuildAgent { - public get agentName(): string { - console.log("getAgentName"); - return "Mock"; + console.log('getAgentName') + return 'Mock' } public find(toolName: string, versionSpec: string, arch?: string): string { - console.log("find"); - return "find"; + console.log('find') + return 'find' } - public cacheDir(sourceDir: string, tool: string, version: string, arch?: string): Promise { - console.log("cacheDir"); - return Promise.resolve("cacheDir"); + public cacheDir( + sourceDir: string, + tool: string, + version: string, + arch?: string + ): Promise { + console.log('cacheDir') + return Promise.resolve('cacheDir') } public createTempDir(): Promise { - console.log("createTempDir"); - return Promise.resolve("createTempDir"); + console.log('createTempDir') + return Promise.resolve('createTempDir') } public debug(message: string): void { - console.log("debug"); + console.log('debug') } public setFailed(message: string, done?: boolean): void { - console.log("setFailed"); + console.log('setFailed') } public setSucceeded(message: string, done?: boolean): void { - console.log("setSucceeded"); + console.log('setSucceeded') } public exportVariable(name: string, val: string): void { - console.log("exportVariable"); + console.log('exportVariable') } public getVariable(name: string): string { - console.log("getVariable"); - return "getVariable"; + console.log('getVariable') + return 'getVariable' } public addPath(inputPath: string): void { - console.log("addPath"); + console.log('addPath') } public which(tool: string, check?: boolean): Promise { - console.log("which"); - return Promise.resolve("which"); + console.log('which') + return Promise.resolve('which') } public exec(exec: string, args: string[]): Promise { return Promise.resolve({ code: 0, error: null, - stderr: "result.stderr", - stdout: "result.stdout", - }); + stderr: 'result.stderr', + stdout: 'result.stdout' + }) } public getSourceDir(): string { - console.log("getSourceDir"); - return "getSourceDir"; + console.log('getSourceDir') + return 'getSourceDir' } public setOutput(name: string, value: string): void { - console.log("setOutput"); + console.log('setOutput') } public getInput(input: string, required?: boolean): string { - console.log("getInput"); - return "getInput"; + console.log('getInput') + return 'getInput' } public getListInput(input: string, required?: boolean): string[] { - console.log("getListInput"); - return ["getInput"]; + console.log('getListInput') + return ['getInput'] } public getBooleanInput(input: string, required?: boolean): boolean { - console.log("getBooleanInput"); - return false; + console.log('getBooleanInput') + return false } public isValidInputFile(input: string, file: string) { - console.log("isValidInputFile"); - return false; + console.log('isValidInputFile') + return false } public fileExists(file: string) { - console.log("fileExists"); - return false; + console.log('fileExists') + return false } public directoryExists(file: string) { - console.log("directoryExists"); - return false; + console.log('directoryExists') + return false } } -export { - BuildAgent, -}; +export {BuildAgent} diff --git a/src/core/dotnet-tool.ts b/src/core/dotnet-tool.ts index c7b4175..316ff01 100644 --- a/src/core/dotnet-tool.ts +++ b/src/core/dotnet-tool.ts @@ -1,68 +1,76 @@ -import * as fs from "fs"; -import * as os from "os"; -import * as path from "path"; -import * as http from "typed-rest-client/HttpClient"; +import * as fs from 'fs' +import * as os from 'os' +import * as path from 'path' +import * as http from 'typed-rest-client/HttpClient' -import { inject, injectable } from "inversify"; -import { TYPES, IExecResult, IBuildAgent } from "./models"; -import { IVersionManager } from "./versionManager"; +import {inject, injectable} from 'inversify' +import {TYPES, IExecResult, IBuildAgent} from './models' +import {IVersionManager} from './versionManager' export interface IDotnetTool { - disableTelemetry(): void; - toolInstall(toolName: string, versionSpec: string, checkLatest: boolean, includePre: boolean): Promise; + disableTelemetry(): void + toolInstall( + toolName: string, + versionSpec: string, + checkLatest: boolean, + includePre: boolean + ): Promise } @injectable() export class DotnetTool implements IDotnetTool { - - protected buildAgent: IBuildAgent; - protected versionManager: IVersionManager; - private httpClient: http.HttpClient; + protected buildAgent: IBuildAgent + protected versionManager: IVersionManager + private httpClient: http.HttpClient constructor( @inject(TYPES.IBuildAgent) buildAgent: IBuildAgent, - @inject(TYPES.IVersionManager) versionManager: IVersionManager, + @inject(TYPES.IVersionManager) versionManager: IVersionManager ) { - this.buildAgent = buildAgent; - this.versionManager = versionManager; - this.httpClient = new http.HttpClient("dotnet"); + this.buildAgent = buildAgent + this.versionManager = versionManager + this.httpClient = new http.HttpClient('dotnet') } public disableTelemetry(): void { - this.buildAgent.exportVariable("DOTNET_CLI_TELEMETRY_OPTOUT", "1"); + this.buildAgent.exportVariable('DOTNET_CLI_TELEMETRY_OPTOUT', '1') } public execute(cmd: string, args: string[]): Promise { - console.log(`Command: ${cmd} ${args.join(' ')}`); - return this.buildAgent.exec(cmd, args); + console.log(`Command: ${cmd} ${args.join(' ')}`) + return this.buildAgent.exec(cmd, args) } - public async toolInstall(toolName: string, versionSpec: string, checkLatest: boolean, includePre: boolean) - : Promise { - console.log(""); - console.log("--------------------------"); - console.log(`Installing ${toolName} version ` + versionSpec); - console.log("--------------------------"); + public async toolInstall( + toolName: string, + versionSpec: string, + checkLatest: boolean, + includePre: boolean + ): Promise { + console.log('') + console.log('--------------------------') + console.log(`Installing ${toolName} version ` + versionSpec) + console.log('--------------------------') if (this.versionManager.isExplicitVersion(versionSpec)) { - checkLatest = false; // check latest doesn't make sense when explicit version + checkLatest = false // check latest doesn't make sense when explicit version } - let toolPath: string; + let toolPath: string if (!checkLatest) { // // Let's try and resolve the version spec locally first // - toolPath = this.buildAgent.find(toolName, versionSpec); + toolPath = this.buildAgent.find(toolName, versionSpec) } if (!toolPath) { - let version: string; + let version: string if (this.versionManager.isExplicitVersion(versionSpec)) { // // Explicit version was specified. No need to query for list of versions. // - version = versionSpec; + version = versionSpec } else { // // Let's query and resolve the latest version for the versionSpec. @@ -70,21 +78,27 @@ export class DotnetTool implements IDotnetTool { // If your tool doesn't offer a mechanism to query, // then it can only support exact version inputs. // - version = await this.queryLatestMatch(toolName, versionSpec, includePre); + version = await this.queryLatestMatch( + toolName, + versionSpec, + includePre + ) if (!version) { - throw new Error(`Unable to find ${toolName} version '${versionSpec}'.`); + throw new Error( + `Unable to find ${toolName} version '${versionSpec}'.` + ) } // // Check the cache for the resolved version. // - toolPath = this.buildAgent.find(toolName, version); + toolPath = this.buildAgent.find(toolName, version) } if (!toolPath) { // // Download, extract, cache // - toolPath = await this.acquireTool(toolName, version); + toolPath = await this.acquireTool(toolName, version) } } @@ -92,62 +106,79 @@ export class DotnetTool implements IDotnetTool { // Prepend the tools path. This prepends the PATH for the current process and // instructs the agent to prepend for each task that follows. // - this.buildAgent.debug(`toolPath: ${toolPath}`); + this.buildAgent.debug(`toolPath: ${toolPath}`) - if (os.platform() !== "win32" && !this.buildAgent.getVariable("DOTNET_ROOT")) { - let dotnetPath = await this.buildAgent.which("dotnet"); - dotnetPath = fs.readlinkSync(dotnetPath) || dotnetPath; - const dotnetRoot = path.dirname(dotnetPath); - this.buildAgent.exportVariable("DOTNET_ROOT", dotnetRoot); + if ( + os.platform() !== 'win32' && + !this.buildAgent.getVariable('DOTNET_ROOT') + ) { + let dotnetPath = await this.buildAgent.which('dotnet') + dotnetPath = fs.readlinkSync(dotnetPath) || dotnetPath + const dotnetRoot = path.dirname(dotnetPath) + this.buildAgent.exportVariable('DOTNET_ROOT', dotnetRoot) } - this.buildAgent.addPath(toolPath); + this.buildAgent.addPath(toolPath) - return toolPath; + return toolPath } - private async queryLatestMatch(toolName: string, versionSpec: string, includePrerelease: boolean): Promise { - this.buildAgent.debug(`querying tool versions for ${toolName}${versionSpec ? `@${versionSpec}` : ""} ${includePrerelease ? "including pre-releases" : ""}`); + private async queryLatestMatch( + toolName: string, + versionSpec: string, + includePrerelease: boolean + ): Promise { + this.buildAgent.debug( + `querying tool versions for ${toolName}${ + versionSpec ? `@${versionSpec}` : '' + } ${includePrerelease ? 'including pre-releases' : ''}` + ) - const downloadPath = `https://api-v2v3search-0.nuget.org/query?q=${encodeURIComponent(toolName.toLowerCase())}&prerelease=${includePrerelease ? "true" : "false"}&semVerLevel=2.0.0`; - const res = await this.httpClient.get(downloadPath); + const downloadPath = `https://api-v2v3search-0.nuget.org/query?q=${encodeURIComponent( + toolName.toLowerCase() + )}&prerelease=${includePrerelease ? 'true' : 'false'}&semVerLevel=2.0.0` + const res = await this.httpClient.get(downloadPath) if (!res || res.message.statusCode !== 200) { - return null; + return null } - const body: string = await res.readBody(); - const data = JSON.parse(body).data; + const body: string = await res.readBody() + const data = JSON.parse(body).data - const versions = (data[0].versions as { version: string }[]).map((x) => x.version); + const versions = (data[0].versions as {version: string}[]).map( + x => x.version + ) if (!versions || !versions.length) { - return null; + return null } - this.buildAgent.debug(`got versions: ${versions.join(", ")}`); + this.buildAgent.debug(`got versions: ${versions.join(', ')}`) - return this.versionManager.evaluateVersions(versions, versionSpec); + return this.versionManager.evaluateVersions(versions, versionSpec) } - private async acquireTool(toolName: string, version: string): Promise { - - const tempDirectory = await this.buildAgent.createTempDir(); - let args = ["tool", "install", toolName, "--tool-path", tempDirectory]; + private async acquireTool( + toolName: string, + version: string + ): Promise { + const tempDirectory = await this.buildAgent.createTempDir() + let args = ['tool', 'install', toolName, '--tool-path', tempDirectory] if (version) { - version = this.versionManager.cleanVersion(version); - args = args.concat(["--version", version]); + version = this.versionManager.cleanVersion(version) + args = args.concat(['--version', version]) } - const result = await this.execute("dotnet", args); - const status = result.code === 0 ? "success" : "failure"; - const message = result.code === 0 ? result.stdout : result.stderr; + const result = await this.execute('dotnet', args) + const status = result.code === 0 ? 'success' : 'failure' + const message = result.code === 0 ? result.stdout : result.stderr - this.buildAgent.debug(`tool install result: ${status} ${message}`); + this.buildAgent.debug(`tool install result: ${status} ${message}`) if (result.code) { - throw new Error("Error installing tool"); + throw new Error('Error installing tool') } - return await this.buildAgent.cacheDir(tempDirectory, toolName, version); + return await this.buildAgent.cacheDir(tempDirectory, toolName, version) } } diff --git a/src/core/ioc.ts b/src/core/ioc.ts index 708316c..38634ee 100644 --- a/src/core/ioc.ts +++ b/src/core/ioc.ts @@ -1,11 +1,11 @@ -import { Container } from "inversify"; -import { IVersionManager, VersionManager } from "./versionManager"; -import { TYPES, IBuildAgent } from "./models"; -import { BuildAgent } from "../agent/mock/build-agent"; +import {Container} from 'inversify' +import {IVersionManager, VersionManager} from './versionManager' +import {TYPES, IBuildAgent} from './models' +import {BuildAgent} from '../agent/mock/build-agent' -const container = new Container(); +const container = new Container() -container.bind(TYPES.IVersionManager).to(VersionManager); -container.bind(TYPES.IBuildAgent).to(BuildAgent); +container.bind(TYPES.IVersionManager).to(VersionManager) +container.bind(TYPES.IBuildAgent).to(BuildAgent) -export default container; +export default container diff --git a/src/core/models.ts b/src/core/models.ts index 3822206..a7eac10 100644 --- a/src/core/models.ts +++ b/src/core/models.ts @@ -1,49 +1,54 @@ export const TYPES = { - IBuildAgent: Symbol.for("BuildAgent"), - IDotnetTool: Symbol.for("DotnetTool"), - IGitVersionTool: Symbol.for("GitVersionTool"), - IGitReleaseManagerTool: Symbol.for("GitReleaseManagerTool"), - IVersionManager: Symbol.for("VersionManager"), -}; + IBuildAgent: Symbol.for('BuildAgent'), + IDotnetTool: Symbol.for('DotnetTool'), + IGitVersionTool: Symbol.for('GitVersionTool'), + IGitReleaseManagerTool: Symbol.for('GitReleaseManagerTool'), + IVersionManager: Symbol.for('VersionManager') +} export enum SetupFields { - includePrerelease = "includePrerelease", - versionSpec = "versionSpec", -}; + includePrerelease = 'includePrerelease', + versionSpec = 'versionSpec' +} export interface ISetupSettings { - [SetupFields.versionSpec]: string; - [SetupFields.includePrerelease]: boolean; + [SetupFields.versionSpec]: string + [SetupFields.includePrerelease]: boolean } export interface IExecResult { - stdout: string; - stderr: string; - code: number; - error: Error; + stdout: string + stderr: string + code: number + error: Error } export interface IBuildAgent { - agentName: string; - find(toolName: string, versionSpec: string, arch?: string): string; - cacheDir(sourceDir: string, tool: string, version: string, arch?: string): Promise; - createTempDir(): Promise; - debug(message: string): void; - setFailed(message: string, done?: boolean): void; - setSucceeded(message: string, done?: boolean): void; - exportVariable(name: string, val: string): void; - getVariable(name: string): string; - addPath(inputPath: string): void; - which(tool: string, check?: boolean): Promise; - exec(exec: string, args: string[]): Promise; + agentName: string + find(toolName: string, versionSpec: string, arch?: string): string + cacheDir( + sourceDir: string, + tool: string, + version: string, + arch?: string + ): Promise + createTempDir(): Promise + debug(message: string): void + setFailed(message: string, done?: boolean): void + setSucceeded(message: string, done?: boolean): void + exportVariable(name: string, val: string): void + getVariable(name: string): string + addPath(inputPath: string): void + which(tool: string, check?: boolean): Promise + exec(exec: string, args: string[]): Promise - getSourceDir(): string; - isValidInputFile(input: string, file: string): boolean; - fileExists(file: string): boolean; - directoryExists(file: string): boolean; + getSourceDir(): string + isValidInputFile(input: string, file: string): boolean + fileExists(file: string): boolean + directoryExists(file: string): boolean - setOutput(name: string, value: string): void; - getInput(input: string, required?: boolean): string; - getListInput(input: string, required?: boolean): string[]; - getBooleanInput(input: string, required?: boolean): boolean; -} \ No newline at end of file + setOutput(name: string, value: string): void + getInput(input: string, required?: boolean): string + getListInput(input: string, required?: boolean): string[] + getBooleanInput(input: string, required?: boolean): boolean +} diff --git a/src/core/settings.ts b/src/core/settings.ts index 9a085fa..a9760cf 100644 --- a/src/core/settings.ts +++ b/src/core/settings.ts @@ -1,14 +1,15 @@ -import { IBuildAgent, SetupFields, ISetupSettings } from "./models"; +import {IBuildAgent, SetupFields, ISetupSettings} from './models' export class Settings { - public static getSetupSettings(buildAgent: IBuildAgent): ISetupSettings { - const versionSpec = buildAgent.getInput(SetupFields.versionSpec); - const includePrerelease = buildAgent.getBooleanInput(SetupFields.includePrerelease); + const versionSpec = buildAgent.getInput(SetupFields.versionSpec) + const includePrerelease = buildAgent.getBooleanInput( + SetupFields.includePrerelease + ) return { versionSpec, includePrerelease } } -} \ No newline at end of file +} diff --git a/src/core/versionManager.ts b/src/core/versionManager.ts index 7df71fd..1c171d7 100644 --- a/src/core/versionManager.ts +++ b/src/core/versionManager.ts @@ -1,59 +1,56 @@ -import cmp from "semver-compare"; -import * as semver from "semver"; -import { injectable, inject } from "inversify"; +import cmp from 'semver-compare' +import * as semver from 'semver' +import {injectable, inject} from 'inversify' -import { IBuildAgent, TYPES } from "./models"; +import {IBuildAgent, TYPES} from './models' export interface IVersionManager { - isExplicitVersion(versionSpec: string): boolean; - evaluateVersions(versions: string[], versionSpec: string): string; - cleanVersion(version: string): string; + isExplicitVersion(versionSpec: string): boolean + evaluateVersions(versions: string[], versionSpec: string): string + cleanVersion(version: string): string } @injectable() export class VersionManager implements IVersionManager { - - private buildAgent: IBuildAgent; - constructor( - @inject(TYPES.IBuildAgent) buildAgent: IBuildAgent, - ) { - this.buildAgent = buildAgent; + private buildAgent: IBuildAgent + constructor(@inject(TYPES.IBuildAgent) buildAgent: IBuildAgent) { + this.buildAgent = buildAgent } public isExplicitVersion(versionSpec: string): boolean { - const c = semver.clean(versionSpec); - this.buildAgent.debug("isExplicit: " + c); + const c = semver.clean(versionSpec) + this.buildAgent.debug('isExplicit: ' + c) - const valid = semver.valid(c) != null; - this.buildAgent.debug("explicit? " + valid); + const valid = semver.valid(c) != null + this.buildAgent.debug('explicit? ' + valid) - return valid; + return valid } public evaluateVersions(versions: string[], versionSpec: string): string { - let version: string; - this.buildAgent.debug("evaluating " + versions.length + " versions"); - versions = versions.sort(cmp); + let version: string + this.buildAgent.debug('evaluating ' + versions.length + ' versions') + versions = versions.sort(cmp) for (let i = versions.length - 1; i >= 0; i--) { - const potential: string = versions[i]; - const satisfied: boolean = semver.satisfies(potential, versionSpec); - if (satisfied) { - version = potential; - break; + const potential: string = versions[i] + const satisfied: boolean = semver.satisfies(potential, versionSpec) + if (satisfied) { + version = potential + break + } } - } if (version) { - this.buildAgent.debug("matched: " + version); - } else { - this.buildAgent.debug("match not found"); - } + this.buildAgent.debug('matched: ' + version) + } else { + this.buildAgent.debug('match not found') + } - return version; + return version } public cleanVersion(version: string): string { - this.buildAgent.debug("cleaning: " + version); - return semver.clean(version); + this.buildAgent.debug('cleaning: ' + version) + return semver.clean(version) } -} \ No newline at end of file +} diff --git a/src/tasks/gitreleasemanager/addasset.ts b/src/tasks/gitreleasemanager/addasset.ts index e4a1272..7d2fcde 100644 --- a/src/tasks/gitreleasemanager/addasset.ts +++ b/src/tasks/gitreleasemanager/addasset.ts @@ -1,4 +1,4 @@ -import "reflect-metadata"; -import { addAsset } from "./main"; +import 'reflect-metadata' +import {addAsset} from './main' -addAsset(); +addAsset() diff --git a/src/tasks/gitreleasemanager/close.ts b/src/tasks/gitreleasemanager/close.ts index 386a000..312e35f 100644 --- a/src/tasks/gitreleasemanager/close.ts +++ b/src/tasks/gitreleasemanager/close.ts @@ -1,4 +1,4 @@ -import "reflect-metadata"; -import { close } from "./main"; +import 'reflect-metadata' +import {close} from './main' -close(); +close() diff --git a/src/tasks/gitreleasemanager/create.ts b/src/tasks/gitreleasemanager/create.ts index b231804..c1bae25 100644 --- a/src/tasks/gitreleasemanager/create.ts +++ b/src/tasks/gitreleasemanager/create.ts @@ -1,4 +1,4 @@ -import "reflect-metadata"; -import { create } from "./main"; +import 'reflect-metadata' +import {create} from './main' -create(); +create() diff --git a/src/tasks/gitreleasemanager/discard.ts b/src/tasks/gitreleasemanager/discard.ts index 4e52758..6a6bf9f 100644 --- a/src/tasks/gitreleasemanager/discard.ts +++ b/src/tasks/gitreleasemanager/discard.ts @@ -1,4 +1,4 @@ -import "reflect-metadata"; -import { discard } from "./main"; +import 'reflect-metadata' +import {discard} from './main' -discard(); +discard() diff --git a/src/tasks/gitreleasemanager/main.ts b/src/tasks/gitreleasemanager/main.ts index c8a5665..b2959bb 100644 --- a/src/tasks/gitreleasemanager/main.ts +++ b/src/tasks/gitreleasemanager/main.ts @@ -1,116 +1,140 @@ -import { IBuildAgent, TYPES, SetupFields } from "../../core/models"; -import { IGitReleaseManagerTool, GitReleaseManagerTool } from "../../tools/gitreleasemanager/tool"; -import { Settings as CommonSettings } from "../../core/settings"; -import { Settings } from "../../tools/gitreleasemanager/settings"; +import {IBuildAgent, TYPES, SetupFields} from '../../core/models' +import { + IGitReleaseManagerTool, + GitReleaseManagerTool +} from '../../tools/gitreleasemanager/tool' +import {Settings as CommonSettings} from '../../core/settings' +import {Settings} from '../../tools/gitreleasemanager/settings' -import container from "../../core/ioc"; +import container from '../../core/ioc' -container.bind(TYPES.IGitReleaseManagerTool).to(GitReleaseManagerTool); +container + .bind(TYPES.IGitReleaseManagerTool) + .to(GitReleaseManagerTool) -const gitReleaseManagerTool = container.get(TYPES.IGitReleaseManagerTool); -const buildAgent = container.get(TYPES.IBuildAgent); +const gitReleaseManagerTool = container.get( + TYPES.IGitReleaseManagerTool +) +const buildAgent = container.get(TYPES.IBuildAgent) export async function setup() { try { + gitReleaseManagerTool.disableTelemetry() - gitReleaseManagerTool.disableTelemetry(); + const settings = CommonSettings.getSetupSettings(buildAgent) - const settings = CommonSettings.getSetupSettings(buildAgent); + await gitReleaseManagerTool.install( + settings.versionSpec, + settings.includePrerelease + ) - await gitReleaseManagerTool.install(settings.versionSpec, settings.includePrerelease); - - buildAgent.setSucceeded("GitVersionManager installed successfully", true); + buildAgent.setSucceeded( + 'GitVersionManager installed successfully', + true + ) } catch (error) { - buildAgent.setFailed(error.message, true); + buildAgent.setFailed(error.message, true) } } export async function create() { try { + gitReleaseManagerTool.disableTelemetry() - gitReleaseManagerTool.disableTelemetry(); + const settings = Settings.getCreateSettings(buildAgent) - const settings = Settings.getCreateSettings(buildAgent); + await gitReleaseManagerTool.create(settings) - await gitReleaseManagerTool.create(settings); - - buildAgent.setSucceeded("GitVersionManager created release successfully", true); + buildAgent.setSucceeded( + 'GitVersionManager created release successfully', + true + ) } catch (error) { - buildAgent.setFailed(error.message, true); + buildAgent.setFailed(error.message, true) } } export async function discard() { try { + gitReleaseManagerTool.disableTelemetry() - gitReleaseManagerTool.disableTelemetry(); + const settings = Settings.getDiscardSettings(buildAgent) - const settings = Settings.getDiscardSettings(buildAgent); + await gitReleaseManagerTool.discard(settings) - await gitReleaseManagerTool.discard(settings); - - buildAgent.setSucceeded("GitVersionManager discarded release successfully", true); + buildAgent.setSucceeded( + 'GitVersionManager discarded release successfully', + true + ) } catch (error) { - buildAgent.setFailed(error.message, true); + buildAgent.setFailed(error.message, true) } } export async function close() { try { + gitReleaseManagerTool.disableTelemetry() - gitReleaseManagerTool.disableTelemetry(); + const settings = Settings.getCloseSettings(buildAgent) - const settings = Settings.getCloseSettings(buildAgent); + await gitReleaseManagerTool.close(settings) - await gitReleaseManagerTool.close(settings); - - buildAgent.setSucceeded("GitVersionManager closed release successfully", true); + buildAgent.setSucceeded( + 'GitVersionManager closed release successfully', + true + ) } catch (error) { - buildAgent.setFailed(error.message, true); + buildAgent.setFailed(error.message, true) } } export async function open() { try { + gitReleaseManagerTool.disableTelemetry() - gitReleaseManagerTool.disableTelemetry(); + const settings = Settings.getOpenSettings(buildAgent) - const settings = Settings.getOpenSettings(buildAgent); + await gitReleaseManagerTool.open(settings) - await gitReleaseManagerTool.open(settings); - - buildAgent.setSucceeded("GitVersionManager opened release successfully", true); + buildAgent.setSucceeded( + 'GitVersionManager opened release successfully', + true + ) } catch (error) { - buildAgent.setFailed(error.message, true); + buildAgent.setFailed(error.message, true) } } export async function publish() { try { + gitReleaseManagerTool.disableTelemetry() - gitReleaseManagerTool.disableTelemetry(); + const settings = Settings.getPublishSettings(buildAgent) - const settings = Settings.getPublishSettings(buildAgent); + await gitReleaseManagerTool.publish(settings) - await gitReleaseManagerTool.publish(settings); - - buildAgent.setSucceeded("GitVersionManager published release successfully", true); + buildAgent.setSucceeded( + 'GitVersionManager published release successfully', + true + ) } catch (error) { - buildAgent.setFailed(error.message, true); + buildAgent.setFailed(error.message, true) } } export async function addAsset() { try { + gitReleaseManagerTool.disableTelemetry() - gitReleaseManagerTool.disableTelemetry(); + const settings = Settings.getAddAssetSettings(buildAgent) - const settings = Settings.getAddAssetSettings(buildAgent); + await gitReleaseManagerTool.addAsset(settings) - await gitReleaseManagerTool.addAsset(settings); - - buildAgent.setSucceeded("GitVersionManager added assets to release successfully", true); + buildAgent.setSucceeded( + 'GitVersionManager added assets to release successfully', + true + ) } catch (error) { - buildAgent.setFailed(error.message, true); + buildAgent.setFailed(error.message, true) } -} \ No newline at end of file +} diff --git a/src/tasks/gitreleasemanager/open.ts b/src/tasks/gitreleasemanager/open.ts index 46e711d..4e056a6 100644 --- a/src/tasks/gitreleasemanager/open.ts +++ b/src/tasks/gitreleasemanager/open.ts @@ -1,4 +1,4 @@ -import "reflect-metadata"; -import { open } from "./main"; +import 'reflect-metadata' +import {open} from './main' -open(); +open() diff --git a/src/tasks/gitreleasemanager/publish.ts b/src/tasks/gitreleasemanager/publish.ts index 04be0b9..91c80c4 100644 --- a/src/tasks/gitreleasemanager/publish.ts +++ b/src/tasks/gitreleasemanager/publish.ts @@ -1,4 +1,4 @@ -import "reflect-metadata"; -import { publish } from "./main"; +import 'reflect-metadata' +import {publish} from './main' -publish(); +publish() diff --git a/src/tasks/gitreleasemanager/setup.ts b/src/tasks/gitreleasemanager/setup.ts index 43f8cf3..f3e406b 100644 --- a/src/tasks/gitreleasemanager/setup.ts +++ b/src/tasks/gitreleasemanager/setup.ts @@ -1,4 +1,4 @@ -import "reflect-metadata"; -import { setup } from "./main"; +import 'reflect-metadata' +import {setup} from './main' -setup(); +setup() diff --git a/src/tasks/gitversion/execute.ts b/src/tasks/gitversion/execute.ts index c520fff..a8f400e 100644 --- a/src/tasks/gitversion/execute.ts +++ b/src/tasks/gitversion/execute.ts @@ -1,4 +1,4 @@ -import "reflect-metadata"; -import { run } from "./main"; +import 'reflect-metadata' +import {run} from './main' -run(); +run() diff --git a/src/tasks/gitversion/main.ts b/src/tasks/gitversion/main.ts index d7834bc..096e129 100644 --- a/src/tasks/gitversion/main.ts +++ b/src/tasks/gitversion/main.ts @@ -1,50 +1,55 @@ -import { IBuildAgent, TYPES, SetupFields } from "../../core/models"; -import { Settings as CommonSettings } from "../../core/settings"; -import { Settings } from "../../tools/gitversion/settings"; -import { IGitVersionTool, GitVersionTool } from "../../tools/gitversion/tool"; -import { GitVersionSettings, GitVersionOutput } from "../../tools/gitversion/models"; +import {IBuildAgent, TYPES, SetupFields} from '../../core/models' +import {Settings as CommonSettings} from '../../core/settings' +import {Settings} from '../../tools/gitversion/settings' +import {IGitVersionTool, GitVersionTool} from '../../tools/gitversion/tool' +import { + GitVersionSettings, + GitVersionOutput +} from '../../tools/gitversion/models' -import container from "../../core/ioc"; +import container from '../../core/ioc' -container.bind(TYPES.IGitVersionTool).to(GitVersionTool); +container.bind(TYPES.IGitVersionTool).to(GitVersionTool) -const gitVersionTool = container.get(TYPES.IGitVersionTool); -const buildAgent = container.get(TYPES.IBuildAgent); +const gitVersionTool = container.get(TYPES.IGitVersionTool) +const buildAgent = container.get(TYPES.IBuildAgent) export async function setup() { try { + gitVersionTool.disableTelemetry() - gitVersionTool.disableTelemetry(); + const settings = CommonSettings.getSetupSettings(buildAgent) - const settings = CommonSettings.getSetupSettings(buildAgent); + await gitVersionTool.install( + settings.versionSpec, + settings.includePrerelease + ) - await gitVersionTool.install(settings.versionSpec, settings.includePrerelease); - - buildAgent.setSucceeded("GitVersion installed successfully", true); + buildAgent.setSucceeded('GitVersion installed successfully', true) } catch (error) { - buildAgent.setFailed(error.message, true); + buildAgent.setFailed(error.message, true) } } export async function run() { try { + gitVersionTool.disableTelemetry() - gitVersionTool.disableTelemetry(); + const settings: GitVersionSettings = Settings.getGitVersionSettings( + buildAgent + ) - const settings: GitVersionSettings = Settings.getGitVersionSettings(buildAgent); + const result = await gitVersionTool.run(settings) - const result = await gitVersionTool.run(settings); - - const gitversion = JSON.parse(result.stdout) as GitVersionOutput; - gitVersionTool.writeGitVersionToAgent(gitversion); + const gitversion = JSON.parse(result.stdout) as GitVersionOutput + gitVersionTool.writeGitVersionToAgent(gitversion) if (result.code === 0) { - buildAgent.setSucceeded("GitVersion executed successfully", true); + buildAgent.setSucceeded('GitVersion executed successfully', true) } else { - buildAgent.setFailed(result.error.message, true); + buildAgent.setFailed(result.error.message, true) } - } catch (error) { - buildAgent.setFailed(error, true); + buildAgent.setFailed(error, true) } -} \ No newline at end of file +} diff --git a/src/tasks/gitversion/setup.ts b/src/tasks/gitversion/setup.ts index 43f8cf3..f3e406b 100644 --- a/src/tasks/gitversion/setup.ts +++ b/src/tasks/gitversion/setup.ts @@ -1,4 +1,4 @@ -import "reflect-metadata"; -import { setup } from "./main"; +import 'reflect-metadata' +import {setup} from './main' -setup(); +setup() diff --git a/src/tools/gitreleasemanager/models.ts b/src/tools/gitreleasemanager/models.ts index 1994600..ed95246 100644 --- a/src/tools/gitreleasemanager/models.ts +++ b/src/tools/gitreleasemanager/models.ts @@ -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[] } diff --git a/src/tools/gitreleasemanager/settings.ts b/src/tools/gitreleasemanager/settings.ts index a4f0eeb..e3277ca 100644 --- a/src/tools/gitreleasemanager/settings.ts +++ b/src/tools/gitreleasemanager/settings.ts @@ -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 + } } } diff --git a/src/tools/gitreleasemanager/tool.ts b/src/tools/gitreleasemanager/tool.ts index c841089..95d9fab 100644 --- a/src/tools/gitreleasemanager/tool.ts +++ b/src/tools/gitreleasemanager/tool.ts @@ -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; - create(settings: GitReleaseManagerCreateSettings): Promise; - discard(settings: GitReleaseManagerDiscardSettings): Promise; - close(settings: GitReleaseManagerCloseSettings): Promise; - open(settings: GitReleaseManagerOpenSettings): Promise; - publish(settings: GitReleaseManagerPublishSettings): Promise; - addAsset(settings: GitReleaseManagerAddAssetSettings): Promise; + install(versionSpec: string, includePrerelease: boolean): Promise + create(settings: GitReleaseManagerCreateSettings): Promise + discard(settings: GitReleaseManagerDiscardSettings): Promise + close(settings: GitReleaseManagerCloseSettings): Promise + open(settings: GitReleaseManagerOpenSettings): Promise + publish(settings: GitReleaseManagerPublishSettings): Promise + addAsset(settings: GitReleaseManagerAddAssetSettings): Promise } @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 { - await this.toolInstall("GitReleaseManager.Tool", versionSpec, false, includePrerelease); + public async install( + versionSpec: string, + includePrerelease: boolean + ): Promise { + await this.toolInstall( + 'GitReleaseManager.Tool', + versionSpec, + false, + includePrerelease + ) } - public create(settings: GitReleaseManagerCreateSettings): Promise { - const args = this.getCreateArguments(settings); + public create( + settings: GitReleaseManagerCreateSettings + ): Promise { + const args = this.getCreateArguments(settings) - return this.execute("dotnet-gitreleasemanager", args); + return this.execute('dotnet-gitreleasemanager', args) } - public discard(settings: GitReleaseManagerDiscardSettings): Promise { - const args = this.getDiscardArguments(settings); + public discard( + settings: GitReleaseManagerDiscardSettings + ): Promise { + const args = this.getDiscardArguments(settings) - return this.execute("dotnet-gitreleasemanager", args); + return this.execute('dotnet-gitreleasemanager', args) } - public close(settings: GitReleaseManagerCloseSettings): Promise { - const args = this.getCloseArguments(settings); + public close( + settings: GitReleaseManagerCloseSettings + ): Promise { + const args = this.getCloseArguments(settings) - return this.execute("dotnet-gitreleasemanager", args); + return this.execute('dotnet-gitreleasemanager', args) } public open(settings: GitReleaseManagerOpenSettings): Promise { - 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 { - const args = this.getPublishArguments(settings); + public publish( + settings: GitReleaseManagerPublishSettings + ): Promise { + const args = this.getPublishArguments(settings) - return this.execute("dotnet-gitreleasemanager", args); + return this.execute('dotnet-gitreleasemanager', args) } - public addAsset(settings: GitReleaseManagerAddAssetSettings): Promise { - const args = this.getAddAssetArguments(settings); + public addAsset( + settings: GitReleaseManagerAddAssetSettings + ): Promise { + 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, '/') } } diff --git a/src/tools/gitversion/models.ts b/src/tools/gitversion/models.ts index 5527e22..93b3923 100644 --- a/src/tools/gitversion/models.ts +++ b/src/tools/gitversion/models.ts @@ -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 } diff --git a/src/tools/gitversion/settings.ts b/src/tools/gitversion/settings.ts index da0fb73..7514740 100644 --- a/src/tools/gitversion/settings.ts +++ b/src/tools/gitversion/settings.ts @@ -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 + } } -} \ No newline at end of file +} diff --git a/src/tools/gitversion/tool.ts b/src/tools/gitversion/tool.ts index 796e33e..a656ad3 100644 --- a/src/tools/gitversion/tool.ts +++ b/src/tools/gitversion/tool.ts @@ -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; - run(options: GitVersionSettings): Promise; - writeGitVersionToAgent(gitversion: GitVersionOutput): void; + install(versionSpec: string, includePrerelease: boolean): Promise + run(options: GitVersionSettings): Promise + 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 { - await this.toolInstall("GitVersion.Tool", versionSpec, false, includePrerelease); + public async install( + versionSpec: string, + includePrerelease: boolean + ): Promise { + await this.toolInstall( + 'GitVersion.Tool', + versionSpec, + false, + includePrerelease + ) } public run(options: GitVersionSettings): Promise { - 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) } } diff --git a/tslint.json b/tslint.json deleted file mode 100644 index 9e9f4f3..0000000 --- a/tslint.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "defaultSeverity": "error", - "extends": [ - "tslint:recommended" - ], - "jsRules": {}, - "rules": { - "max-classes-per-file":false, - "no-console":false, - "no-var-requires":false, - "object-literal-sort-keys":false - }, - "rulesDirectory": [] -} \ No newline at end of file