{"action":"created","comment":{"url":"https://api.github.com/repos/Microsoft/vsts-tasks/pulls/comments/95730318","pull_request_review_id":16291725,"id":95730318,"diff_hunk":"@@ -0,0 +1,294 @@\n+var computeManagementClient = require(\"./azure-arm-compute\");\n+import util = require(\"util\");\n+import tl = require(\"vsts-task-lib/task\");\n+import azure_utils = require(\"./AzureUtil\");\n+import deployAzureRG = require(\"./DeployAzureRG\");\n+import Q = require(\"q\");\n+import constants = require(\"./Constants\");\n+\n+export class MachineGroupAgentExtensionManager {\n+    private _taskParameters: deployAzureRG.AzureRGTaskParameters;\n+    private _credentials;\n+    private _subscriptionId: string;\n+    private _azureUtils;\n+    private _computeClient;\n+\n+    constructor(taskParameters: deployAzureRG.AzureRGTaskParameters) {\n+        this._taskParameters = taskParameters;\n+        this._credentials = this._taskParameters.credentials;\n+        this._subscriptionId = this._taskParameters.subscriptionId;\n+        this._azureUtils = new azure_utils.AzureUtil(this._taskParameters);\n+        this._computeClient = new computeManagementClient.ComputeManagementClient(this._credentials, this._subscriptionId);\n+        return this;\n+    }\n+    public installMGExtension() {\n+        try {\n+            var operationParameters = new OperationParameters(\"installation\");\n+            operationParameters.deferred = Q.defer<string>();\n+            var listOfVmsPromise = this._azureUtils.getVMDetails();\n+            listOfVmsPromise.then((listOfVms) => {\n+                operationParameters.vmCount = listOfVms.length;\n+                if (operationParameters.vmCount == 0) {\n+                    operationParameters.deferred.resolve(\"\");\n+                }\n+                for (var i = 0; i < listOfVms.length; i++) {\n+                    var vmName = listOfVms[i][\"name\"];\n+                    var resourceGroupName = this._taskParameters.resourceGroupName;\n+                    var extensionParameters = this._formExtensionParameters(listOfVms[i], operationParameters.operation);\n+                    var extensionName = extensionParameters[\"extensionName\"];\n+                    var parameters = extensionParameters[\"parameters\"];\n+                    var callback = this._getPostOperationCallBack(operationParameters, extensionName, vmName);\n+                    var createOrUpdateCallback = this._getCreateOrUpdateCallback(operationParameters, extensionName, vmName, parameters, callback);\n+                    this._computeClient.virtualMachines.get(resourceGroupName, vmName, { expand: 'instanceView' }, createOrUpdateCallback);\n+                }\n+            });\n+            return operationParameters.deferred.promise;\n+        }\n+        catch (exception) {\n+            this.log(tl.loc(\"MGAgentOperationOnAllVMsFailed\", exception.message));\n+            tl.setResult(tl.TaskResult.Failed, tl.loc(\"MGAgentOperationOnAllVMsFailed\", exception.message));\n+            operationParameters.deferred.resolve(tl.loc(\"MGAgentOperationOnAllVMsFailed\", exception.message));\n+        }\n+    }\n+\n+    public deleteMGExtensionRG() {\n+        try {\n+            var operationParameters = new OperationParameters(\"uninstallation\");\n+            operationParameters.deferred = Q.defer<string>();\n+            var listOfVmsPromise = this._azureUtils.getVMDetails();\n+            listOfVmsPromise.then((listOfVms) => {\n+                operationParameters.vmCount = listOfVms.length;\n+                if (operationParameters.vmCount === 0) {\n+                    operationParameters.deferred.resolve(\"\");\n+                }\n+                for (var i = 0; i < listOfVms.length; i++) {\n+                    var vmName = listOfVms[i][\"name\"];\n+                    var resourceGroupName = this._taskParameters.resourceGroupName;\n+                    var extensionParameters = this._formExtensionParameters(listOfVms[i], operationParameters.operation);\n+                    var extensionName = extensionParameters[\"extensionName\"];\n+                    var callback = this._getPostOperationCallBack(operationParameters, extensionName, vmName);\n+                    var extensionDeletionCallback = this._getExtensionDeletionCallback(operationParameters, resourceGroupName, extensionName, vmName, callback);\n+                    this._computeClient.virtualMachineExtensions.get(resourceGroupName, vmName, extensionName, extensionDeletionCallback);\n+                }\n+            });\n+            return operationParameters.deferred.promise;\n+        }\n+        catch (exception) {\n+            this.log(tl.loc(\"MGAgentOperationOnAllVMsFailed\", operationParameters.operation, exception.message));\n+            tl.setResult(tl.TaskResult.Failed, tl.loc(\"MGAgentOperationOnAllVMsFailed\", operationParameters.operation, exception.message));\n+            operationParameters.deferred.reject(tl.loc(\"MGAgentOperationOnAllVMsFailed\", operationParameters.operation, exception.message));\n+        }\n+    }\n+\n+    public deleteMGExtension(virtualMachine) {\n+        try {\n+            var operationParameters = new OperationParameters(\"uninstallation\");\n+            operationParameters.deferred = Q.defer<string>();\n+            var vmName = virtualMachine[\"name\"]\n+            var resourceGroupName = this._taskParameters.resourceGroupName;\n+            var extensionParameters = this._formExtensionParameters(virtualMachine, operationParameters.operation);\n+            var extensionName = extensionParameters[\"extensionName\"];\n+            var callback = (error, result, request, response) => {\n+                if (error) {\n+                    operationParameters.deferred.reject(\"\");\n+                }\n+                else {\n+                    operationParameters.deferred.resolve(\"\");\n+                }\n+            }\n+            var extensionDeletionCallback = (error, result, request, response) => {\n+                if (error) {\n+                    this.log(tl.loc(\"SkipDeleteExtension\", extensionName, vmName));\n+                    operationParameters.deferred.resolve(\"\");\n+                }\n+                else {\n+                    this.log(tl.loc(\"DeleteExtension\", extensionName, vmName));\n+                    this._computeClient.virtualMachineExtensions.deleteMethod(resourceGroupName, vmName, extensionName, callback);\n+                }\n+            }\n+            this._computeClient.virtualMachineExtensions.get(resourceGroupName, vmName, extensionName, extensionDeletionCallback);\n+            return operationParameters.deferred.promise;\n+        }\n+        catch (exception) {\n+            this.log(tl.loc(\"MGAgentOperationOnAllVMsFailed\", operationParameters.operation, exception.message));\n+            tl.setResult(tl.TaskResult.Failed, tl.loc(\"MGAgentOperationOnAllVMsFailed\", operationParameters.operation, exception.message));\n+            operationParameters.deferred.reject(tl.loc(\"MGAgentOperationOnAllVMsFailed\", operationParameters.operation, exception.message));\n+        }\n+    }\n+\n+    private _settlePromise(operationParameters) {\n+        if (operationParameters.failureCount + operationParameters.successCount == operationParameters.vmCount) {\n+            if (operationParameters.failureCount > 0) {\n+                this.log(tl.loc(\"MGAgentOperationOnAllVMsFailed\", operationParameters.operation, \"\"));\n+                operationParameters.deferred.reject(operationParameters.operation);\n+            }\n+            else {\n+                if (operationParameters.vmCount !== 0) {\n+                    this.log(tl.loc(\"MGAgentOperationOnAllVMsSucceeded\", operationParameters.operation));\n+                }\n+                operationParameters.deferred.resolve(operationParameters.operation);\n+            }\n+        }\n+    }\n+\n+    private _getExtensionDeletionCallback(operationParameters, resourceGroupName, extensionName, vmName, callback) {\n+        var extensionDeletionCallback = (error, result, request, response) => {\n+            if (error) {\n+                this.log(tl.loc(\"SkipDeleteExtension\", extensionName, vmName));\n+                operationParameters.vmCount--;\n+            }\n+            else {\n+                this.log(tl.loc(\"DeleteExtension\", extensionName, vmName));\n+                this._computeClient.virtualMachineExtensions.deleteMethod(resourceGroupName, vmName, extensionName, callback);\n+            }\n+            if (operationParameters.vmCount === 0) {\n+                this._settlePromise(operationParameters);\n+            }\n+        }\n+        return extensionDeletionCallback;\n+    }\n+\n+    private _getPostOperationCallBack(operationParameters, extensionName, vmName) {\n+        var postOperationCallBack = (error, result, request, response) => {\n+            if (error) {\n+                operationParameters.failureCount++;\n+                operationParameters.errors += error.message;\n+                operationParameters.errors += \"\\n\";\n+                this.log(tl.loc(\"OperationFailed\", operationParameters.operation, extensionName, vmName));\n+            } else {\n+                operationParameters.successCount++;\n+                this.log(tl.loc(\"OperationSucceeded\", operationParameters.operation, extensionName, vmName));\n+            }\n+            this._settlePromise(operationParameters);\n+        }\n+        return postOperationCallBack;\n+    }\n+\n+    private _getCreateOrUpdateCallback(operationParameters, extensionName, vmName, parameters, callback) {\n+        var ceateOrUpdateCallBack = (error, result, request, response) => {\n+            if (result) {\n+                var statuses = result[\"properties\"][\"instanceView\"][\"statuses\"];\n+                for (var i = 0; i < statuses.length; i++) {\n+                    var status = statuses[i][\"code\"].split(\"/\");\n+                    if (status.length > 1 && status[0] == \"PowerState\") {\n+                        if (status[1] == \"running\") {","path":"Tasks/DeployAzureResourceGroup/MachineGroupAgentExtensionManager.ts","position":174,"original_position":174,"commit_id":"1a35945e34584481db138eb379ff1c2c6afa0236","original_commit_id":"1a35945e34584481db138eb379ff1c2c6afa0236","user":{"login":"bishalpd","id":7830141,"avatar_url":"https://avatars.githubusercontent.com/u/7830141?v=3","gravatar_id":"","url":"https://api.github.com/users/bishalpd","html_url":"https://github.com/bishalpd","followers_url":"https://api.github.com/users/bishalpd/followers","following_url":"https://api.github.com/users/bishalpd/following{/other_user}","gists_url":"https://api.github.com/users/bishalpd/gists{/gist_id}","starred_url":"https://api.github.com/users/bishalpd/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bishalpd/subscriptions","organizations_url":"https://api.github.com/users/bishalpd/orgs","repos_url":"https://api.github.com/users/bishalpd/repos","events_url":"https://api.github.com/users/bishalpd/events{/privacy}","received_events_url":"https://api.github.com/users/bishalpd/received_events","type":"User","site_admin":false},"body":"create separate re-usable functions which take care of installing extension on running or stopped VM ","created_at":"2017-01-12T06:06:37Z","updated_at":"2017-01-12T06:33:22Z","html_url":"https://github.com/Microsoft/vsts-tasks/pull/3304#discussion_r95730318","pull_request_url":"https://api.github.com/repos/Microsoft/vsts-tasks/pulls/3304","_links":{"self":{"href":"https://api.github.com/repos/Microsoft/vsts-tasks/pulls/comments/95730318"},"html":{"href":"https://github.com/Microsoft/vsts-tasks/pull/3304#discussion_r95730318"},"pull_request":{"href":"https://api.github.com/repos/Microsoft/vsts-tasks/pulls/3304"}}},"pull_request":{"url":"https://api.github.com/repos/Microsoft/vsts-tasks/pulls/3304","id":99339488,"html_url":"https://github.com/Microsoft/vsts-tasks/pull/3304","diff_url":"https://github.com/Microsoft/vsts-tasks/pull/3304.diff","patch_url":"https://github.com/Microsoft/vsts-tasks/pull/3304.patch","issue_url":"https://api.github.com/repos/Microsoft/vsts-tasks/issues/3304","number":3304,"state":"open","locked":false,"title":"Changes for adding vm extension. Currently using old sdk","user":{"login":"tejasd1990","id":21192350,"avatar_url":"https://avatars.githubusercontent.com/u/21192350?v=3","gravatar_id":"","url":"https://api.github.com/users/tejasd1990","html_url":"https://github.com/tejasd1990","followers_url":"https://api.github.com/users/tejasd1990/followers","following_url":"https://api.github.com/users/tejasd1990/following{/other_user}","gists_url":"https://api.github.com/users/tejasd1990/gists{/gist_id}","starred_url":"https://api.github.com/users/tejasd1990/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tejasd1990/subscriptions","organizations_url":"https://api.github.com/users/tejasd1990/orgs","repos_url":"https://api.github.com/users/tejasd1990/repos","events_url":"https://api.github.com/users/tejasd1990/events{/privacy}","received_events_url":"https://api.github.com/users/tejasd1990/received_events","type":"User","site_admin":false},"body":"","created_at":"2016-12-26T04:46:34Z","updated_at":"2017-01-12T06:33:22Z","closed_at":null,"merged_at":null,"merge_commit_sha":"577b4944d25509c55f8ae40a40125b20b8ef9358","assignee":{"login":"bishalpd","id":7830141,"avatar_url":"https://avatars.githubusercontent.com/u/7830141?v=3","gravatar_id":"","url":"https://api.github.com/users/bishalpd","html_url":"https://github.com/bishalpd","followers_url":"https://api.github.com/users/bishalpd/followers","following_url":"https://api.github.com/users/bishalpd/following{/other_user}","gists_url":"https://api.github.com/users/bishalpd/gists{/gist_id}","starred_url":"https://api.github.com/users/bishalpd/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bishalpd/subscriptions","organizations_url":"https://api.github.com/users/bishalpd/orgs","repos_url":"https://api.github.com/users/bishalpd/repos","events_url":"https://api.github.com/users/bishalpd/events{/privacy}","received_events_url":"https://api.github.com/users/bishalpd/received_events","type":"User","site_admin":false},"assignees":[{"login":"bishalpd","id":7830141,"avatar_url":"https://avatars.githubusercontent.com/u/7830141?v=3","gravatar_id":"","url":"https://api.github.com/users/bishalpd","html_url":"https://github.com/bishalpd","followers_url":"https://api.github.com/users/bishalpd/followers","following_url":"https://api.github.com/users/bishalpd/following{/other_user}","gists_url":"https://api.github.com/users/bishalpd/gists{/gist_id}","starred_url":"https://api.github.com/users/bishalpd/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bishalpd/subscriptions","organizations_url":"https://api.github.com/users/bishalpd/orgs","repos_url":"https://api.github.com/users/bishalpd/repos","events_url":"https://api.github.com/users/bishalpd/events{/privacy}","received_events_url":"https://api.github.com/users/bishalpd/received_events","type":"User","site_admin":false},{"login":"sachinma","id":17923727,"avatar_url":"https://avatars.githubusercontent.com/u/17923727?v=3","gravatar_id":"","url":"https://api.github.com/users/sachinma","html_url":"https://github.com/sachinma","followers_url":"https://api.github.com/users/sachinma/followers","following_url":"https://api.github.com/users/sachinma/following{/other_user}","gists_url":"https://api.github.com/users/sachinma/gists{/gist_id}","starred_url":"https://api.github.com/users/sachinma/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sachinma/subscriptions","organizations_url":"https://api.github.com/users/sachinma/orgs","repos_url":"https://api.github.com/users/sachinma/repos","events_url":"https://api.github.com/users/sachinma/events{/privacy}","received_events_url":"https://api.github.com/users/sachinma/received_events","type":"User","site_admin":false},{"login":"desattir","id":20898467,"avatar_url":"https://avatars.githubusercontent.com/u/20898467?v=3","gravatar_id":"","url":"https://api.github.com/users/desattir","html_url":"https://github.com/desattir","followers_url":"https://api.github.com/users/desattir/followers","following_url":"https://api.github.com/users/desattir/following{/other_user}","gists_url":"https://api.github.com/users/desattir/gists{/gist_id}","starred_url":"https://api.github.com/users/desattir/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/desattir/subscriptions","organizations_url":"https://api.github.com/users/desattir/orgs","repos_url":"https://api.github.com/users/desattir/repos","events_url":"https://api.github.com/users/desattir/events{/privacy}","received_events_url":"https://api.github.com/users/desattir/received_events","type":"User","site_admin":false},{"login":"hililh","id":24219593,"avatar_url":"https://avatars.githubusercontent.com/u/24219593?v=3","gravatar_id":"","url":"https://api.github.com/users/hililh","html_url":"https://github.com/hililh","followers_url":"https://api.github.com/users/hililh/followers","following_url":"https://api.github.com/users/hililh/following{/other_user}","gists_url":"https://api.github.com/users/hililh/gists{/gist_id}","starred_url":"https://api.github.com/users/hililh/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/hililh/subscriptions","organizations_url":"https://api.github.com/users/hililh/orgs","repos_url":"https://api.github.com/users/hililh/repos","events_url":"https://api.github.com/users/hililh/events{/privacy}","received_events_url":"https://api.github.com/users/hililh/received_events","type":"User","site_admin":false}],"milestone":null,"commits_url":"https://api.github.com/repos/Microsoft/vsts-tasks/pulls/3304/commits","review_comments_url":"https://api.github.com/repos/Microsoft/vsts-tasks/pulls/3304/comments","review_comment_url":"https://api.github.com/repos/Microsoft/vsts-tasks/pulls/comments{/number}","comments_url":"https://api.github.com/repos/Microsoft/vsts-tasks/issues/3304/comments","statuses_url":"https://api.github.com/repos/Microsoft/vsts-tasks/statuses/1a35945e34584481db138eb379ff1c2c6afa0236","head":{"label":"Microsoft:users/tedeshpa/RGTaskVMExt","ref":"users/tedeshpa/RGTaskVMExt","sha":"1a35945e34584481db138eb379ff1c2c6afa0236","user":{"login":"Microsoft","id":6154722,"avatar_url":"https://avatars.githubusercontent.com/u/6154722?v=3","gravatar_id":"","url":"https://api.github.com/users/Microsoft","html_url":"https://github.com/Microsoft","followers_url":"https://api.github.com/users/Microsoft/followers","following_url":"https://api.github.com/users/Microsoft/following{/other_user}","gists_url":"https://api.github.com/users/Microsoft/gists{/gist_id}","starred_url":"https://api.github.com/users/Microsoft/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Microsoft/subscriptions","organizations_url":"https://api.github.com/users/Microsoft/orgs","repos_url":"https://api.github.com/users/Microsoft/repos","events_url":"https://api.github.com/users/Microsoft/events{/privacy}","received_events_url":"https://api.github.com/users/Microsoft/received_events","type":"Organization","site_admin":false},"repo":{"id":27631673,"name":"vsts-tasks","full_name":"Microsoft/vsts-tasks","owner":{"login":"Microsoft","id":6154722,"avatar_url":"https://avatars.githubusercontent.com/u/6154722?v=3","gravatar_id":"","url":"https://api.github.com/users/Microsoft","html_url":"https://github.com/Microsoft","followers_url":"https://api.github.com/users/Microsoft/followers","following_url":"https://api.github.com/users/Microsoft/following{/other_user}","gists_url":"https://api.github.com/users/Microsoft/gists{/gist_id}","starred_url":"https://api.github.com/users/Microsoft/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Microsoft/subscriptions","organizations_url":"https://api.github.com/users/Microsoft/orgs","repos_url":"https://api.github.com/users/Microsoft/repos","events_url":"https://api.github.com/users/Microsoft/events{/privacy}","received_events_url":"https://api.github.com/users/Microsoft/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/Microsoft/vsts-tasks","description":"Build and Release Tasks for Visual Studio Team Services and Team Foundation Server","fork":false,"url":"https://api.github.com/repos/Microsoft/vsts-tasks","forks_url":"https://api.github.com/repos/Microsoft/vsts-tasks/forks","keys_url":"https://api.github.com/repos/Microsoft/vsts-tasks/keys{/key_id}","collaborators_url":"https://api.github.com/repos/Microsoft/vsts-tasks/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/Microsoft/vsts-tasks/teams","hooks_url":"https://api.github.com/repos/Microsoft/vsts-tasks/hooks","issue_events_url":"https://api.github.com/repos/Microsoft/vsts-tasks/issues/events{/number}","events_url":"https://api.github.com/repos/Microsoft/vsts-tasks/events","assignees_url":"https://api.github.com/repos/Microsoft/vsts-tasks/assignees{/user}","branches_url":"https://api.github.com/repos/Microsoft/vsts-tasks/branches{/branch}","tags_url":"https://api.github.com/repos/Microsoft/vsts-tasks/tags","blobs_url":"https://api.github.com/repos/Microsoft/vsts-tasks/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/Microsoft/vsts-tasks/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/Microsoft/vsts-tasks/git/refs{/sha}","trees_url":"https://api.github.com/repos/Microsoft/vsts-tasks/git/trees{/sha}","statuses_url":"https://api.github.com/repos/Microsoft/vsts-tasks/statuses/{sha}","languages_url":"https://api.github.com/repos/Microsoft/vsts-tasks/languages","stargazers_url":"https://api.github.com/repos/Microsoft/vsts-tasks/stargazers","contributors_url":"https://api.github.com/repos/Microsoft/vsts-tasks/contributors","subscribers_url":"https://api.github.com/repos/Microsoft/vsts-tasks/subscribers","subscription_url":"https://api.github.com/repos/Microsoft/vsts-tasks/subscription","commits_url":"https://api.github.com/repos/Microsoft/vsts-tasks/commits{/sha}","git_commits_url":"https://api.github.com/repos/Microsoft/vsts-tasks/git/commits{/sha}","comments_url":"https://api.github.com/repos/Microsoft/vsts-tasks/comments{/number}","issue_comment_url":"https://api.github.com/repos/Microsoft/vsts-tasks/issues/comments{/number}","contents_url":"https://api.github.com/repos/Microsoft/vsts-tasks/contents/{+path}","compare_url":"https://api.github.com/repos/Microsoft/vsts-tasks/compare/{base}...{head}","merges_url":"https://api.github.com/repos/Microsoft/vsts-tasks/merges","archive_url":"https://api.github.com/repos/Microsoft/vsts-tasks/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/Microsoft/vsts-tasks/downloads","issues_url":"https://api.github.com/repos/Microsoft/vsts-tasks/issues{/number}","pulls_url":"https://api.github.com/repos/Microsoft/vsts-tasks/pulls{/number}","milestones_url":"https://api.github.com/repos/Microsoft/vsts-tasks/milestones{/number}","notifications_url":"https://api.github.com/repos/Microsoft/vsts-tasks/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/Microsoft/vsts-tasks/labels{/name}","releases_url":"https://api.github.com/repos/Microsoft/vsts-tasks/releases{/id}","deployments_url":"https://api.github.com/repos/Microsoft/vsts-tasks/deployments","created_at":"2014-12-06T11:11:46Z","updated_at":"2017-01-09T10:06:24Z","pushed_at":"2017-01-12T06:02:01Z","git_url":"git://github.com/Microsoft/vsts-tasks.git","ssh_url":"git@github.com:Microsoft/vsts-tasks.git","clone_url":"https://github.com/Microsoft/vsts-tasks.git","svn_url":"https://github.com/Microsoft/vsts-tasks","homepage":"https://aka.ms/tfbuild","size":25511,"stargazers_count":479,"watchers_count":479,"language":"TypeScript","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":451,"mirror_url":null,"open_issues_count":133,"forks":451,"open_issues":133,"watchers":479,"default_branch":"master"}},"base":{"label":"Microsoft:features/AzureRGDeploy","ref":"features/AzureRGDeploy","sha":"c195b129331acaa1fdcc59598592fc7cbd398177","user":{"login":"Microsoft","id":6154722,"avatar_url":"https://avatars.githubusercontent.com/u/6154722?v=3","gravatar_id":"","url":"https://api.github.com/users/Microsoft","html_url":"https://github.com/Microsoft","followers_url":"https://api.github.com/users/Microsoft/followers","following_url":"https://api.github.com/users/Microsoft/following{/other_user}","gists_url":"https://api.github.com/users/Microsoft/gists{/gist_id}","starred_url":"https://api.github.com/users/Microsoft/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Microsoft/subscriptions","organizations_url":"https://api.github.com/users/Microsoft/orgs","repos_url":"https://api.github.com/users/Microsoft/repos","events_url":"https://api.github.com/users/Microsoft/events{/privacy}","received_events_url":"https://api.github.com/users/Microsoft/received_events","type":"Organization","site_admin":false},"repo":{"id":27631673,"name":"vsts-tasks","full_name":"Microsoft/vsts-tasks","owner":{"login":"Microsoft","id":6154722,"avatar_url":"https://avatars.githubusercontent.com/u/6154722?v=3","gravatar_id":"","url":"https://api.github.com/users/Microsoft","html_url":"https://github.com/Microsoft","followers_url":"https://api.github.com/users/Microsoft/followers","following_url":"https://api.github.com/users/Microsoft/following{/other_user}","gists_url":"https://api.github.com/users/Microsoft/gists{/gist_id}","starred_url":"https://api.github.com/users/Microsoft/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Microsoft/subscriptions","organizations_url":"https://api.github.com/users/Microsoft/orgs","repos_url":"https://api.github.com/users/Microsoft/repos","events_url":"https://api.github.com/users/Microsoft/events{/privacy}","received_events_url":"https://api.github.com/users/Microsoft/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/Microsoft/vsts-tasks","description":"Build and Release Tasks for Visual Studio Team Services and Team Foundation Server","fork":false,"url":"https://api.github.com/repos/Microsoft/vsts-tasks","forks_url":"https://api.github.com/repos/Microsoft/vsts-tasks/forks","keys_url":"https://api.github.com/repos/Microsoft/vsts-tasks/keys{/key_id}","collaborators_url":"https://api.github.com/repos/Microsoft/vsts-tasks/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/Microsoft/vsts-tasks/teams","hooks_url":"https://api.github.com/repos/Microsoft/vsts-tasks/hooks","issue_events_url":"https://api.github.com/repos/Microsoft/vsts-tasks/issues/events{/number}","events_url":"https://api.github.com/repos/Microsoft/vsts-tasks/events","assignees_url":"https://api.github.com/repos/Microsoft/vsts-tasks/assignees{/user}","branches_url":"https://api.github.com/repos/Microsoft/vsts-tasks/branches{/branch}","tags_url":"https://api.github.com/repos/Microsoft/vsts-tasks/tags","blobs_url":"https://api.github.com/repos/Microsoft/vsts-tasks/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/Microsoft/vsts-tasks/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/Microsoft/vsts-tasks/git/refs{/sha}","trees_url":"https://api.github.com/repos/Microsoft/vsts-tasks/git/trees{/sha}","statuses_url":"https://api.github.com/repos/Microsoft/vsts-tasks/statuses/{sha}","languages_url":"https://api.github.com/repos/Microsoft/vsts-tasks/languages","stargazers_url":"https://api.github.com/repos/Microsoft/vsts-tasks/stargazers","contributors_url":"https://api.github.com/repos/Microsoft/vsts-tasks/contributors","subscribers_url":"https://api.github.com/repos/Microsoft/vsts-tasks/subscribers","subscription_url":"https://api.github.com/repos/Microsoft/vsts-tasks/subscription","commits_url":"https://api.github.com/repos/Microsoft/vsts-tasks/commits{/sha}","git_commits_url":"https://api.github.com/repos/Microsoft/vsts-tasks/git/commits{/sha}","comments_url":"https://api.github.com/repos/Microsoft/vsts-tasks/comments{/number}","issue_comment_url":"https://api.github.com/repos/Microsoft/vsts-tasks/issues/comments{/number}","contents_url":"https://api.github.com/repos/Microsoft/vsts-tasks/contents/{+path}","compare_url":"https://api.github.com/repos/Microsoft/vsts-tasks/compare/{base}...{head}","merges_url":"https://api.github.com/repos/Microsoft/vsts-tasks/merges","archive_url":"https://api.github.com/repos/Microsoft/vsts-tasks/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/Microsoft/vsts-tasks/downloads","issues_url":"https://api.github.com/repos/Microsoft/vsts-tasks/issues{/number}","pulls_url":"https://api.github.com/repos/Microsoft/vsts-tasks/pulls{/number}","milestones_url":"https://api.github.com/repos/Microsoft/vsts-tasks/milestones{/number}","notifications_url":"https://api.github.com/repos/Microsoft/vsts-tasks/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/Microsoft/vsts-tasks/labels{/name}","releases_url":"https://api.github.com/repos/Microsoft/vsts-tasks/releases{/id}","deployments_url":"https://api.github.com/repos/Microsoft/vsts-tasks/deployments","created_at":"2014-12-06T11:11:46Z","updated_at":"2017-01-09T10:06:24Z","pushed_at":"2017-01-12T06:02:01Z","git_url":"git://github.com/Microsoft/vsts-tasks.git","ssh_url":"git@github.com:Microsoft/vsts-tasks.git","clone_url":"https://github.com/Microsoft/vsts-tasks.git","svn_url":"https://github.com/Microsoft/vsts-tasks","homepage":"https://aka.ms/tfbuild","size":25511,"stargazers_count":479,"watchers_count":479,"language":"TypeScript","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":451,"mirror_url":null,"open_issues_count":133,"forks":451,"open_issues":133,"watchers":479,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/Microsoft/vsts-tasks/pulls/3304"},"html":{"href":"https://github.com/Microsoft/vsts-tasks/pull/3304"},"issue":{"href":"https://api.github.com/repos/Microsoft/vsts-tasks/issues/3304"},"comments":{"href":"https://api.github.com/repos/Microsoft/vsts-tasks/issues/3304/comments"},"review_comments":{"href":"https://api.github.com/repos/Microsoft/vsts-tasks/pulls/3304/comments"},"review_comment":{"href":"https://api.github.com/repos/Microsoft/vsts-tasks/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/Microsoft/vsts-tasks/pulls/3304/commits"},"statuses":{"href":"https://api.github.com/repos/Microsoft/vsts-tasks/statuses/1a35945e34584481db138eb379ff1c2c6afa0236"}}}}
{"actor":{"display_login":"bishalpd"}}