Merge pull request #332 from microsoft/users/stfrance/task-zip-upload

Add ability to upload a task zip.
This commit is contained in:
Stephen Franceschelli 2019-11-25 08:02:10 -05:00 коммит произвёл GitHub
Родитель b457fe3195 05dcf3d428
Коммит 4bfe4eb8b5
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: 4AEE18F83AFDEB23
7 изменённых файлов: 247 добавлений и 226 удалений

Просмотреть файл

@ -1,6 +1,4 @@
import { TfCommand } from "../../../lib/tfcommand";
import check = require("validator");
import common = require("../../../lib/common");
import fs = require("fs");
import path = require("path");

Просмотреть файл

@ -1,4 +1,3 @@
import { TfCommand, CoreArguments } from "../../../lib/tfcommand";
import args = require("../../../lib/arguments");
import buildBase = require("../default");
@ -26,7 +25,8 @@ export class BuildTaskBase<T> extends buildBase.BuildBase<TaskArguments, T> {
this.registerCommandArgument("all", "All Tasks?", "Get all build tasks.", args.BooleanArgument, "false");
this.registerCommandArgument("taskId", "Task ID", "Identifies a particular Build Task.", args.StringArgument);
this.registerCommandArgument("taskPath", "Task path", "Local path to a Build Task.", args.ExistingDirectoriesArgument);
this.registerCommandArgument("taskPath", "Task path", "Local path to a Build Task.", args.ExistingDirectoriesArgument, null);
this.registerCommandArgument("taskZipPath", "Task zip path", "Local path to an already zipped task", args.StringArgument, null);
this.registerCommandArgument("overwrite", "Overwrite?", "Overwrite existing Build Task.", args.BooleanArgument, "false");
this.registerCommandArgument("taskName", "Task Name", "Name of the Build Task.", args.StringArgument);

Просмотреть файл

@ -1,6 +1,4 @@
import { TfCommand } from "../../../lib/tfcommand";
import agentContracts = require("azure-devops-node-api/interfaces/TaskAgentInterfaces");
import args = require("../../../lib/arguments");
import tasksBase = require("./default");
import trace = require("../../../lib/trace");

Просмотреть файл

@ -1,6 +1,4 @@
import { TfCommand } from "../../../lib/tfcommand";
import agentContracts = require("azure-devops-node-api/interfaces/TaskAgentInterfaces");
import args = require("../../../lib/arguments");
import tasksBase = require("./default");
import trace = require("../../../lib/trace");

Просмотреть файл

@ -1,12 +1,12 @@
import { TfCommand } from "../../../lib/tfcommand";
import agentContracts = require("azure-devops-node-api/interfaces/TaskAgentInterfaces");
import archiver = require("archiver");
import args = require("../../../lib/arguments");
import fs = require("fs");
import path = require("path");
import tasksBase = require("./default");
import trace = require("../../../lib/trace");
import vm = require("../../../lib/jsonvalidate");
import { ITaskAgentApi } from "azure-devops-node-api/TaskAgentApi";
import zip = require("jszip");
export function getCommand(args: string[]): BuildTaskUpload {
return new BuildTaskUpload(args);
@ -14,45 +14,72 @@ export function getCommand(args: string[]): BuildTaskUpload {
var c_taskJsonFile: string = "task.json";
interface TaskJson {
id: string;
}
export class BuildTaskUpload extends tasksBase.BuildTaskBase<agentContracts.TaskDefinition> {
protected description = "Upload a Build Task.";
protected serverCommand = true;
protected getHelpArgs(): string[] {
return ["taskPath", "overwrite"];
return ["taskPath", "taskZipPath", "overwrite"];
}
public async exec(): Promise<agentContracts.TaskDefinition> {
return this.commandArgs.taskPath.val().then(taskPaths => {
let taskPath = taskPaths[0];
return this.commandArgs.overwrite.val().then<agentContracts.TaskDefinition>(overwrite => {
vm.exists(taskPath, "specified directory " + taskPath + " does not exist.");
//directory is good, check json
const taskPaths = await this.commandArgs.taskPath.val();
const taskZipPath = await this.commandArgs.taskZipPath.val();
const overwrite = await this.commandArgs.overwrite.val();
let tp = path.join(taskPath, c_taskJsonFile);
return vm.validate(tp, "no " + c_taskJsonFile + " in specified directory").then(async taskJson => {
let archive = archiver("zip");
archive.on("error", function(error) {
trace.debug("Archiving error: " + error.message);
error.message = "Archiving error: " + error.message;
throw error;
});
archive.directory(path.resolve(taskPath), false);
let taskStream: NodeJS.ReadableStream = null;
let taskId: string = null;
let sourceLocation: string = null;
const collectionUrl = this.connection.getCollectionUrl();
console.log("Collection URL: " + collectionUrl);
let agentApi = await this.webApi.getTaskAgentApi(collectionUrl);
if (!taskZipPath && !taskPaths) {
throw new Error("You must specify either --task-path or --task-zip-path.");
}
archive.finalize();
return agentApi.uploadTaskDefinition(null, <any>archive, taskJson.id, overwrite).then(() => {
trace.debug("Success");
return <agentContracts.TaskDefinition>{
sourceLocation: taskPath,
};
});
});
if (taskZipPath) {
// User provided an already zipped task, upload that.
const data: Buffer = fs.readFileSync(taskZipPath);
const z: zip = await zip.loadAsync(data);
// find task.json inside zip, make sure its there then deserialize content
const fileContent: string = await z.files[c_taskJsonFile].async('text');
const taskJson: TaskJson = JSON.parse(fileContent);
sourceLocation = taskZipPath;
taskId = taskJson.id;
taskStream = z.generateNodeStream();
} else {
// User provided the path to a directory with the task content
const taskPath: string = taskPaths[0];
vm.exists(taskPath, "specified directory " + taskPath + " does not exist.");
const taskJsonPath: string = path.join(taskPath, c_taskJsonFile);
const taskJson: TaskJson = await vm.validate(taskJsonPath, "no " + c_taskJsonFile + " in specified directory");
const archive = archiver("zip");
archive.on("error", function(error) {
trace.debug("Archiving error: " + error.message);
error.message = "Archiving error: " + error.message;
throw error;
});
});
archive.directory(path.resolve(taskPath), false);
archive.finalize();
sourceLocation = taskPath;
taskId = taskJson.id;
taskStream = archive;
}
const collectionUrl: string = this.connection.getCollectionUrl();
trace.info("Collection URL: " + collectionUrl);
const agentApi: ITaskAgentApi = await this.webApi.getTaskAgentApi(collectionUrl);
await agentApi.uploadTaskDefinition(null, taskStream, taskId, overwrite);
trace.debug("Success");
return <agentContracts.TaskDefinition> { sourceLocation: sourceLocation, };
}
public friendlyOutput(data: agentContracts.TaskDefinition): void {

376
package-lock.json сгенерированный
Просмотреть файл

@ -22,9 +22,9 @@
"integrity": "sha512-wc+VveszMLyMWFvXLkloixT4n0harUIVZjnpzztaZ0nKLuul7Z32iMt2fUFGAaZ4y1XWjFRMtCI5ewvyh4aIeg==",
"dev": true,
"requires": {
"@types/events": "*",
"@types/minimatch": "*",
"@types/node": "*"
"@types/events": "1.2.0",
"@types/minimatch": "3.0.3",
"@types/node": "8.5.10"
}
},
"@types/jju": {
@ -39,7 +39,7 @@
"integrity": "sha512-UaVbz4buRlBEolZYrxqkrGDOypugYlbqGNrUFB4qBaexrLypTH0jyvaF5jolNy5D+5C4kKV1WJ3Yx9cn/JH8oA==",
"dev": true,
"requires": {
"@types/node": "*"
"@types/node": "8.5.10"
}
},
"@types/lodash": {
@ -72,7 +72,7 @@
"integrity": "sha1-32E73biCJe0JzlyDX2INyq8VXms=",
"dev": true,
"requires": {
"@types/node": "*"
"@types/node": "8.5.10"
}
},
"@types/uuid": {
@ -81,7 +81,7 @@
"integrity": "sha512-nmSJ0AL2mZAi68dYb7nKSIJ9YiM68eToP3Ugz66Ou7qkSatIptDM6CvOUmj4epMKWvO9gr9fFBxEEJkromp1Qg==",
"dev": true,
"requires": {
"@types/node": "*"
"@types/node": "8.5.10"
}
},
"@types/validator": {
@ -117,15 +117,15 @@
"resolved": "https://registry.npmjs.org/archiver/-/archiver-2.0.3.tgz",
"integrity": "sha1-tDYLtYSvFDeZGUJxbyHXxSPR270=",
"requires": {
"archiver-utils": "^1.3.0",
"async": "^2.0.0",
"buffer-crc32": "^0.2.1",
"glob": "^7.0.0",
"lodash": "^4.8.0",
"readable-stream": "^2.0.0",
"tar-stream": "^1.5.0",
"walkdir": "^0.0.11",
"zip-stream": "^1.2.0"
"archiver-utils": "1.3.0",
"async": "2.6.1",
"buffer-crc32": "0.2.13",
"glob": "7.1.2",
"lodash": "4.17.11",
"readable-stream": "2.3.6",
"tar-stream": "1.6.1",
"walkdir": "0.0.11",
"zip-stream": "1.2.0"
},
"dependencies": {
"async": {
@ -133,7 +133,7 @@
"resolved": "https://registry.npmjs.org/async/-/async-2.6.1.tgz",
"integrity": "sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ==",
"requires": {
"lodash": "^4.17.10"
"lodash": "4.17.11"
}
}
}
@ -143,12 +143,12 @@
"resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-1.3.0.tgz",
"integrity": "sha1-5QtMCccL89aA4y/xt5lOn52JUXQ=",
"requires": {
"glob": "^7.0.0",
"graceful-fs": "^4.1.0",
"lazystream": "^1.0.0",
"lodash": "^4.8.0",
"normalize-path": "^2.0.0",
"readable-stream": "^2.0.0"
"glob": "7.1.2",
"graceful-fs": "4.1.11",
"lazystream": "1.0.0",
"lodash": "4.17.11",
"normalize-path": "2.1.1",
"readable-stream": "2.3.6"
}
},
"array-find-index": {
@ -191,8 +191,8 @@
"resolved": "https://registry.npmjs.org/bl/-/bl-1.2.2.tgz",
"integrity": "sha512-e8tQYnZodmebYDWGH7KMRvtzKXaJHx3BbilrgZCfvyLUYdKpK1t5PSPmpkny/SgiTSCnjfLW7v5rlONXVFkQEA==",
"requires": {
"readable-stream": "^2.3.5",
"safe-buffer": "^5.1.1"
"readable-stream": "2.3.6",
"safe-buffer": "5.1.2"
}
},
"brace-expansion": {
@ -200,7 +200,7 @@
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
"integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
"requires": {
"balanced-match": "^1.0.0",
"balanced-match": "1.0.0",
"concat-map": "0.0.1"
}
},
@ -209,8 +209,8 @@
"resolved": "https://registry.npmjs.org/buffer/-/buffer-5.2.0.tgz",
"integrity": "sha512-nUJyfChH7PMJy75eRDCCKtszSEFokUNXC1hNVSe+o+VdcgvDPLs20k3v8UXI8ruRYAJiYtyRea8mYyqPxoHWDw==",
"requires": {
"base64-js": "^1.0.2",
"ieee754": "^1.1.4"
"base64-js": "1.3.0",
"ieee754": "1.1.12"
}
},
"buffer-alloc": {
@ -218,8 +218,8 @@
"resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz",
"integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==",
"requires": {
"buffer-alloc-unsafe": "^1.1.0",
"buffer-fill": "^1.0.0"
"buffer-alloc-unsafe": "1.1.0",
"buffer-fill": "1.0.0"
}
},
"buffer-alloc-unsafe": {
@ -252,9 +252,9 @@
"resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-4.2.0.tgz",
"integrity": "sha1-oqpfsa9oh1glnDLBQUJteJI7m3c=",
"requires": {
"camelcase": "^4.1.0",
"map-obj": "^2.0.0",
"quick-lru": "^1.0.0"
"camelcase": "4.1.0",
"map-obj": "2.0.0",
"quick-lru": "1.1.0"
}
},
"clipboardy": {
@ -262,8 +262,8 @@
"resolved": "https://registry.npmjs.org/clipboardy/-/clipboardy-1.2.3.tgz",
"integrity": "sha512-2WNImOvCRe6r63Gk9pShfkwXsVtKCroMAevIbiae021mS850UkWPbevxsBz3tnvjZIEGvlwaqCPsw+4ulzNgJA==",
"requires": {
"arch": "^2.1.0",
"execa": "^0.8.0"
"arch": "2.1.1",
"execa": "0.8.0"
}
},
"colors": {
@ -276,10 +276,10 @@
"resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-1.2.2.tgz",
"integrity": "sha1-UkqfEJA/OoEzibAiXSfEi7dRiQ8=",
"requires": {
"buffer-crc32": "^0.2.1",
"crc32-stream": "^2.0.0",
"normalize-path": "^2.0.0",
"readable-stream": "^2.0.0"
"buffer-crc32": "0.2.13",
"crc32-stream": "2.0.0",
"normalize-path": "2.1.1",
"readable-stream": "2.3.6"
}
},
"concat-map": {
@ -302,7 +302,7 @@
"resolved": "https://registry.npmjs.org/crc/-/crc-3.8.0.tgz",
"integrity": "sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ==",
"requires": {
"buffer": "^5.1.0"
"buffer": "5.2.0"
}
},
"crc32-stream": {
@ -310,8 +310,8 @@
"resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-2.0.0.tgz",
"integrity": "sha1-483TtN8xaN10494/u8t7KX/pCPQ=",
"requires": {
"crc": "^3.4.4",
"readable-stream": "^2.0.0"
"crc": "3.8.0",
"readable-stream": "2.3.6"
}
},
"cross-spawn": {
@ -319,9 +319,9 @@
"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz",
"integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=",
"requires": {
"lru-cache": "^4.0.1",
"shebang-command": "^1.2.0",
"which": "^1.2.9"
"lru-cache": "4.1.3",
"shebang-command": "1.2.0",
"which": "1.3.1"
}
},
"currently-unhandled": {
@ -329,7 +329,7 @@
"resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz",
"integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=",
"requires": {
"array-find-index": "^1.0.1"
"array-find-index": "1.0.2"
}
},
"cycle": {
@ -342,8 +342,8 @@
"resolved": "https://registry.npmjs.org/dateformat/-/dateformat-1.0.11.tgz",
"integrity": "sha1-8ny+56ASu/uC6gUVYtOXf2CT27E=",
"requires": {
"get-stdin": "*",
"meow": "*"
"get-stdin": "6.0.0",
"meow": "5.0.0"
}
},
"decamelize": {
@ -356,8 +356,8 @@
"resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz",
"integrity": "sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=",
"requires": {
"decamelize": "^1.1.0",
"map-obj": "^1.0.0"
"decamelize": "1.2.0",
"map-obj": "1.0.1"
},
"dependencies": {
"map-obj": {
@ -377,7 +377,7 @@
"resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
"integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==",
"requires": {
"object-keys": "^1.0.12"
"object-keys": "1.0.12"
}
},
"end-of-stream": {
@ -385,7 +385,7 @@
"resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz",
"integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==",
"requires": {
"once": "^1.4.0"
"once": "1.4.0"
}
},
"error-ex": {
@ -393,7 +393,7 @@
"resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
"integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
"requires": {
"is-arrayish": "^0.2.1"
"is-arrayish": "0.2.1"
}
},
"es-abstract": {
@ -401,11 +401,11 @@
"resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.12.0.tgz",
"integrity": "sha512-C8Fx/0jFmV5IPoMOFPA9P9G5NtqW+4cOPit3MIuvR2t7Ag2K15EJTpxnHAYTzL+aYQJIESYeXZmDBfOBE1HcpA==",
"requires": {
"es-to-primitive": "^1.1.1",
"function-bind": "^1.1.1",
"has": "^1.0.1",
"is-callable": "^1.1.3",
"is-regex": "^1.0.4"
"es-to-primitive": "1.1.1",
"function-bind": "1.1.1",
"has": "1.0.3",
"is-callable": "1.1.4",
"is-regex": "1.0.4"
}
},
"es-to-primitive": {
@ -413,9 +413,9 @@
"resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.1.1.tgz",
"integrity": "sha1-RTVSSKiJeQNLZ5Lhm7gfK3l13Q0=",
"requires": {
"is-callable": "^1.1.1",
"is-date-object": "^1.0.1",
"is-symbol": "^1.0.1"
"is-callable": "1.1.4",
"is-date-object": "1.0.1",
"is-symbol": "1.0.1"
}
},
"es6-promise": {
@ -428,13 +428,13 @@
"resolved": "https://registry.npmjs.org/execa/-/execa-0.8.0.tgz",
"integrity": "sha1-2NdrvBtVIX7RkP1t1J08d07PyNo=",
"requires": {
"cross-spawn": "^5.0.1",
"get-stream": "^3.0.0",
"is-stream": "^1.1.0",
"npm-run-path": "^2.0.0",
"p-finally": "^1.0.0",
"signal-exit": "^3.0.0",
"strip-eof": "^1.0.0"
"cross-spawn": "5.1.0",
"get-stream": "3.0.0",
"is-stream": "1.1.0",
"npm-run-path": "2.0.2",
"p-finally": "1.0.0",
"signal-exit": "3.0.2",
"strip-eof": "1.0.0"
}
},
"eyes": {
@ -447,7 +447,7 @@
"resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
"integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
"requires": {
"locate-path": "^2.0.0"
"locate-path": "2.0.0"
}
},
"fs-constants": {
@ -480,12 +480,12 @@
"resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
"integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
"requires": {
"fs.realpath": "^1.0.0",
"inflight": "^1.0.4",
"inherits": "2",
"minimatch": "^3.0.4",
"once": "^1.3.0",
"path-is-absolute": "^1.0.0"
"fs.realpath": "1.0.0",
"inflight": "1.0.6",
"inherits": "2.0.3",
"minimatch": "3.0.4",
"once": "1.4.0",
"path-is-absolute": "1.0.1"
}
},
"graceful-fs": {
@ -498,7 +498,7 @@
"resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
"integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
"requires": {
"function-bind": "^1.1.1"
"function-bind": "1.1.1"
}
},
"hosted-git-info": {
@ -531,8 +531,8 @@
"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
"integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
"requires": {
"once": "^1.3.0",
"wrappy": "1"
"once": "1.4.0",
"wrappy": "1.0.2"
}
},
"inherits": {
@ -550,7 +550,7 @@
"resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz",
"integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=",
"requires": {
"builtin-modules": "^1.0.0"
"builtin-modules": "1.1.1"
}
},
"is-callable": {
@ -573,7 +573,7 @@
"resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz",
"integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=",
"requires": {
"has": "^1.0.1"
"has": "1.0.3"
}
},
"is-stream": {
@ -629,11 +629,11 @@
"resolved": "https://registry.npmjs.org/jszip/-/jszip-3.1.5.tgz",
"integrity": "sha512-5W8NUaFRFRqTOL7ZDDrx5qWHJyBXy6velVudIzQUSoqAAYqzSh2Z7/m0Rf1QbmQJccegD0r+YZxBjzqoBiEeJQ==",
"requires": {
"core-js": "~2.3.0",
"es6-promise": "~3.0.2",
"lie": "~3.1.0",
"pako": "~1.0.2",
"readable-stream": "~2.0.6"
"core-js": "2.3.0",
"es6-promise": "3.0.2",
"lie": "3.1.1",
"pako": "1.0.6",
"readable-stream": "2.0.6"
},
"dependencies": {
"process-nextick-args": {
@ -646,12 +646,12 @@
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz",
"integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=",
"requires": {
"core-util-is": "~1.0.0",
"inherits": "~2.0.1",
"isarray": "~1.0.0",
"process-nextick-args": "~1.0.6",
"string_decoder": "~0.10.x",
"util-deprecate": "~1.0.1"
"core-util-is": "1.0.2",
"inherits": "2.0.3",
"isarray": "1.0.0",
"process-nextick-args": "1.0.7",
"string_decoder": "0.10.31",
"util-deprecate": "1.0.2"
}
},
"string_decoder": {
@ -666,7 +666,7 @@
"resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz",
"integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=",
"requires": {
"readable-stream": "^2.0.5"
"readable-stream": "2.3.6"
}
},
"lie": {
@ -674,7 +674,7 @@
"resolved": "https://registry.npmjs.org/lie/-/lie-3.1.1.tgz",
"integrity": "sha1-mkNrLMd0bKWd56QfpGmz77dr2H4=",
"requires": {
"immediate": "~3.0.5"
"immediate": "3.0.6"
}
},
"load-json-file": {
@ -682,10 +682,10 @@
"resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz",
"integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=",
"requires": {
"graceful-fs": "^4.1.2",
"parse-json": "^4.0.0",
"pify": "^3.0.0",
"strip-bom": "^3.0.0"
"graceful-fs": "4.1.11",
"parse-json": "4.0.0",
"pify": "3.0.0",
"strip-bom": "3.0.0"
}
},
"locate-path": {
@ -693,8 +693,8 @@
"resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz",
"integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=",
"requires": {
"p-locate": "^2.0.0",
"path-exists": "^3.0.0"
"p-locate": "2.0.0",
"path-exists": "3.0.0"
}
},
"lodash": {
@ -707,8 +707,8 @@
"resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz",
"integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=",
"requires": {
"currently-unhandled": "^0.4.1",
"signal-exit": "^3.0.0"
"currently-unhandled": "0.4.1",
"signal-exit": "3.0.2"
}
},
"lru-cache": {
@ -716,8 +716,8 @@
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.3.tgz",
"integrity": "sha512-fFEhvcgzuIoJVUF8fYr5KR0YqxD238zgObTps31YdADwPPAp82a4M8TrckkWyx7ekNlf9aBcVn81cFwwXngrJA==",
"requires": {
"pseudomap": "^1.0.2",
"yallist": "^2.1.2"
"pseudomap": "1.0.2",
"yallist": "2.1.2"
}
},
"map-obj": {
@ -730,15 +730,15 @@
"resolved": "https://registry.npmjs.org/meow/-/meow-5.0.0.tgz",
"integrity": "sha512-CbTqYU17ABaLefO8vCU153ZZlprKYWDljcndKKDCFcYQITzWCXZAVk4QMFZPgvzrnUQ3uItnIE/LoUOwrT15Ig==",
"requires": {
"camelcase-keys": "^4.0.0",
"decamelize-keys": "^1.0.0",
"loud-rejection": "^1.0.0",
"minimist-options": "^3.0.1",
"normalize-package-data": "^2.3.4",
"read-pkg-up": "^3.0.0",
"redent": "^2.0.0",
"trim-newlines": "^2.0.0",
"yargs-parser": "^10.0.0"
"camelcase-keys": "4.2.0",
"decamelize-keys": "1.1.0",
"loud-rejection": "1.6.0",
"minimist-options": "3.0.2",
"normalize-package-data": "2.4.0",
"read-pkg-up": "3.0.0",
"redent": "2.0.0",
"trim-newlines": "2.0.0",
"yargs-parser": "10.1.0"
}
},
"minimatch": {
@ -746,7 +746,7 @@
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
"integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
"requires": {
"brace-expansion": "^1.1.7"
"brace-expansion": "1.1.11"
}
},
"minimist": {
@ -759,8 +759,8 @@
"resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-3.0.2.tgz",
"integrity": "sha512-FyBrT/d0d4+uiZRbqznPXqw3IpZZG3gl3wKWiX784FycUKVwBt0uLBFkQrtE4tZOrgo78nZp2jnKz3L65T5LdQ==",
"requires": {
"arrify": "^1.0.1",
"is-plain-obj": "^1.1.0"
"arrify": "1.0.1",
"is-plain-obj": "1.1.0"
}
},
"mkdirp": {
@ -794,10 +794,10 @@
"resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz",
"integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==",
"requires": {
"hosted-git-info": "^2.1.4",
"is-builtin-module": "^1.0.0",
"semver": "2 || 3 || 4 || 5",
"validate-npm-package-license": "^3.0.1"
"hosted-git-info": "2.7.1",
"is-builtin-module": "1.0.0",
"semver": "5.5.1",
"validate-npm-package-license": "3.0.4"
}
},
"normalize-path": {
@ -805,7 +805,7 @@
"resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
"integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
"requires": {
"remove-trailing-separator": "^1.0.1"
"remove-trailing-separator": "1.1.0"
}
},
"npm-run-path": {
@ -813,7 +813,7 @@
"resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz",
"integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=",
"requires": {
"path-key": "^2.0.0"
"path-key": "2.0.1"
}
},
"object-keys": {
@ -826,8 +826,8 @@
"resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz",
"integrity": "sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=",
"requires": {
"define-properties": "^1.1.2",
"es-abstract": "^1.5.1"
"define-properties": "1.1.3",
"es-abstract": "1.12.0"
}
},
"once": {
@ -835,7 +835,7 @@
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
"integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
"requires": {
"wrappy": "1"
"wrappy": "1.0.2"
}
},
"onecolor": {
@ -863,7 +863,7 @@
"resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz",
"integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==",
"requires": {
"p-try": "^1.0.0"
"p-try": "1.0.0"
}
},
"p-locate": {
@ -871,7 +871,7 @@
"resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz",
"integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=",
"requires": {
"p-limit": "^1.1.0"
"p-limit": "1.3.0"
}
},
"p-try": {
@ -889,8 +889,8 @@
"resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz",
"integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=",
"requires": {
"error-ex": "^1.3.1",
"json-parse-better-errors": "^1.0.1"
"error-ex": "1.3.2",
"json-parse-better-errors": "1.0.2"
}
},
"path-exists": {
@ -913,7 +913,7 @@
"resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz",
"integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==",
"requires": {
"pify": "^3.0.0"
"pify": "3.0.0"
}
},
"pify": {
@ -936,11 +936,11 @@
"resolved": "https://registry.npmjs.org/prompt/-/prompt-0.2.14.tgz",
"integrity": "sha1-V3VPZPVD/XsIRXB8gY7OYY8F/9w=",
"requires": {
"pkginfo": "0.x.x",
"read": "1.0.x",
"revalidator": "0.1.x",
"utile": "0.2.x",
"winston": "0.8.x"
"pkginfo": "0.4.1",
"read": "1.0.7",
"revalidator": "0.1.8",
"utile": "0.2.1",
"winston": "0.8.3"
}
},
"pseudomap": {
@ -958,7 +958,7 @@
"resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz",
"integrity": "sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ=",
"requires": {
"mute-stream": "~0.0.4"
"mute-stream": "0.0.4"
}
},
"read-pkg": {
@ -966,9 +966,9 @@
"resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz",
"integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=",
"requires": {
"load-json-file": "^4.0.0",
"normalize-package-data": "^2.3.2",
"path-type": "^3.0.0"
"load-json-file": "4.0.0",
"normalize-package-data": "2.4.0",
"path-type": "3.0.0"
}
},
"read-pkg-up": {
@ -976,8 +976,8 @@
"resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz",
"integrity": "sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc=",
"requires": {
"find-up": "^2.0.0",
"read-pkg": "^3.0.0"
"find-up": "2.1.0",
"read-pkg": "3.0.0"
}
},
"readable-stream": {
@ -985,13 +985,13 @@
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
"integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
"requires": {
"core-util-is": "~1.0.0",
"inherits": "~2.0.3",
"isarray": "~1.0.0",
"process-nextick-args": "~2.0.0",
"safe-buffer": "~5.1.1",
"string_decoder": "~1.1.1",
"util-deprecate": "~1.0.1"
"core-util-is": "1.0.2",
"inherits": "2.0.3",
"isarray": "1.0.0",
"process-nextick-args": "2.0.0",
"safe-buffer": "5.1.2",
"string_decoder": "1.1.1",
"util-deprecate": "1.0.2"
}
},
"redent": {
@ -999,8 +999,8 @@
"resolved": "https://registry.npmjs.org/redent/-/redent-2.0.0.tgz",
"integrity": "sha1-wbIAe0LVfrE4kHmzyDM2OdXhzKo=",
"requires": {
"indent-string": "^3.0.0",
"strip-indent": "^2.0.0"
"indent-string": "3.2.0",
"strip-indent": "2.0.0"
}
},
"remove-trailing-separator": {
@ -1018,7 +1018,7 @@
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz",
"integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==",
"requires": {
"glob": "^7.0.5"
"glob": "7.1.2"
}
},
"safe-buffer": {
@ -1041,7 +1041,7 @@
"resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
"integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
"requires": {
"shebang-regex": "^1.0.0"
"shebang-regex": "1.0.0"
}
},
"shebang-regex": {
@ -1064,8 +1064,8 @@
"resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.0.tgz",
"integrity": "sha512-N19o9z5cEyc8yQQPukRCZ9EUmb4HUpnrmaL/fxS2pBo2jbfcFRVuFZ/oFC+vZz0MNNk0h80iMn5/S6qGZOL5+g==",
"requires": {
"spdx-expression-parse": "^3.0.0",
"spdx-license-ids": "^3.0.0"
"spdx-expression-parse": "3.0.0",
"spdx-license-ids": "3.0.0"
}
},
"spdx-exceptions": {
@ -1078,8 +1078,8 @@
"resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz",
"integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==",
"requires": {
"spdx-exceptions": "^2.1.0",
"spdx-license-ids": "^3.0.0"
"spdx-exceptions": "2.1.0",
"spdx-license-ids": "3.0.0"
}
},
"spdx-license-ids": {
@ -1097,7 +1097,7 @@
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
"integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
"requires": {
"safe-buffer": "~5.1.0"
"safe-buffer": "5.1.2"
}
},
"strip-bom": {
@ -1120,13 +1120,13 @@
"resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.1.tgz",
"integrity": "sha512-IFLM5wp3QrJODQFPm6/to3LJZrONdBY/otxcvDIQzu217zKye6yVR3hhi9lAjrC2Z+m/j5oDxMPb1qcd8cIvpA==",
"requires": {
"bl": "^1.0.0",
"buffer-alloc": "^1.1.0",
"end-of-stream": "^1.0.0",
"fs-constants": "^1.0.0",
"readable-stream": "^2.3.0",
"to-buffer": "^1.1.0",
"xtend": "^4.0.0"
"bl": "1.2.2",
"buffer-alloc": "1.2.0",
"end-of-stream": "1.4.1",
"fs-constants": "1.0.0",
"readable-stream": "2.3.6",
"to-buffer": "1.1.1",
"xtend": "4.0.1"
}
},
"tinytim": {
@ -1139,7 +1139,7 @@
"resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.26.tgz",
"integrity": "sha1-nvqCDOKhD4H4l5VVus4/FVJs4fI=",
"requires": {
"os-tmpdir": "~1.0.0"
"os-tmpdir": "1.0.2"
}
},
"to-buffer": {
@ -1204,8 +1204,8 @@
"resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz",
"integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==",
"requires": {
"define-properties": "^1.1.2",
"object.getownpropertydescriptors": "^2.0.3"
"define-properties": "1.1.3",
"object.getownpropertydescriptors": "2.0.3"
}
},
"utile": {
@ -1213,12 +1213,12 @@
"resolved": "https://registry.npmjs.org/utile/-/utile-0.2.1.tgz",
"integrity": "sha1-kwyI6ZCY1iIINMNWy9mncFItkNc=",
"requires": {
"async": "~0.2.9",
"deep-equal": "*",
"i": "0.3.x",
"mkdirp": "0.x.x",
"ncp": "0.4.x",
"rimraf": "2.x.x"
"async": "0.2.10",
"deep-equal": "1.0.1",
"i": "0.3.6",
"mkdirp": "0.5.1",
"ncp": "0.4.2",
"rimraf": "2.6.2"
},
"dependencies": {
"async": {
@ -1243,8 +1243,8 @@
"resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
"integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==",
"requires": {
"spdx-correct": "^3.0.0",
"spdx-expression-parse": "^3.0.0"
"spdx-correct": "3.0.0",
"spdx-expression-parse": "3.0.0"
}
},
"validator": {
@ -1262,7 +1262,7 @@
"resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
"integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
"requires": {
"isexe": "^2.0.0"
"isexe": "2.0.0"
}
},
"winreg": {
@ -1275,13 +1275,13 @@
"resolved": "https://registry.npmjs.org/winston/-/winston-0.8.3.tgz",
"integrity": "sha1-ZLar9M0Brcrv1QCTk7HY6L7BnbA=",
"requires": {
"async": "0.2.x",
"colors": "0.6.x",
"cycle": "1.0.x",
"eyes": "0.1.x",
"isstream": "0.1.x",
"pkginfo": "0.3.x",
"stack-trace": "0.0.x"
"async": "0.2.10",
"colors": "0.6.2",
"cycle": "1.0.3",
"eyes": "0.1.8",
"isstream": "0.1.2",
"pkginfo": "0.3.1",
"stack-trace": "0.0.10"
},
"dependencies": {
"async": {
@ -1311,8 +1311,8 @@
"resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz",
"integrity": "sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==",
"requires": {
"sax": ">=0.6.0",
"xmlbuilder": "~9.0.1"
"sax": "1.2.4",
"xmlbuilder": "9.0.7"
}
},
"xmlbuilder": {
@ -1335,7 +1335,7 @@
"resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-10.1.0.tgz",
"integrity": "sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ==",
"requires": {
"camelcase": "^4.1.0"
"camelcase": "4.1.0"
}
},
"zip-stream": {
@ -1343,10 +1343,10 @@
"resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-1.2.0.tgz",
"integrity": "sha1-qLxF9MG0lpnGuQGYuqyqzbzUugQ=",
"requires": {
"archiver-utils": "^1.3.0",
"compress-commons": "^1.2.0",
"lodash": "^4.8.0",
"readable-stream": "^2.0.0"
"archiver-utils": "1.3.0",
"compress-commons": "1.2.2",
"lodash": "4.17.11",
"readable-stream": "2.3.6"
}
}
}

Просмотреть файл

@ -1,6 +1,6 @@
{
"name": "tfx-cli",
"version": "0.7.11",
"version": "0.8.0",
"description": "CLI for Azure DevOps Services and Team Foundation Server",
"repository": {
"type": "git",