{"action":"created","comment":{"url":"https://api.github.com/repos/dotnet/roslyn/pulls/comments/239549204","pull_request_review_id":182365367,"id":239549204,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDIzOTU0OTIwNA==","diff_hunk":"@@ -0,0 +1,417 @@\n+#\n+# This script controls the Roslyn build process. This encompasess everything from build, testing to\n+# publishing of NuGet packages. The intent is to structure it to allow for a simple flow of logic\n+# between the following phases:\n+#\n+#   - restore\n+#   - build\n+#   - sign\n+#   - pack\n+#   - test\n+#   - publish\n+#\n+# Each of these phases has a separate command which can be executed independently. For instance\n+# it's fine to call `build.ps1 -build -testDesktop` followed by repeated calls to\n+# `.\\build.ps1 -testDesktop`.\n+\n+[CmdletBinding(PositionalBinding=$false)]\n+param (\n+    [string]$configuration = \"Debug\",\n+    [string]$msbuildEngine = \"vs\",\n+\n+    # Actions\n+    [switch]$restore,\n+    [switch]$build,\n+    [switch]$rebuild,\n+    [switch]$sign,\n+    [switch]$pack,\n+    [switch]$publish,\n+    [switch]$launch,\n+    [switch]$help,\n+\n+    # Options\n+    [switch]$bootstrap,\n+    [switch][Alias('bl')]$binaryLog,\n+    [switch]$ci,\n+    [switch]$official,\n+    [switch]$procdump,\n+    [switch]$skipAnalyzers,\n+    [switch]$deployExtensions,\n+    [switch]$prepareMachine,\n+\n+    # Test actions\n+    [switch]$test32,\n+    [switch]$test64,\n+    [switch]$testVsi,\n+    [switch][Alias('test')]$testDesktop,\n+    [switch]$testCoreClr,\n+    [switch]$testIOperation,\n+\n+    [parameter(ValueFromRemainingArguments=$true)][string[]]$properties)\n+\n+Set-StrictMode -version 2.0\n+$ErrorActionPreference = \"Stop\"\n+\n+function Print-Usage() {\n+    Write-Host \"Common settings:\"\n+    Write-Host \"  -configuration <value>    Build configuration ('Debug' or 'Release')\"\n+    Write-Host \"  -verbosity <value>        Msbuild verbosity (q[uiet], m[inimal], n[ormal], d[etailed], and diag[nostic])\"\n+    Write-Host \"  -deployExtensions         Deploy built vsixes\"\n+    Write-Host \"  -binaryLog                Create MSBuild binary log (short: -bl)\"\n+    Write-Host \"\"\n+    Write-Host \"Actions:\"\n+    Write-Host \"  -restore                  Restore packages\"\n+    Write-Host \"  -build                    Build main solution\"\n+    Write-Host \"  -rebuild                  Rebuild main solution\"\n+    Write-Host \"  -pack                     Build NuGet packages, VS insertion manifests and installer\"\n+    Write-Host \"  -sign                     Sign our binaries\"\n+    Write-Host \"  -publish                  Publish build artifacts (e.g. symbols)\"\n+    Write-Host \"  -launch                   Launch Visual Studio in developer hive\"\n+    Write-Host \"  -help                     Print help and exit\"\n+    Write-Host \"\"\n+    Write-Host \"Test actions\"\n+    Write-Host \"  -test32                   Run unit tests in the 32-bit runner\"\n+    Write-Host \"  -test64                   Run units tests in the 64-bit runner\"\n+    Write-Host \"  -testDesktop              Run Desktop unit tests (short: -test)\"\n+    Write-Host \"  -testCoreClr              Run CoreClr unit tests\"\n+    Write-Host \"  -testVsi                  Run all integration tests\"\n+    Write-Host \"  -testIOperation           Run extra checks to validate IOperations\"\n+    Write-Host \"\"\n+    Write-Host \"Advanced settings:\"\n+    Write-Host \"  -ci                       Set when running on CI server\"\n+    Write-Host \"  -official                 Set when building an official build\"\n+    Write-Host \"  -bootstrap                Build using a bootstrap compilers\"\n+    Write-Host \"  -msbuildEngine <value>    Msbuild engine to use to run build ('dotnet', 'vs', or unspecified).\"\n+    Write-Host \"  -procdump                 Monitor test runs with procdump\"\n+    Write-Host \"  -skipAnalyzers            Do not run analyzers during build operations\"\n+    Write-Host \"  -prepareMachine           Prepare machine for CI run, clean up processes after build\"\n+    Write-Host \"\"\n+    Write-Host \"Command line arguments starting with '/p:' are passed through to MSBuild.\"\n+}\n+\n+if ($help -or (($properties -ne $null) -and ($properties.Contains(\"/help\") -or $properties.Contains(\"/?\")))) {\n+  Print-Usage\n+  exit 0\n+}\n+\n+# Process the command line arguments and establish defaults for the values which are not\n+# specified.\n+#\n+# In this function it's okay to use two arguments to extend the effect of another. For\n+# example it's okay to look at $testVsi and infer $skipAnalyzers. It's not okay though to infer\n+# $build based on say $testDesktop. It's possible the developer wanted only for testing\n+# to execute, not any build.\n+function Process-Arguments() {\n+    if ($test32 -and $test64) {\n+        Write-Host \"Cannot combine -test32 and -test64\"\n+        exit 1\n+    }\n+\n+    $anyUnit = $testDesktop -or $testCoreClr\n+    if ($anyUnit -and $testVsi) {\n+        Write-Host \"Cannot combine unit and VSI testing\"\n+        exit 1\n+    }\n+\n+    if ($testVsi) {\n+        # Avoid spending time in analyzers when requested, and also in the slowest integration test builds\n+        $script:skipAnalyzers = $true\n+        $script:bootstrap = $false\n+    }\n+\n+    if ($build -and $launch -and -not $deployExtensions) {\n+        Write-Host -ForegroundColor Red \"Cannot combine -build and -launch without -deployExtensions\"\n+        exit 1\n+    }\n+\n+    $script:test32 = -not $test64\n+\n+    foreach ($property in $properties) {\n+        if (!$property.StartsWith(\"/p:\", \"InvariantCultureIgnoreCase\")) {\n+            Write-Host \"Invalid argument: $property\"\n+            Print-Usage\n+            exit 1\n+        }\n+    }\n+}\n+\n+function BuildSolution() {\n+    # Roslyn.sln can't be built with dotnet due to WPF and VSIX build task dependencies\n+    $solution = if ($msbuildEngine -eq 'dotnet') { \"Compilers.sln\" } else { \"Roslyn.sln\" }\n+    \n+    Write-Host \"Running msbuild on $solution\"\n+\n+    $bl = if ($binaryLog) { \"/bl:\" + (Join-Path $LogDir \"Build.binlog\") } else { \"\" }\n+    $projects = Join-Path $RepoRoot $solution\n+    $officialBuildId = if ($official) { $env:BUILD_BUILDNUMBER } else { \"\" }\n+    $enableAnalyzers = !$skipAnalyzers\n+    $toolsetBuildProj = Join-Path $EngRoot \"targets\\RepoToolset\\Build.proj\"\n+    $quietRestore = !$ci\n+    $testTargetFrameworks = if ($testCoreClr) { \"netcoreapp2.1\" } else { \"\" }\n+\n+    MSBuild $toolsetBuildProj `\n+        $bl `\n+        /p:Configuration=$configuration `\n+        /p:Projects=$projects `\n+        /p:RepoRoot=$RepoRoot `\n+        /p:Restore=$restore `\n+        /p:Build=$build `\n+        /p:Test=$testCoreClr `\n+        /p:Rebuild=$rebuild `\n+        /p:Pack=$pack `\n+        /p:Sign=$sign `\n+        /p:Publish=$publish `\n+        /p:ContinuousIntegrationBuild=$ci `\n+        /p:DeployExtension=$deployExtensions `\n+        /p:OfficialBuildId=$officialBuildId `\n+        /p:UseRoslynAnalyzers=$enableAnalyzers `\n+        /p:BootstrapBuildPath=$bootstrapDir `\n+        /p:QuietRestore=$quietRestore `\n+        /p:QuietRestoreBinaryLog=$binaryLog `\n+        /p:TestTargetFrameworks=$testTargetFrameworks `\n+        @properties\n+}\n+\n+\n+function Build-OptProfData() {\n+    $optProfToolDir = Get-PackageDir \"RoslynTools.OptProf\"\n+    $optProfToolExe = Join-Path $optProfToolDir \"tools\\roslyn.optprof.exe\"\n+    $configFile = Join-Path $EngRoot \"config\\OptProf.json\"\n+    $insertionFolder = Join-Path $VSSetupDir \"Insertion\"\n+    $outputFolder = Join-Path $insertionFolder \"OptProf\"\n+    Write-Host \"Generating OptProf data using '$configFile' into '$outputFolder'\"\n+    $optProfArgs = \"--configFile `\"$configFile`\" --insertionFolder `\"$insertionFolder`\" --outputFolder `\"$outputFolder`\"\"\n+    Exec-Console $optProfToolExe $optProfArgs\n+\n+    # Write Out Branch we are inserting into\n+    $vsBranchFolder = Join-Path $insertionFolder \"BranchInfo\"\n+    New-Item -ItemType Directory -Force -Path $vsBranchFolder\n+    $vsBranchText = Join-Path $vsBranchFolder \"vsbranch.txt\"\n+    # InsertTargetBranchFullName is defined in .vsts-ci.yml\n+    $vsBranch = $Env:InsertTargetBranchFullName\n+    $vsBranch >> $vsBranchText\n+}\n+\n+# Core function for running our unit / integration tests tests\n+function TestUsingOptimizedRunner() {\n+\n+    # Tests need to locate .NET Core SDK\n+    $dotnet = InitializeDotNetCli\n+\n+    if ($testVsi) {\n+        Deploy-VsixViaTool\n+    }\n+\n+    if ($testIOperation) {\n+        $env:ROSLYN_TEST_IOPERATION = \"true\"\n+    }\n+\n+    $testResultsDir = Join-Path $ArtifactsDir \"TestResults\\$configuration\"\n+    $binDir = Join-Path $ArtifactsDir \"bin\" \n+    $runTests = GetProjectOutputBinary \"RunTests.exe\"\n+\n+    if (!(Test-Path $runTests)) {\n+        Write-Host \"Test runner not found: '$runTests'. Run Build.cmd first.\" -ForegroundColor Red \n+        ExitWithExitCode 1\n+    }\n+\n+    $xunitDir = Join-Path (Get-PackageDir \"xunit.runner.console\") \"tools\\net472\"\n+    $args = \"`\"$xunitDir`\"\"\n+    $args += \" `\"-out:$testResultsDir`\"\"\n+    $args += \" -nocache\"\n+    $args += \" -tfm:net472\"\n+\n+    if ($testDesktop -or $testIOperation) {\n+        if ($test32) {\n+            $dlls = Get-ChildItem -Recurse -Include \"*.UnitTests.dll\" $binDir\n+        } else {\n+            $dlls = Get-ChildItem -Recurse -Include \"*.UnitTests.dll\" -Exclude \"*InteractiveHost*\" $binDir\n+        }\n+    }\n+    elseif ($testVsi) {\n+        # Since they require Visual Studio to be installed, ensure that the MSBuildWorkspace tests run along with our VS\n+        # integration tests in CI.\n+        if ($ci) {\n+            $dlls += @(Get-Item (GetProjectOutputBinary \"Microsoft.CodeAnalysis.Workspaces.MSBuild.UnitTests.dll\"))\n+        }\n+\n+        $dlls += @(Get-ChildItem -Recurse -Include \"*.IntegrationTests.dll\" $binDir)\n+    } else {\n+        $dlls = Get-ChildItem -Recurse -Include \"*.IntegrationTests.dll\" $binDir\n+        $args += \" -trait:Feature=NetCore\"\n+    }\n+\n+    # Exclude out the multi-targetted netcore app projects\n+    $dlls = $dlls | ?{ -not ($_.FullName -match \".*netcoreapp.*\") }\n+\n+    # Exclude out the ref assemblies\n+    $dlls = $dlls | ?{ -not ($_.FullName -match \".*\\\\ref\\\\.*\") }\n+    $dlls = $dlls | ?{ -not ($_.FullName -match \".*/ref/.*\") }\n+\n+    if ($ci) {\n+        $args += \" -xml -timeout:65\"\n+    }\n+\n+    $procdumpPath = Ensure-ProcDump\n+    $args += \" -procdumppath:$procDumpPath\"\n+    if ($procdump) {\n+        $args += \" -useprocdump\";\n+    }\n+\n+    if ($test64) {\n+        $args += \" -test64\"\n+    }\n+\n+    foreach ($dll in $dlls) {\n+        $args += \" $dll\"\n+    }\n+\n+    try {\n+        Exec-Console $runTests $args\n+    } finally {\n+        Get-Process \"xunit*\" -ErrorAction SilentlyContinue | Stop-Process\n+        if ($testIOperation) {\n+            Remove-Item env:\\ROSLYN_TEST_IOPERATION\n+        }\n+    }\n+}\n+\n+# Deploy our core VSIX libraries to Visual Studio via the Roslyn VSIX tool.  This is an alternative to\n+# deploying at build time.\n+function Deploy-VsixViaTool() { \n+    $vsixDir = Get-PackageDir \"RoslynTools.VSIXExpInstaller\"\n+    $vsixExe = Join-Path $vsixDir \"tools\\VsixExpInstaller.exe\"\n+    \n+    $vsInfo = LocateVisualStudio\n+    if ($vsInfo -eq $null) {\n+        throw \"Unable to locate required Visual Studio installation\"\n+    }\n+\n+    $vsDir = $vsInfo.installationPath.TrimEnd(\"\\\")\n+    $vsId = $vsInfo.instanceId\n+    $vsMajorVersion = $vsInfo.installationVersion.Split('.')[0]\n+\n+    $hive = \"RoslynDev\"\n+    Write-Host \"Using VS Instance $vsId at `\"$vsDir`\"\"\n+    $baseArgs = \"/rootSuffix:$hive /vsInstallDir:`\"$vsDir`\"\"\n+\n+    Write-Host \"Uninstalling old Roslyn VSIX\"\n+\n+    # Actual uninstall is failing at the moment using the uninstall options. Temporarily using\n+    # wildfire to uninstall our VSIX extensions\n+    $extDir = Join-Path ${env:USERPROFILE} \"AppData\\Local\\Microsoft\\VisualStudio\\$vsMajorVersion.0_$vsid$hive\"\n+    if (Test-Path $extDir) {\n+        foreach ($dir in Get-ChildItem -Directory $extDir) {\n+            $name = Split-Path -leaf $dir\n+            Write-Host \"`tUninstalling $name\"\n+        }\n+        Remove-Item -re -fo $extDir\n+    }\n+\n+    Write-Host \"Installing all Roslyn VSIX\"\n+\n+    # VSIX files need to be installed in this specific order:\n+    $orderedVsixFileNames = @(\t\n+        \"Roslyn.Compilers.Extension.vsix\",\n+        \"Roslyn.VisualStudio.Setup.vsix\",\n+        \"Roslyn.VisualStudio.Setup.Dependencies.vsix\",\n+        \"Roslyn.VisualStudio.InteractiveComponents.vsix\",\n+        \"ExpressionEvaluatorPackage.vsix\",\n+        \"Roslyn.VisualStudio.DiagnosticsWindow.vsix\",\n+        \"Microsoft.VisualStudio.IntegrationTest.Setup.vsix\")\n+\n+    foreach ($vsixFileName in $orderedVsixFileNames) {\n+        $vsixFile = Join-Path $VSSetupDir $vsixFileName\n+        $fullArg = \"$baseArgs $vsixFile\"\n+        Write-Host \"`tInstalling $vsixFileName\"\n+        Exec-Console $vsixExe $fullArg\n+    }\n+}\n+\n+# Ensure that procdump is available on the machine.  Returns the path to the directory that contains\n+# the procdump binaries (both 32 and 64 bit)\n+function Ensure-ProcDump() {\n+\n+    # Jenkins images default to having procdump installed in the root.  Use that if available to avoid\n+    # an unnecessary download.\n+    if (Test-Path \"C:\\SysInternals\\procdump.exe\") {\n+        return \"C:\\SysInternals\"\n+    }\n+\n+    $outDir = Join-Path $ToolsDir \"ProcDump\"\n+    $filePath = Join-Path $outDir \"procdump.exe\"\n+    if (-not (Test-Path $filePath)) {\n+        Remove-Item -Re $filePath -ErrorAction SilentlyContinue\n+        Create-Directory $outDir\n+        $zipFilePath = Join-Path $toolsDir \"procdump.zip\"\n+        Invoke-WebRequest \"https://download.sysinternals.com/files/Procdump.zip\" -UseBasicParsing -outfile $zipFilePath | Out-Null\n+        Unzip $zipFilePath $outDir\n+    }\n+\n+    return $outDir\n+}\n+\n+function Prepare-TempDir() {\n+    Copy-Item (Join-Path $RepoRoot \"src\\Workspaces\\CoreTestUtilities\\Resources\\.editorconfig\") $TempDir\n+    Copy-Item (Join-Path $RepoRoot \"src\\Workspaces\\CoreTestUtilities\\Resources\\Directory.Build.props\") $TempDir\n+    Copy-Item (Join-Path $RepoRoot \"src\\Workspaces\\CoreTestUtilities\\Resources\\Directory.Build.targets\") $TempDir\n+    Copy-Item (Join-Path $RepoRoot \"src\\Workspaces\\CoreTestUtilities\\Resources\\Directory.Build.rsp\") $TempDir\n+    Copy-Item (Join-Path $RepoRoot \"src\\Workspaces\\CoreTestUtilities\\Resources\\NuGet.Config\") $TempDir\n+}\n+\n+function List-Processes() {\n+    Write-Host \"Listing running build processes...\"\n+    Get-Process -Name \"msbuild\" -ErrorAction SilentlyContinue | Out-Host\n+    Get-Process -Name \"vbcscompiler\" -ErrorAction SilentlyContinue | Out-Host\n+    Get-Process -Name \"dotnet\" -ErrorAction SilentlyContinue | where { $_.Modules | select { $_.ModuleName -eq \"VBCSCompiler.dll\" } } | Out-Host\n+    Get-Process -Name \"devenv\" -ErrorAction SilentlyContinue | Out-Host\n+}\n+\n+try {\n+    Process-Arguments\n+\n+    . (Join-Path $PSScriptRoot \"build-utils.ps1\")\n+\n+    if ($testVsi) {\n+        $ProcessesToStopOnExit += \"devenv\"\n+    }\n+\n+    Push-Location $RepoRoot\n+\n+    if ($ci) {\n+        List-Processes\n+        Prepare-TempDir\n+    }\n+\n+    if ($bootstrap) {\n+        $bootstrapDir = Make-BootstrapBuild\n+    }\n+\n+    if ($restore -or $build -or $rebuild -or $pack -or $sign -or $publish -or $testCoreClr) {\n+        BuildSolution\n+    }\n+    \n+    if ($build -and $pack -and $official) {\n+        Build-OptProfData\n+    }\n+\n+    if ($testDesktop -or $testVsi -or $testIOperation) {\n+        TestUsingOptimizedRunner\n+    }\n+\n+    if ($launch) {\n+        $devenvExe = Join-Path $env:VSINSTALLDIR 'Common7\\IDE\\devenv.exe'\n+        &$devenvExe /rootSuffix RoslynDev","path":"eng/build.ps1","position":404,"original_position":404,"commit_id":"54a1ef274b37ea1c9aa3499493eecb240c7d095e","original_commit_id":"54a1ef274b37ea1c9aa3499493eecb240c7d095e","user":{"login":"tmat","id":41759,"node_id":"MDQ6VXNlcjQxNzU5","avatar_url":"https://avatars0.githubusercontent.com/u/41759?v=4","gravatar_id":"","url":"https://api.github.com/users/tmat","html_url":"https://github.com/tmat","followers_url":"https://api.github.com/users/tmat/followers","following_url":"https://api.github.com/users/tmat/following{/other_user}","gists_url":"https://api.github.com/users/tmat/gists{/gist_id}","starred_url":"https://api.github.com/users/tmat/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tmat/subscriptions","organizations_url":"https://api.github.com/users/tmat/orgs","repos_url":"https://api.github.com/users/tmat/repos","events_url":"https://api.github.com/users/tmat/events{/privacy}","received_events_url":"https://api.github.com/users/tmat/received_events","type":"User","site_admin":false},"body":"Not sure why we have it but I'll update it to use `Exec-Process`","created_at":"2018-12-06T17:47:01Z","updated_at":"2018-12-06T17:47:01Z","html_url":"https://github.com/dotnet/roslyn/pull/31560#discussion_r239549204","pull_request_url":"https://api.github.com/repos/dotnet/roslyn/pulls/31560","author_association":"MEMBER","_links":{"self":{"href":"https://api.github.com/repos/dotnet/roslyn/pulls/comments/239549204"},"html":{"href":"https://github.com/dotnet/roslyn/pull/31560#discussion_r239549204"},"pull_request":{"href":"https://api.github.com/repos/dotnet/roslyn/pulls/31560"}},"in_reply_to_id":239533736},"pull_request":{"url":"https://api.github.com/repos/dotnet/roslyn/pulls/31560","id":236347456,"node_id":"MDExOlB1bGxSZXF1ZXN0MjM2MzQ3NDU2","html_url":"https://github.com/dotnet/roslyn/pull/31560","diff_url":"https://github.com/dotnet/roslyn/pull/31560.diff","patch_url":"https://github.com/dotnet/roslyn/pull/31560.patch","issue_url":"https://api.github.com/repos/dotnet/roslyn/issues/31560","number":31560,"state":"open","locked":false,"title":"WIP: Arcade layout","user":{"login":"tmat","id":41759,"node_id":"MDQ6VXNlcjQxNzU5","avatar_url":"https://avatars0.githubusercontent.com/u/41759?v=4","gravatar_id":"","url":"https://api.github.com/users/tmat","html_url":"https://github.com/tmat","followers_url":"https://api.github.com/users/tmat/followers","following_url":"https://api.github.com/users/tmat/following{/other_user}","gists_url":"https://api.github.com/users/tmat/gists{/gist_id}","starred_url":"https://api.github.com/users/tmat/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tmat/subscriptions","organizations_url":"https://api.github.com/users/tmat/orgs","repos_url":"https://api.github.com/users/tmat/repos","events_url":"https://api.github.com/users/tmat/events{/privacy}","received_events_url":"https://api.github.com/users/tmat/received_events","type":"User","site_admin":false},"body":"Fixes https://github.com/dotnet/roslyn/issues/23547","created_at":"2018-12-05T22:39:23Z","updated_at":"2018-12-06T17:47:01Z","closed_at":null,"merged_at":null,"merge_commit_sha":"53a91570273b5a9d21776f6c3515cf534b1a5779","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[{"name":"roslyn-ide","id":1781706,"node_id":"MDQ6VGVhbTE3ODE3MDY=","slug":"roslyn-ide","description":"Roslyn IDE Team","privacy":"closed","url":"https://api.github.com/teams/1781706","members_url":"https://api.github.com/teams/1781706/members{/member}","repositories_url":"https://api.github.com/teams/1781706/repos","permission":"pull"},{"name":"roslyn-interactive","id":1803183,"node_id":"MDQ6VGVhbTE4MDMxODM=","slug":"roslyn-interactive","description":"C# & VB Interactive (scripting, debugging, etc)","privacy":"closed","url":"https://api.github.com/teams/1803183","members_url":"https://api.github.com/teams/1803183/members{/member}","repositories_url":"https://api.github.com/teams/1803183/repos","permission":"pull"},{"name":"roslyn-infrastructure","id":1823403,"node_id":"MDQ6VGVhbTE4MjM0MDM=","slug":"roslyn-infrastructure","description":"Permanent and temporary Roslyn infrastructure swat team members","privacy":"closed","url":"https://api.github.com/teams/1823403","members_url":"https://api.github.com/teams/1823403/members{/member}","repositories_url":"https://api.github.com/teams/1823403/repos","permission":"pull"}],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/dotnet/roslyn/pulls/31560/commits","review_comments_url":"https://api.github.com/repos/dotnet/roslyn/pulls/31560/comments","review_comment_url":"https://api.github.com/repos/dotnet/roslyn/pulls/comments{/number}","comments_url":"https://api.github.com/repos/dotnet/roslyn/issues/31560/comments","statuses_url":"https://api.github.com/repos/dotnet/roslyn/statuses/54a1ef274b37ea1c9aa3499493eecb240c7d095e","head":{"label":"tmat:Layout","ref":"Layout","sha":"54a1ef274b37ea1c9aa3499493eecb240c7d095e","user":{"login":"tmat","id":41759,"node_id":"MDQ6VXNlcjQxNzU5","avatar_url":"https://avatars0.githubusercontent.com/u/41759?v=4","gravatar_id":"","url":"https://api.github.com/users/tmat","html_url":"https://github.com/tmat","followers_url":"https://api.github.com/users/tmat/followers","following_url":"https://api.github.com/users/tmat/following{/other_user}","gists_url":"https://api.github.com/users/tmat/gists{/gist_id}","starred_url":"https://api.github.com/users/tmat/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tmat/subscriptions","organizations_url":"https://api.github.com/users/tmat/orgs","repos_url":"https://api.github.com/users/tmat/repos","events_url":"https://api.github.com/users/tmat/events{/privacy}","received_events_url":"https://api.github.com/users/tmat/received_events","type":"User","site_admin":false},"repo":{"id":30440379,"node_id":"MDEwOlJlcG9zaXRvcnkzMDQ0MDM3OQ==","name":"roslyn","full_name":"tmat/roslyn","private":false,"owner":{"login":"tmat","id":41759,"node_id":"MDQ6VXNlcjQxNzU5","avatar_url":"https://avatars0.githubusercontent.com/u/41759?v=4","gravatar_id":"","url":"https://api.github.com/users/tmat","html_url":"https://github.com/tmat","followers_url":"https://api.github.com/users/tmat/followers","following_url":"https://api.github.com/users/tmat/following{/other_user}","gists_url":"https://api.github.com/users/tmat/gists{/gist_id}","starred_url":"https://api.github.com/users/tmat/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tmat/subscriptions","organizations_url":"https://api.github.com/users/tmat/orgs","repos_url":"https://api.github.com/users/tmat/repos","events_url":"https://api.github.com/users/tmat/events{/privacy}","received_events_url":"https://api.github.com/users/tmat/received_events","type":"User","site_admin":false},"html_url":"https://github.com/tmat/roslyn","description":"The .NET Compiler Platform (\"Roslyn\") provides open-source C# and Visual Basic compilers with rich code analysis APIs.","fork":true,"url":"https://api.github.com/repos/tmat/roslyn","forks_url":"https://api.github.com/repos/tmat/roslyn/forks","keys_url":"https://api.github.com/repos/tmat/roslyn/keys{/key_id}","collaborators_url":"https://api.github.com/repos/tmat/roslyn/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/tmat/roslyn/teams","hooks_url":"https://api.github.com/repos/tmat/roslyn/hooks","issue_events_url":"https://api.github.com/repos/tmat/roslyn/issues/events{/number}","events_url":"https://api.github.com/repos/tmat/roslyn/events","assignees_url":"https://api.github.com/repos/tmat/roslyn/assignees{/user}","branches_url":"https://api.github.com/repos/tmat/roslyn/branches{/branch}","tags_url":"https://api.github.com/repos/tmat/roslyn/tags","blobs_url":"https://api.github.com/repos/tmat/roslyn/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/tmat/roslyn/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/tmat/roslyn/git/refs{/sha}","trees_url":"https://api.github.com/repos/tmat/roslyn/git/trees{/sha}","statuses_url":"https://api.github.com/repos/tmat/roslyn/statuses/{sha}","languages_url":"https://api.github.com/repos/tmat/roslyn/languages","stargazers_url":"https://api.github.com/repos/tmat/roslyn/stargazers","contributors_url":"https://api.github.com/repos/tmat/roslyn/contributors","subscribers_url":"https://api.github.com/repos/tmat/roslyn/subscribers","subscription_url":"https://api.github.com/repos/tmat/roslyn/subscription","commits_url":"https://api.github.com/repos/tmat/roslyn/commits{/sha}","git_commits_url":"https://api.github.com/repos/tmat/roslyn/git/commits{/sha}","comments_url":"https://api.github.com/repos/tmat/roslyn/comments{/number}","issue_comment_url":"https://api.github.com/repos/tmat/roslyn/issues/comments{/number}","contents_url":"https://api.github.com/repos/tmat/roslyn/contents/{+path}","compare_url":"https://api.github.com/repos/tmat/roslyn/compare/{base}...{head}","merges_url":"https://api.github.com/repos/tmat/roslyn/merges","archive_url":"https://api.github.com/repos/tmat/roslyn/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/tmat/roslyn/downloads","issues_url":"https://api.github.com/repos/tmat/roslyn/issues{/number}","pulls_url":"https://api.github.com/repos/tmat/roslyn/pulls{/number}","milestones_url":"https://api.github.com/repos/tmat/roslyn/milestones{/number}","notifications_url":"https://api.github.com/repos/tmat/roslyn/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/tmat/roslyn/labels{/name}","releases_url":"https://api.github.com/repos/tmat/roslyn/releases{/id}","deployments_url":"https://api.github.com/repos/tmat/roslyn/deployments","created_at":"2015-02-07T01:09:01Z","updated_at":"2018-12-05T02:58:06Z","pushed_at":"2018-12-06T17:43:09Z","git_url":"git://github.com/tmat/roslyn.git","ssh_url":"git@github.com:tmat/roslyn.git","clone_url":"https://github.com/tmat/roslyn.git","svn_url":"https://github.com/tmat/roslyn","homepage":"","size":452996,"stargazers_count":0,"watchers_count":0,"language":"C#","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":0,"license":{"key":"apache-2.0","name":"Apache License 2.0","spdx_id":"Apache-2.0","url":"https://api.github.com/licenses/apache-2.0","node_id":"MDc6TGljZW5zZTI="},"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"dotnet:master","ref":"master","sha":"7a31585286ffe79c2262f383ee1b773fa262f943","user":{"login":"dotnet","id":9141961,"node_id":"MDEyOk9yZ2FuaXphdGlvbjkxNDE5NjE=","avatar_url":"https://avatars0.githubusercontent.com/u/9141961?v=4","gravatar_id":"","url":"https://api.github.com/users/dotnet","html_url":"https://github.com/dotnet","followers_url":"https://api.github.com/users/dotnet/followers","following_url":"https://api.github.com/users/dotnet/following{/other_user}","gists_url":"https://api.github.com/users/dotnet/gists{/gist_id}","starred_url":"https://api.github.com/users/dotnet/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dotnet/subscriptions","organizations_url":"https://api.github.com/users/dotnet/orgs","repos_url":"https://api.github.com/users/dotnet/repos","events_url":"https://api.github.com/users/dotnet/events{/privacy}","received_events_url":"https://api.github.com/users/dotnet/received_events","type":"Organization","site_admin":false},"repo":{"id":29078997,"node_id":"MDEwOlJlcG9zaXRvcnkyOTA3ODk5Nw==","name":"roslyn","full_name":"dotnet/roslyn","private":false,"owner":{"login":"dotnet","id":9141961,"node_id":"MDEyOk9yZ2FuaXphdGlvbjkxNDE5NjE=","avatar_url":"https://avatars0.githubusercontent.com/u/9141961?v=4","gravatar_id":"","url":"https://api.github.com/users/dotnet","html_url":"https://github.com/dotnet","followers_url":"https://api.github.com/users/dotnet/followers","following_url":"https://api.github.com/users/dotnet/following{/other_user}","gists_url":"https://api.github.com/users/dotnet/gists{/gist_id}","starred_url":"https://api.github.com/users/dotnet/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dotnet/subscriptions","organizations_url":"https://api.github.com/users/dotnet/orgs","repos_url":"https://api.github.com/users/dotnet/repos","events_url":"https://api.github.com/users/dotnet/events{/privacy}","received_events_url":"https://api.github.com/users/dotnet/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/dotnet/roslyn","description":"The Roslyn .NET compiler provides C# and Visual Basic languages with rich code analysis APIs.","fork":false,"url":"https://api.github.com/repos/dotnet/roslyn","forks_url":"https://api.github.com/repos/dotnet/roslyn/forks","keys_url":"https://api.github.com/repos/dotnet/roslyn/keys{/key_id}","collaborators_url":"https://api.github.com/repos/dotnet/roslyn/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/dotnet/roslyn/teams","hooks_url":"https://api.github.com/repos/dotnet/roslyn/hooks","issue_events_url":"https://api.github.com/repos/dotnet/roslyn/issues/events{/number}","events_url":"https://api.github.com/repos/dotnet/roslyn/events","assignees_url":"https://api.github.com/repos/dotnet/roslyn/assignees{/user}","branches_url":"https://api.github.com/repos/dotnet/roslyn/branches{/branch}","tags_url":"https://api.github.com/repos/dotnet/roslyn/tags","blobs_url":"https://api.github.com/repos/dotnet/roslyn/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/dotnet/roslyn/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/dotnet/roslyn/git/refs{/sha}","trees_url":"https://api.github.com/repos/dotnet/roslyn/git/trees{/sha}","statuses_url":"https://api.github.com/repos/dotnet/roslyn/statuses/{sha}","languages_url":"https://api.github.com/repos/dotnet/roslyn/languages","stargazers_url":"https://api.github.com/repos/dotnet/roslyn/stargazers","contributors_url":"https://api.github.com/repos/dotnet/roslyn/contributors","subscribers_url":"https://api.github.com/repos/dotnet/roslyn/subscribers","subscription_url":"https://api.github.com/repos/dotnet/roslyn/subscription","commits_url":"https://api.github.com/repos/dotnet/roslyn/commits{/sha}","git_commits_url":"https://api.github.com/repos/dotnet/roslyn/git/commits{/sha}","comments_url":"https://api.github.com/repos/dotnet/roslyn/comments{/number}","issue_comment_url":"https://api.github.com/repos/dotnet/roslyn/issues/comments{/number}","contents_url":"https://api.github.com/repos/dotnet/roslyn/contents/{+path}","compare_url":"https://api.github.com/repos/dotnet/roslyn/compare/{base}...{head}","merges_url":"https://api.github.com/repos/dotnet/roslyn/merges","archive_url":"https://api.github.com/repos/dotnet/roslyn/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/dotnet/roslyn/downloads","issues_url":"https://api.github.com/repos/dotnet/roslyn/issues{/number}","pulls_url":"https://api.github.com/repos/dotnet/roslyn/pulls{/number}","milestones_url":"https://api.github.com/repos/dotnet/roslyn/milestones{/number}","notifications_url":"https://api.github.com/repos/dotnet/roslyn/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/dotnet/roslyn/labels{/name}","releases_url":"https://api.github.com/repos/dotnet/roslyn/releases{/id}","deployments_url":"https://api.github.com/repos/dotnet/roslyn/deployments","created_at":"2015-01-11T02:39:03Z","updated_at":"2018-12-06T17:43:43Z","pushed_at":"2018-12-06T17:43:04Z","git_url":"git://github.com/dotnet/roslyn.git","ssh_url":"git@github.com:dotnet/roslyn.git","clone_url":"https://github.com/dotnet/roslyn.git","svn_url":"https://github.com/dotnet/roslyn","homepage":"https://docs.microsoft.com/dotnet/csharp/roslyn-sdk/","size":497327,"stargazers_count":10448,"watchers_count":10448,"language":"C#","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":2483,"mirror_url":null,"archived":false,"open_issues_count":5476,"license":{"key":"apache-2.0","name":"Apache License 2.0","spdx_id":"Apache-2.0","url":"https://api.github.com/licenses/apache-2.0","node_id":"MDc6TGljZW5zZTI="},"forks":2483,"open_issues":5476,"watchers":10448,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/dotnet/roslyn/pulls/31560"},"html":{"href":"https://github.com/dotnet/roslyn/pull/31560"},"issue":{"href":"https://api.github.com/repos/dotnet/roslyn/issues/31560"},"comments":{"href":"https://api.github.com/repos/dotnet/roslyn/issues/31560/comments"},"review_comments":{"href":"https://api.github.com/repos/dotnet/roslyn/pulls/31560/comments"},"review_comment":{"href":"https://api.github.com/repos/dotnet/roslyn/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/dotnet/roslyn/pulls/31560/commits"},"statuses":{"href":"https://api.github.com/repos/dotnet/roslyn/statuses/54a1ef274b37ea1c9aa3499493eecb240c7d095e"}},"author_association":"MEMBER"}}
{"actor":{"display_login":"tmat"}}