{"action":"created","comment":{"url":"https://api.github.com/repos/Microsoft/vscode-azurefunctions/pulls/comments/196870422","pull_request_review_id":130507416,"id":196870422,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDE5Njg3MDQyMg==","diff_hunk":"@@ -6,112 +6,114 @@\n import * as fse from 'fs-extra';\n import * as os from 'os';\n import * as path from 'path';\n-import { MessageItem, OutputChannel, QuickPickItem, QuickPickOptions } from \"vscode\";\n-import { DialogResponses, IAzureUserInput } from 'vscode-azureextensionui';\n-import { isWindows, ProjectRuntime } from '../constants';\n+// tslint:disable-next-line:no-require-imports\n+import request = require('request-promise');\n+import { QuickPickOptions } from \"vscode\";\n+import { IActionContext, IAzureQuickPickItem } from 'vscode-azureextensionui';\n+import { ProjectRuntime } from '../constants';\n+import { ext } from '../extensionVariables';\n import { localize } from \"../localize\";\n+import { tryGetTemplateVersionSetting } from '../templates/TemplateData';\n+import { functionRuntimeUtils } from '../utils/functionRuntimeUtils';\n import { cpUtils } from \"./cpUtils\";\n import * as fsUtil from './fs';\n+import { cliFeedJsonResponse, getFeedRuntime, tryGetCliFeedJson } from './getCliFeedJson';\n \n-export namespace dotnetUtils {\n-    const projectPackageId: string = 'microsoft.azurefunctions.projecttemplates';\n-    const functionsPackageId: string = 'azure.functions.templates';\n-    const betaTemplateVersion: string = '2.0.0-beta-10167';\n-    const v1TemplateVersion: string = '1.0.3.10168';\n-\n-    function getPackagesCsproj(version: string): string {\n-        // tslint:disable:no-multiline-string\n-        return `<?xml version=\"1.0\" encoding=\"utf-8\"?>\n-<Project Sdk=\"Microsoft.NET.Sdk\">\n-  <PropertyGroup>\n-    <TargetFramework>netstandard2.0</TargetFramework>\n-  </PropertyGroup>\n-  <ItemGroup>\n-    <PackageReference Include=\"${projectPackageId}\" Version=\"${version}\" />\n-    <PackageReference Include=\"${functionsPackageId}\" Version=\"${version}\" />\n-  </ItemGroup>\n-</Project>\n-`;\n-    }\n+const projectPackageId: string = 'microsoft.azurefunctions.projecttemplates';\n+const functionsPackageId: string = 'azure.functions.templates';\n+const templatesKey: string = 'cSharpFunctionsTemplates';\n \n-    async function validateDotnetInstalled(): Promise<void> {\n-        try {\n-            await cpUtils.executeCommand(undefined, undefined, 'dotnet', '--version');\n-        } catch (error) {\n-            throw new Error(localize('azFunc.dotnetNotInstalled', 'You must have the .NET CLI installed to perform this operation.'));\n-        }\n+async function validateDotnetInstalled(): Promise<void> {\n+    try {\n+        await cpUtils.executeCommand(undefined, undefined, 'dotnet', '--version');\n+    } catch (error) {\n+        throw new Error(localize('dotnetNotInstalled', 'You must have the .NET CLI installed to perform this operation.'));\n     }\n+}\n+\n+async function downloadDotnetTemplates(url: string, tempFolder: string, packageId: string): Promise<string> {\n+    const fullPath: string = path.join(tempFolder, `${packageId}.nupkg`);\n+    return new Promise(async (resolve: (fullPath: string) => void, reject: (e: Error) => void): Promise<void> => {\n+        const templateOptions: request.OptionsWithUri = {\n+            method: 'GET',\n+            uri: url\n+        };\n+\n+        request(templateOptions, (err: Error) => {\n+            // tslint:disable-next-line:strict-boolean-expressions\n+            if (err) {\n+                reject(err);\n+            }\n+        }).pipe(fse.createWriteStream(fullPath).on('finish', () => {\n+            resolve(fullPath);\n+        }));\n+    });\n+}\n \n+export namespace dotnetUtils {\n     export const funcProjectId: string = 'azureFunctionsProjectTemplates';\n \n-    export async function validateTemplatesInstalled(outputChannel: OutputChannel, ui: IAzureUserInput): Promise<void> {\n+    export async function validateTemplatesInstalled(actionContext: IActionContext): Promise<void> {\n         await validateDotnetInstalled();\n+\n         const listOutput: string = await cpUtils.executeCommand(undefined, undefined, 'dotnet', 'new', '--list');\n-        if (!listOutput.includes(funcProjectId) || !listOutput.includes('HttpTrigger')) {\n-            const installTemplates: MessageItem = { title: localize('installTemplates', 'Install Templates') };\n-            await ui.showWarningMessage(localize('noDotnetFuncTemplates', 'You must have the Azure Functions templates installed for the .NET CLI.'), { modal: true }, installTemplates, DialogResponses.cancel);\n-            await installDotnetTemplates(ui, outputChannel);\n+        const templatesInstalled: boolean = listOutput.includes(funcProjectId) && listOutput.includes('HttpTrigger');\n+\n+        const templatesVersion: string | undefined = templatesInstalled ? ext.context.globalState.get(templatesKey) : undefined;\n+        const cliFeedJson: cliFeedJsonResponse | undefined = await tryGetCliFeedJson();\n+        if (!cliFeedJson) {\n+            if (templatesInstalled) {\n+                return;\n+            } else {\n+                throw new Error(localize('retryInternet', 'There was an error in retrieving the templates.  Recheck your internet connection and try again.'));\n+            }\n         }\n-    }\n-\n-    export async function uninstallDotnetTemplates(outputChannel: OutputChannel): Promise<void> {\n-        await validateDotnetInstalled();\n \n-        const tempFolder: string = os.tmpdir();\n+        let runtime: ProjectRuntime | undefined = await functionRuntimeUtils.tryGetLocalRuntimeVersion();\n+        if (runtime === undefined) {\n+            const picks: IAzureQuickPickItem<ProjectRuntime>[] = [\n+                { label: ProjectRuntime.beta, description: '(.NET Core)', data: ProjectRuntime.beta },\n+                { label: ProjectRuntime.one, description: '(.NET Framework)', data: ProjectRuntime.one }\n+            ];\n+            const options: QuickPickOptions = { placeHolder: localize('pickTemplateVersion', 'Select the template version to install') };\n+            runtime = (await ext.ui.showQuickPick(picks, options)).data;\n+        }\n \n-        outputChannel.show();\n-        outputChannel.appendLine(localize('uninstallFuncProject', 'Uninstalling \"{0}\"', projectPackageId));\n-        await cpUtils.executeCommand(undefined, tempFolder, 'dotnet', 'new', '--uninstall', projectPackageId);\n-        outputChannel.appendLine(localize('uninstallFuncs', 'Uninstalling \"{0}\"', functionsPackageId));\n-        await cpUtils.executeCommand(undefined, tempFolder, 'dotnet', 'new', '--uninstall', functionsPackageId);\n-        outputChannel.appendLine(localize('finishedUninstallingTemplates', 'Finished uninstalling Azure Functions templates.'));\n-    }\n+        const latestRelease: string = await tryGetTemplateVersionSetting(actionContext, cliFeedJson, runtime) || cliFeedJson.tags[getFeedRuntime(runtime)].release;","path":"src/utils/dotnetUtils.ts","position":null,"original_position":123,"commit_id":"c57f40c5b0c9d3ae03a7aed801dd6337c665c06a","original_commit_id":"dad7f92244b1787933441bb348808d9c92d62e9c","user":{"login":"EricJizbaMSFT","id":11282622,"node_id":"MDQ6VXNlcjExMjgyNjIy","avatar_url":"https://avatars2.githubusercontent.com/u/11282622?v=4","gravatar_id":"","url":"https://api.github.com/users/EricJizbaMSFT","html_url":"https://github.com/EricJizbaMSFT","followers_url":"https://api.github.com/users/EricJizbaMSFT/followers","following_url":"https://api.github.com/users/EricJizbaMSFT/following{/other_user}","gists_url":"https://api.github.com/users/EricJizbaMSFT/gists{/gist_id}","starred_url":"https://api.github.com/users/EricJizbaMSFT/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/EricJizbaMSFT/subscriptions","organizations_url":"https://api.github.com/users/EricJizbaMSFT/orgs","repos_url":"https://api.github.com/users/EricJizbaMSFT/repos","events_url":"https://api.github.com/users/EricJizbaMSFT/events{/privacy}","received_events_url":"https://api.github.com/users/EricJizbaMSFT/received_events","type":"User","site_admin":false},"body":"They've promised that the cli feed will be backwards compatible, so I'm not too worried. I added some additional telemetry/error handling just in case, though.","created_at":"2018-06-20T17:19:33Z","updated_at":"2018-06-20T17:19:33Z","html_url":"https://github.com/Microsoft/vscode-azurefunctions/pull/421#discussion_r196870422","pull_request_url":"https://api.github.com/repos/Microsoft/vscode-azurefunctions/pulls/421","author_association":"MEMBER","_links":{"self":{"href":"https://api.github.com/repos/Microsoft/vscode-azurefunctions/pulls/comments/196870422"},"html":{"href":"https://github.com/Microsoft/vscode-azurefunctions/pull/421#discussion_r196870422"},"pull_request":{"href":"https://api.github.com/repos/Microsoft/vscode-azurefunctions/pulls/421"}},"in_reply_to_id":196620442},"pull_request":{"url":"https://api.github.com/repos/Microsoft/vscode-azurefunctions/pulls/421","id":195984187,"node_id":"MDExOlB1bGxSZXF1ZXN0MTk1OTg0MTg3","html_url":"https://github.com/Microsoft/vscode-azurefunctions/pull/421","diff_url":"https://github.com/Microsoft/vscode-azurefunctions/pull/421.diff","patch_url":"https://github.com/Microsoft/vscode-azurefunctions/pull/421.patch","issue_url":"https://api.github.com/repos/Microsoft/vscode-azurefunctions/issues/421","number":421,"state":"open","locked":false,"title":"Automatically retrieve dotnet templates from cli feed","user":{"login":"EricJizbaMSFT","id":11282622,"node_id":"MDQ6VXNlcjExMjgyNjIy","avatar_url":"https://avatars2.githubusercontent.com/u/11282622?v=4","gravatar_id":"","url":"https://api.github.com/users/EricJizbaMSFT","html_url":"https://github.com/EricJizbaMSFT","followers_url":"https://api.github.com/users/EricJizbaMSFT/followers","following_url":"https://api.github.com/users/EricJizbaMSFT/following{/other_user}","gists_url":"https://api.github.com/users/EricJizbaMSFT/gists{/gist_id}","starred_url":"https://api.github.com/users/EricJizbaMSFT/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/EricJizbaMSFT/subscriptions","organizations_url":"https://api.github.com/users/EricJizbaMSFT/orgs","repos_url":"https://api.github.com/users/EricJizbaMSFT/repos","events_url":"https://api.github.com/users/EricJizbaMSFT/events{/privacy}","received_events_url":"https://api.github.com/users/EricJizbaMSFT/received_events","type":"User","site_admin":false},"body":"Rather than hard-coding the version, always update to the version of dotnet templates listed in the cli feed. NOTE: @fiveisprime and I decided to no longer prompt when installing dotnet templates (unless we don't know what version to install).\r\n\r\nRequired as a part of #179","created_at":"2018-06-19T23:22:38Z","updated_at":"2018-06-20T17:19:33Z","closed_at":null,"merged_at":null,"merge_commit_sha":"ebd6b156748f62814ca566bf62be86b80ed8fec3","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/Microsoft/vscode-azurefunctions/pulls/421/commits","review_comments_url":"https://api.github.com/repos/Microsoft/vscode-azurefunctions/pulls/421/comments","review_comment_url":"https://api.github.com/repos/Microsoft/vscode-azurefunctions/pulls/comments{/number}","comments_url":"https://api.github.com/repos/Microsoft/vscode-azurefunctions/issues/421/comments","statuses_url":"https://api.github.com/repos/Microsoft/vscode-azurefunctions/statuses/c57f40c5b0c9d3ae03a7aed801dd6337c665c06a","head":{"label":"Microsoft:ej/csharp","ref":"ej/csharp","sha":"c57f40c5b0c9d3ae03a7aed801dd6337c665c06a","user":{"login":"Microsoft","id":6154722,"node_id":"MDEyOk9yZ2FuaXphdGlvbjYxNTQ3MjI=","avatar_url":"https://avatars2.githubusercontent.com/u/6154722?v=4","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":104400765,"node_id":"MDEwOlJlcG9zaXRvcnkxMDQ0MDA3NjU=","name":"vscode-azurefunctions","full_name":"Microsoft/vscode-azurefunctions","owner":{"login":"Microsoft","id":6154722,"node_id":"MDEyOk9yZ2FuaXphdGlvbjYxNTQ3MjI=","avatar_url":"https://avatars2.githubusercontent.com/u/6154722?v=4","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/vscode-azurefunctions","description":"Azure Functions extension for VS Code","fork":false,"url":"https://api.github.com/repos/Microsoft/vscode-azurefunctions","forks_url":"https://api.github.com/repos/Microsoft/vscode-azurefunctions/forks","keys_url":"https://api.github.com/repos/Microsoft/vscode-azurefunctions/keys{/key_id}","collaborators_url":"https://api.github.com/repos/Microsoft/vscode-azurefunctions/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/Microsoft/vscode-azurefunctions/teams","hooks_url":"https://api.github.com/repos/Microsoft/vscode-azurefunctions/hooks","issue_events_url":"https://api.github.com/repos/Microsoft/vscode-azurefunctions/issues/events{/number}","events_url":"https://api.github.com/repos/Microsoft/vscode-azurefunctions/events","assignees_url":"https://api.github.com/repos/Microsoft/vscode-azurefunctions/assignees{/user}","branches_url":"https://api.github.com/repos/Microsoft/vscode-azurefunctions/branches{/branch}","tags_url":"https://api.github.com/repos/Microsoft/vscode-azurefunctions/tags","blobs_url":"https://api.github.com/repos/Microsoft/vscode-azurefunctions/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/Microsoft/vscode-azurefunctions/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/Microsoft/vscode-azurefunctions/git/refs{/sha}","trees_url":"https://api.github.com/repos/Microsoft/vscode-azurefunctions/git/trees{/sha}","statuses_url":"https://api.github.com/repos/Microsoft/vscode-azurefunctions/statuses/{sha}","languages_url":"https://api.github.com/repos/Microsoft/vscode-azurefunctions/languages","stargazers_url":"https://api.github.com/repos/Microsoft/vscode-azurefunctions/stargazers","contributors_url":"https://api.github.com/repos/Microsoft/vscode-azurefunctions/contributors","subscribers_url":"https://api.github.com/repos/Microsoft/vscode-azurefunctions/subscribers","subscription_url":"https://api.github.com/repos/Microsoft/vscode-azurefunctions/subscription","commits_url":"https://api.github.com/repos/Microsoft/vscode-azurefunctions/commits{/sha}","git_commits_url":"https://api.github.com/repos/Microsoft/vscode-azurefunctions/git/commits{/sha}","comments_url":"https://api.github.com/repos/Microsoft/vscode-azurefunctions/comments{/number}","issue_comment_url":"https://api.github.com/repos/Microsoft/vscode-azurefunctions/issues/comments{/number}","contents_url":"https://api.github.com/repos/Microsoft/vscode-azurefunctions/contents/{+path}","compare_url":"https://api.github.com/repos/Microsoft/vscode-azurefunctions/compare/{base}...{head}","merges_url":"https://api.github.com/repos/Microsoft/vscode-azurefunctions/merges","archive_url":"https://api.github.com/repos/Microsoft/vscode-azurefunctions/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/Microsoft/vscode-azurefunctions/downloads","issues_url":"https://api.github.com/repos/Microsoft/vscode-azurefunctions/issues{/number}","pulls_url":"https://api.github.com/repos/Microsoft/vscode-azurefunctions/pulls{/number}","milestones_url":"https://api.github.com/repos/Microsoft/vscode-azurefunctions/milestones{/number}","notifications_url":"https://api.github.com/repos/Microsoft/vscode-azurefunctions/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/Microsoft/vscode-azurefunctions/labels{/name}","releases_url":"https://api.github.com/repos/Microsoft/vscode-azurefunctions/releases{/id}","deployments_url":"https://api.github.com/repos/Microsoft/vscode-azurefunctions/deployments","created_at":"2017-09-21T21:28:44Z","updated_at":"2018-06-19T05:25:02Z","pushed_at":"2018-06-20T17:17:52Z","git_url":"git://github.com/Microsoft/vscode-azurefunctions.git","ssh_url":"git@github.com:Microsoft/vscode-azurefunctions.git","clone_url":"https://github.com/Microsoft/vscode-azurefunctions.git","svn_url":"https://github.com/Microsoft/vscode-azurefunctions","homepage":"https://marketplace.visualstudio.com/items?itemName=ms-azuretools.vscode-azurefunctions","size":15561,"stargazers_count":54,"watchers_count":54,"language":"TypeScript","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":15,"mirror_url":null,"archived":false,"open_issues_count":63,"license":{"key":"mit","name":"MIT License","spdx_id":"MIT","url":"https://api.github.com/licenses/mit","node_id":"MDc6TGljZW5zZTEz"},"forks":15,"open_issues":63,"watchers":54,"default_branch":"master"}},"base":{"label":"Microsoft:master","ref":"master","sha":"3f34d19f53d18b2b5c74cd2c6aae3f0933a3faa9","user":{"login":"Microsoft","id":6154722,"node_id":"MDEyOk9yZ2FuaXphdGlvbjYxNTQ3MjI=","avatar_url":"https://avatars2.githubusercontent.com/u/6154722?v=4","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":104400765,"node_id":"MDEwOlJlcG9zaXRvcnkxMDQ0MDA3NjU=","name":"vscode-azurefunctions","full_name":"Microsoft/vscode-azurefunctions","owner":{"login":"Microsoft","id":6154722,"node_id":"MDEyOk9yZ2FuaXphdGlvbjYxNTQ3MjI=","avatar_url":"https://avatars2.githubusercontent.com/u/6154722?v=4","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/vscode-azurefunctions","description":"Azure Functions extension for VS Code","fork":false,"url":"https://api.github.com/repos/Microsoft/vscode-azurefunctions","forks_url":"https://api.github.com/repos/Microsoft/vscode-azurefunctions/forks","keys_url":"https://api.github.com/repos/Microsoft/vscode-azurefunctions/keys{/key_id}","collaborators_url":"https://api.github.com/repos/Microsoft/vscode-azurefunctions/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/Microsoft/vscode-azurefunctions/teams","hooks_url":"https://api.github.com/repos/Microsoft/vscode-azurefunctions/hooks","issue_events_url":"https://api.github.com/repos/Microsoft/vscode-azurefunctions/issues/events{/number}","events_url":"https://api.github.com/repos/Microsoft/vscode-azurefunctions/events","assignees_url":"https://api.github.com/repos/Microsoft/vscode-azurefunctions/assignees{/user}","branches_url":"https://api.github.com/repos/Microsoft/vscode-azurefunctions/branches{/branch}","tags_url":"https://api.github.com/repos/Microsoft/vscode-azurefunctions/tags","blobs_url":"https://api.github.com/repos/Microsoft/vscode-azurefunctions/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/Microsoft/vscode-azurefunctions/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/Microsoft/vscode-azurefunctions/git/refs{/sha}","trees_url":"https://api.github.com/repos/Microsoft/vscode-azurefunctions/git/trees{/sha}","statuses_url":"https://api.github.com/repos/Microsoft/vscode-azurefunctions/statuses/{sha}","languages_url":"https://api.github.com/repos/Microsoft/vscode-azurefunctions/languages","stargazers_url":"https://api.github.com/repos/Microsoft/vscode-azurefunctions/stargazers","contributors_url":"https://api.github.com/repos/Microsoft/vscode-azurefunctions/contributors","subscribers_url":"https://api.github.com/repos/Microsoft/vscode-azurefunctions/subscribers","subscription_url":"https://api.github.com/repos/Microsoft/vscode-azurefunctions/subscription","commits_url":"https://api.github.com/repos/Microsoft/vscode-azurefunctions/commits{/sha}","git_commits_url":"https://api.github.com/repos/Microsoft/vscode-azurefunctions/git/commits{/sha}","comments_url":"https://api.github.com/repos/Microsoft/vscode-azurefunctions/comments{/number}","issue_comment_url":"https://api.github.com/repos/Microsoft/vscode-azurefunctions/issues/comments{/number}","contents_url":"https://api.github.com/repos/Microsoft/vscode-azurefunctions/contents/{+path}","compare_url":"https://api.github.com/repos/Microsoft/vscode-azurefunctions/compare/{base}...{head}","merges_url":"https://api.github.com/repos/Microsoft/vscode-azurefunctions/merges","archive_url":"https://api.github.com/repos/Microsoft/vscode-azurefunctions/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/Microsoft/vscode-azurefunctions/downloads","issues_url":"https://api.github.com/repos/Microsoft/vscode-azurefunctions/issues{/number}","pulls_url":"https://api.github.com/repos/Microsoft/vscode-azurefunctions/pulls{/number}","milestones_url":"https://api.github.com/repos/Microsoft/vscode-azurefunctions/milestones{/number}","notifications_url":"https://api.github.com/repos/Microsoft/vscode-azurefunctions/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/Microsoft/vscode-azurefunctions/labels{/name}","releases_url":"https://api.github.com/repos/Microsoft/vscode-azurefunctions/releases{/id}","deployments_url":"https://api.github.com/repos/Microsoft/vscode-azurefunctions/deployments","created_at":"2017-09-21T21:28:44Z","updated_at":"2018-06-19T05:25:02Z","pushed_at":"2018-06-20T17:17:52Z","git_url":"git://github.com/Microsoft/vscode-azurefunctions.git","ssh_url":"git@github.com:Microsoft/vscode-azurefunctions.git","clone_url":"https://github.com/Microsoft/vscode-azurefunctions.git","svn_url":"https://github.com/Microsoft/vscode-azurefunctions","homepage":"https://marketplace.visualstudio.com/items?itemName=ms-azuretools.vscode-azurefunctions","size":15561,"stargazers_count":54,"watchers_count":54,"language":"TypeScript","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":15,"mirror_url":null,"archived":false,"open_issues_count":63,"license":{"key":"mit","name":"MIT License","spdx_id":"MIT","url":"https://api.github.com/licenses/mit","node_id":"MDc6TGljZW5zZTEz"},"forks":15,"open_issues":63,"watchers":54,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/Microsoft/vscode-azurefunctions/pulls/421"},"html":{"href":"https://github.com/Microsoft/vscode-azurefunctions/pull/421"},"issue":{"href":"https://api.github.com/repos/Microsoft/vscode-azurefunctions/issues/421"},"comments":{"href":"https://api.github.com/repos/Microsoft/vscode-azurefunctions/issues/421/comments"},"review_comments":{"href":"https://api.github.com/repos/Microsoft/vscode-azurefunctions/pulls/421/comments"},"review_comment":{"href":"https://api.github.com/repos/Microsoft/vscode-azurefunctions/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/Microsoft/vscode-azurefunctions/pulls/421/commits"},"statuses":{"href":"https://api.github.com/repos/Microsoft/vscode-azurefunctions/statuses/c57f40c5b0c9d3ae03a7aed801dd6337c665c06a"}},"author_association":"MEMBER"}}
{"actor":{"display_login":"EricJizbaMSFT"}}