{"action":"created","comment":{"url":"https://api.github.com/repos/fsharp/FAKE/pulls/comments/187431648","pull_request_review_id":119212590,"id":187431648,"diff_hunk":"@@ -0,0 +1,449 @@\n+﻿/// Contains tasks to compiles F# source file with the [FSharp.Compiler.Service](https://github.com/fsharp/FSharp.Compiler.Service).\n+/// There is also a tutorial about the [F# compiler tasks](../fsc.html) available.\n+[<RequireQualifiedAccess>]\n+module Fake.DotNet.Fsc\n+\n+open System\n+open Microsoft.FSharp.Compiler.SourceCodeServices\n+open Fake.IO\n+open Fake.Core\n+\n+//Aliases\n+module FakeString = Fake.Core.String\n+\n+type TargetType = \n+    /// Build a console executable\n+    | Exe\n+    ///  Build a Windows executable\n+    | Winexe\n+    /// Build a library\n+    | Library\n+    /// Build a module that can be added to another assembly (.netmodule)\n+    | Module\n+    override self.ToString () =\n+        match self with\n+        | Exe     -> \"exe\"\n+        | Winexe  -> \"winexe\"\n+        | Library -> \"library\"\n+        | Module  -> \"module\"\n+\n+\n+/// Limit which platforms the compiled code can run on: \n+///     x86, Itanium, x64, anycpu32bitpreferred, or anycpu. \n+/// The default is anycpu.\n+type PlatformType = \n+    | X86 | Itanium | X64 | AnyCpu32BitPreferred | AnyCpu\n+    override self.ToString () =\n+        match self with\n+        | X86                  -> \"x86\" \n+        | Itanium              -> \"Itanium\"\n+        | X64                  -> \"x64\"\n+        | AnyCpu32BitPreferred -> \"anycpu32bitpreferred\"\n+        | AnyCpu               -> \"anycpu\"\n+\n+/// Specify debugging type: full, pdbonly. \n+/// ('full' is the default and enables attaching a debugger to a running program).\n+type DebugType = \n+    | Full | PdbOnly\n+    override self.ToString () =\n+        (function Full -> \"full\" | PdbOnly -> \"pdbonly\") self\n+\n+/// Specify target framework profile of this assembly. \n+/// Valid values are mscorlib or netcore. Default - mscorlib\n+type Profile = \n+    | MsCorlib | Netcore\n+    override self.ToString () =\n+        (function MsCorlib -> \"mscorlib\" | Netcore -> \"netcore\") self\n+\n+/// Used to set the Accessiblity of an embeded or linked resource \n+type Access = \n+    | Public | Private\n+    override self.ToString () =\n+        (function Public -> \"public\" | Private -> \"private\") self\n+\n+\n+/// Optimization options that can be disabled or enabled selectively by listing them\n+/// with the optimize compiler flag\n+type Optimization =\n+    | NoJitOptimize | NoJitTracking | NoLocalOptimize | NoCrossoptimize | NoTailcalls\n+    override self.ToString () =\n+        match self with\n+        | NoJitOptimize    -> \"nojitoptimize\" \n+        | NoJitTracking    -> \"nojittracking\"\n+        | NoLocalOptimize  -> \"nolocaloptimize\"\n+        | NoCrossoptimize  -> \"nocrossoptimize\"\n+        | NoTailcalls      -> \"notailcalls\"\n+\n+\n+/// Specified path of a managed resource with an optional name alias and accessiblity flag\n+/// resinfo format is <file>[,<stringname>[,public|private]]\n+/// e.g. `resource.dat,rezName,public`\n+type ResourceInfo = string * string option * Access option\n+\n+let resourceStr ((file, name, access):ResourceInfo) =\n+    match file, name, access with\n+    | f, None   , None      -> f\n+    | f, Some n , None      -> sprintf \"%s,%s\" f n\n+    | f, None   , Some a    -> sprintf \"%s,%s\" f (string a)\n+    | f, Some n , Some a    -> sprintf \"%s,%s,%s\" f n (string a)\n+\n+type FscParam =\n+(* - OUTPUT FILES - *)\n+    /// Name of the output file\n+    | Out of file:string\n+    /// The 'fsc.exe' output target types : exe, winexe, library, module\n+    | Target of TargetType\n+    /// Delay-sign the assembly using only the public portion of the strong name key\n+    | DelaySign of on:bool\n+    /// Write the xmldoc of the assembly to the given file\n+    | Doc of file:string\n+    /// Specify a strong name key file\n+    | KeyFile of file:string\n+    /// Specify a strong name key container\n+    | KeyContainer of name:string\n+    /// Limit which platforms the compiled code can run on: \n+    | Platform of platform:PlatformType\n+    /// Only include optimization information essential for implementing inlined constructs. \n+    /// Inhibits cross-module inlining but improves binary compatibility.\n+    | NoOptimizationData\n+    /// Don't add a resource to the generated assembly containing F#-specific metadata\n+    | NoInterfacedata\n+    /// Print the inferred interface of the assembly to a file\n+    | Sig of file:string\n+\n+(* - INPUT FILES - *)\n+    /// Reference an assembly\n+    | Reference of dllPath:string\n+    /// Reference assemblies in the order listed\n+    | References of dllPaths:string list\n+\n+(* - RESOURCES - *)\n+    /// Specify a Win32 resource file (.res)\n+    | Win32res of file:string\n+    /// Specify a Win32 manifest file\n+    | Win32Manifest of file:string\n+    /// Do not include the default Win32 manifest\n+    | NoWin32Manifest\n+    /// Embed the specified managed resource\n+    | Resource of resInfo:ResourceInfo\n+    /// Link the specified resource to this assembly\n+    | LinkResource of resInfo:ResourceInfo\n+\n+(* - CODE GENERATION - *)\n+    /// Emit debug information\n+    | Debug of on:bool\n+    /// Specify debugging type: full, pdbonly. \n+    /// ('full' is the default and enables attaching a debugger to a running program).\n+    | DebugType of debugType:DebugType\n+    /// Enable optimizations\n+    | Optimize of on:bool * optimizations:Optimization list\n+    /// Enable or disable tailcalls\n+    | Tailcalls of on:bool\n+    /// Enable or disable cross-module optimizations\n+    | CrossOptimize of on:bool\n+\n+(* - ERRORS AND WARNINGS - *)\n+    /// Report all warnings as errors\n+    | WarnAsError of on:bool\n+    /// Report specific warnings as errors\n+    | WarnAsErrors of on:bool * warningCodes:int list\n+    /// Set a warning level (0-5)\n+    | Warn of level:int\n+    /// Disable specific warning messages\n+    | NoWarn of warningCodes:int list\n+    /// Enable specific warnings that may be off by default\n+    | WarnOn of warningCodes:int list\n+    /// Output warning and error messages in color\n+    | ConsoleColors of on:bool\n+\n+(* - LANGUAGE - *)\n+    /// Generate overflow checks\n+    | Checked of on:bool\n+    /// Define a conditional compilation symbols\n+    | Define of symbol:string\n+    /// Define a list of conditional compilation symbols\n+    | Definitions of symbols: string list\n+    /// Ignore ML compatibility warnings\n+    | MLCompatibility\n+\n+(* - MISCELLANEOUS - *)\n+    /// Suppress compiler copyright message\n+    | NoLogo\n+    ///  Display the commandline flags and their usage\n+    | Help\n+\n+(* - ADVANCED - *)\n+    /// Specify the codepage used to read source files\n+    | Codepage of n:int \n+    /// Displays timing information for compilation.\n+    | Times\n+    /// Output messages in UTF-8 encoding\n+    | Utf8Output\n+    /// Output messages with fully qualified paths\n+    | FullPaths\n+    ///  Specify a directory for the include path which is used to resolve source files and assemblies\n+    | Lib of directories:string list\n+    /// Base address for the library to be built\n+    | BaseAddress of address:string\n+    /// Do not reference the default CLI assemblies by default\n+    | NoFramework\n+    /// Statically link the F# library and all referenced DLLs \n+    /// that depend on it into the assembly being generated\n+    | Standalone\n+    /// Statically link the given assembly and all referenced DLLs that depend on this assembly. \n+    /// Use an assembly name e.g. mylib, not a DLL name.\n+    | StaticLink of assemblyName:string\n+    /// Name the output debug file\n+    | Pdb of debugFile:string\n+    /// Resolve assembly references using directory-based rules rather than MSBuild resolution\n+    | SimpleResolution\n+    /// Enable high-entropy ASLR\n+    | HighEntropyVA of on:bool\n+    /// Specifies the version of the OS subsystem to be used by the generated executable. \n+    /// Use 6.02 for Windows 8, 6.01 for Windows 7, 6.00 for Windows Vista. \n+    /// This option only applies to executables, not DLL  and need only be used if your application \n+    /// depends on specific security features available only on certain versions of the OS\n+    | SubsystemVersion of version:string\n+    /// Specify target framework profile of this assembly.\n+    | TargetProfile of profile:Profile\n+    /// Emit debug information in quotations\n+    | QuotationsDebug of on:bool\n+\n+    override self.ToString () =\n+        // commandline formatting helper functions \n+        /// format a standalone compiler arg: \"--%s\"\n+        let arg s = sprintf \"--%s\" s\n+        /// format a compiler arg with a parameter: \"--%s:%s\"\n+        let argp s p = sprintf \"--%s:%s\" s p            \n+        /// format a short form compiler arg with a parameter: \"-%s:%s\"\n+        let sargp s p = sprintf \"-%s:%s\" s p  // for short forms          \n+        /// helper function to convert a bool to a \"+\" or \"-\"\n+        let inline chk b = if b then \"+\" else \"-\"\n+        /// format a compiler arg that ends with \"+\" or \"-\": \"--%s%s\"\n+        let togl s b = sprintf \"--%s%s\" s (chk b)\n+        /// format a short form compiler arg that ends with \"+\" or \"-\": \"-%s%s\"\n+        let stogl s b = if b then sprintf \"-%s\" s else \"\" // for short forms       \n+        /// format a list of compiler args with string parameters \"--%s:\\\"%s\\\"\"   \n+        let argls s (ls:string list) = sprintf \"--%s:\\\"%s\\\"\" s (String.concat \";\" ls)\n+        /// format a compiler arg that ends with \"+\" or \"-\" with string parameters  \"--%s%s:\\\"%s\\\"\"\n+        let inline toglls s b (ls:'a list) = \n+            sprintf \"--%s%s:\\\"%s\\\"\" s  (chk b) (String.concat \";\" (List.map string ls))\n+        /// format a list of short form complier args using the same symbol \n+        let sargmap sym ls = ls |> List.map (sargp sym) |> String.concat \";\" \n+\n+        match self with\n+        | Out file -> argp \"out\" file\n+        | Target t -> argp \"target\" <| string t\n+        | DelaySign on -> togl \"delaysign\" on\n+        | Doc file ->  argp \"doc\" file\n+        | KeyFile file -> argp \"keyfile\" file\n+        | KeyContainer name -> argp \"keycontainer\" name\n+        | Platform p -> argp \"platform\" <| string p\n+        | NoOptimizationData -> arg \"nooptimizationdata\"\n+        | NoInterfacedata -> arg \"nointerfacedata\"\n+        | Sig file -> argp \"sig\" file\n+        | Reference dllPath -> sargp \"r\" dllPath\n+        | References dllPaths -> \n+            dllPaths \n+            |> List.map (sargp \"r\" >> sprintf \"\\\"%s\\\"\") \n+            |> String.concat (sprintf \"; %s\" Environment.NewLine)\n+            |> (fun x -> x.Substring(1, x.Length - 2))\n+        | Win32res file -> argp \"win32res\" file\n+        | Win32Manifest file -> argp \"win32manifest\" file\n+        | NoWin32Manifest -> arg \"nowin32manifest\"\n+        | Resource rinfo -> argp \"resource\" <| resourceStr rinfo\n+        | LinkResource rinfo -> argp \"linkresource\" <| resourceStr rinfo\n+        | Debug on -> stogl \"g\" on\n+        | DebugType dt -> argp \"debug\" <| string dt\n+        | Optimize (on,opts)-> \n+            match opts with\n+            | [] -> stogl \"O\" on\n+            | _ -> toglls \"O\" on opts\n+        | Tailcalls on -> togl \"tailcalls\" on\n+        | CrossOptimize on -> togl \"crossoptimize\" on\n+        | WarnAsError on -> togl \"warnaserror\" on\n+        | WarnAsErrors (on, warningCodes) ->  toglls \"warnaserror\" on warningCodes\n+        | Warn lvl -> argp \"warn\" <| string (if lvl < 0 then 0 elif lvl > 5 then 5 else lvl)\n+        | NoWarn warningCodes -> argls \"nowarn\" (List.map string warningCodes)\n+        | WarnOn warningCodes -> argls \"warnon\" (List.map string warningCodes)\n+        | ConsoleColors on -> togl \"consolecolors\" on\n+        | Checked on -> togl \"checked\" on\n+        | Define symbol -> sargp \"d\" symbol\n+        | Definitions symbols -> sargmap \"d\" symbols\n+        | MLCompatibility -> arg \"mlcompatibility\"\n+        | NoLogo -> arg \"nologo\"\n+        | Help -> arg \"help\"\n+        | Codepage n -> argp \"codepage\" <| string n\n+        | Utf8Output -> arg \"utf8output\"\n+        | FullPaths -> arg \"fullpaths\"\n+        | Lib directories -> argls \"lib\" directories\n+        | BaseAddress address -> argp \"baseaddress\" address\n+        | NoFramework -> arg \"noframework\"\n+        | Standalone -> arg \"standalone\"\n+        | StaticLink file -> argp \"staticlink\" file\n+        | Pdb debugFile -> argp \"pdb\" debugFile\n+        | SimpleResolution -> arg \"simpleresolution\"\n+        | HighEntropyVA on -> togl \"highentropyva\" on\n+        | SubsystemVersion version -> argp \"subsystemversion\" version\n+        | TargetProfile profile -> argp \"targetprofile\" <| string profile\n+        | QuotationsDebug on -> togl \"quotations-debug\" on\n+        | Times -> arg \"times\"\n+\n+    static member Defaults =\n+        [   Out \"\" \n+            Target Exe\n+            Platform AnyCpu\n+            References []\n+            Debug false        \n+        ]\n+\n+///Common Error Result type for tracing errors\n+type FscResultMessage = \n+    | Warning of string \n+    | Error of string\n+\n+/// Type signature for a Compiler Function\n+type CompilerFunc = string [] -> ( FscResultMessage [] * int )\n+\n+\n+/// Computes output type and appends source files to argument list\n+let private makeArgsList (opts: string list) (srcFiles: string list) = \n+    let outputArg arg = arg = \"-o\" || arg.StartsWith(\"--out:\")\n+    let libTarget arg = arg = \"-a\" || arg = \"--target:library\"\n+    let hasOutputArg = Seq.exists outputArg\n+    let hasLibTarget = Seq.exists libTarget\n+\n+    // If output file name is specified, pass it on to fsc.\n+    if opts |> hasOutputArg \n+        then opts @ srcFiles\n+    // But if it's not, then figure out what it should be.\n+    else \n+        let outExt = if opts |> hasLibTarget then \".dll\" else \".exe\"\n+        \"-o\" :: Path.changeExtension outExt (List.head srcFiles) :: opts @ srcFiles\n+    |> Array.ofList\n+\n+/// Reports Fsc compile errors to the console using Fake.Core.Trace\n+let private reportErrors (errors: FscResultMessage []) = \n+    for e in errors do\n+        match e with\n+        | FscResultMessage.Warning errMsg -> Trace.traceImportant errMsg\n+        | FscResultMessage.Error errMsg -> Trace.traceError errMsg\n+\n+/// Compiles the given source files with the given options using either\n+/// the internal FCS or an external fsc.exe. If no options\n+/// given (i.e. the second argument is an empty list), by default tries\n+/// to behave the same way as would the command-line 'fsc.exe' tool.\n+let compileFiles (compiler: CompilerFunc) (srcFiles : string list) (opts : string list) : int = \n+    let optsArr = makeArgsList opts srcFiles\n+\n+    Trace.trace <| sprintf \"FSC with args:%A\" optsArr\n+    let errors, exitCode = compiler optsArr\n+    \n+    reportErrors errors\n+    exitCode\n+\n+/// Common compiler arg prep code\n+let private doCompile (compiler: CompilerFunc) (fscParams : FscParam list) (inputFiles : string list) : int = \n+    let inputFiles = inputFiles |> Seq.toList\n+    let taskDesc = inputFiles |> FakeString.separated \", \"\n+    let fscParams = if fscParams = [] then FscParam.Defaults else fscParams\n+    let argList = fscParams |> List.map string\n+\n+    use __ = Trace.traceTask \"Fsc \" taskDesc\n+    let res = compileFiles compiler inputFiles argList\n+    res\n+\n+\n+/// The internal FCS Compiler\n+let private scsCompile optsArr = \n+    let scs = FSharpChecker.Create()\n+    // Always prepend \"fsc.exe\" since fsc compiler skips the first argument\n+    let optsArr = Array.append [|\"fsc.exe\"|] optsArr\n+    let errors, exitcode = scs.Compile optsArr |> Async.RunSynchronously\n+\n+    /// Better compile reporting thanks to:\n+    /// https://github.com/jbtule/ComposableExtensions/blob/5b961b30668bb7f4d17238770869b5a884bc591f/tools/CompilerHelper.fsx#L233\n+    let errors = errors |> Array.map (fun (e: FSharpErrorInfo) -> \n+        match e.Severity with\n+            | FSharpErrorSeverity.Error -> FscResultMessage.Error e.Message\n+            | FSharpErrorSeverity.Warning -> FscResultMessage.Warning e.Message)\n+\n+    errors, exitcode\n+\n+/// Compiles the given F# source files with the specified parameters.\n+///\n+/// ## Parameters\n+///\n+///  - `setParams` - Function used to overwrite the default Fsc parameters.\n+///  - `inputFiles` - The F# input files.\n+///\n+/// ## Returns\n+///\n+/// The exit status code of the compile process.\n+///\n+/// ## Sample\n+///\n+///     [\"file1.fs\"; \"file2.fs\"]\n+///     |> compile [Out \"\" \n+///                 Target Exe\n+///                 Platform AnyCpu\n+///                 References []\n+///                 Debug false \n+///             ]\n+let compile (fscParams : FscParam list) (inputFiles : string list) : int = \n+    doCompile scsCompile fscParams inputFiles\n+\n+/// Compiles one or more F# source files with the specified parameters.\n+/// ## Parameters\n+///\n+///  - `setParams` - Function used to overwrite the default Fsc parameters.\n+///  - `inputFiles` - The F# input files.\n+///\n+/// ## Sample\n+///\n+///     [\"file1.fs\"; \"file2.fs\"]\n+///     |> Compile [Out \"\" \n+///                 Target Exe\n+///                 Platform AnyCpu\n+///                 References []\n+///                 Debug false \n+///             ]\n+let Compile (fscParams : FscParam list) (inputFiles : string list) : unit = \n+    let res = compile fscParams inputFiles\n+    if res <> 0 then raise <| BuildException(\"Fsc: compile failed with exit code\", [ string res ])\n+\n+\n+/// An externally referenced compiler\n+let private externalCompile (fscTool: string) (optsArr: string []) = \n+    let args = String.Join(\" \", optsArr)","path":"src/app/Fake.DotNet.Fsc/Fsc.fs","position":418,"original_position":418,"commit_id":"10637781d38cc2ff3c382f232f6c2961f7e428b6","original_commit_id":"10637781d38cc2ff3c382f232f6c2961f7e428b6","user":{"login":"matthid","id":1866463,"avatar_url":"https://avatars0.githubusercontent.com/u/1866463?v=4","gravatar_id":"","url":"https://api.github.com/users/matthid","html_url":"https://github.com/matthid","followers_url":"https://api.github.com/users/matthid/followers","following_url":"https://api.github.com/users/matthid/following{/other_user}","gists_url":"https://api.github.com/users/matthid/gists{/gist_id}","starred_url":"https://api.github.com/users/matthid/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/matthid/subscriptions","organizations_url":"https://api.github.com/users/matthid/orgs","repos_url":"https://api.github.com/users/matthid/repos","events_url":"https://api.github.com/users/matthid/events{/privacy}","received_events_url":"https://api.github.com/users/matthid/received_events","type":"User","site_admin":false},"body":"I just fixed the same in release/rc_12 branch","created_at":"2018-05-10T19:18:23Z","updated_at":"2018-05-10T19:18:24Z","html_url":"https://github.com/fsharp/FAKE/pull/1919#discussion_r187431648","pull_request_url":"https://api.github.com/repos/fsharp/FAKE/pulls/1919","author_association":"COLLABORATOR","_links":{"self":{"href":"https://api.github.com/repos/fsharp/FAKE/pulls/comments/187431648"},"html":{"href":"https://github.com/fsharp/FAKE/pull/1919#discussion_r187431648"},"pull_request":{"href":"https://api.github.com/repos/fsharp/FAKE/pulls/1919"}},"in_reply_to_id":187310951},"pull_request":{"url":"https://api.github.com/repos/fsharp/FAKE/pulls/1919","id":187010035,"html_url":"https://github.com/fsharp/FAKE/pull/1919","diff_url":"https://github.com/fsharp/FAKE/pull/1919.diff","patch_url":"https://github.com/fsharp/FAKE/pull/1919.patch","issue_url":"https://api.github.com/repos/fsharp/FAKE/issues/1919","number":1919,"state":"open","locked":false,"title":"WIP Fsc module with fix for #689","user":{"login":"vanceism7","id":2016375,"avatar_url":"https://avatars3.githubusercontent.com/u/2016375?v=4","gravatar_id":"","url":"https://api.github.com/users/vanceism7","html_url":"https://github.com/vanceism7","followers_url":"https://api.github.com/users/vanceism7/followers","following_url":"https://api.github.com/users/vanceism7/following{/other_user}","gists_url":"https://api.github.com/users/vanceism7/gists{/gist_id}","starred_url":"https://api.github.com/users/vanceism7/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/vanceism7/subscriptions","organizations_url":"https://api.github.com/users/vanceism7/orgs","repos_url":"https://api.github.com/users/vanceism7/repos","events_url":"https://api.github.com/users/vanceism7/events{/privacy}","received_events_url":"https://api.github.com/users/vanceism7/received_events","type":"User","site_admin":false},"body":"This is fschelper ported to a new fake5 module. Not sure if this is the correct way to call fsc.exe. Also, when calling fsc.exe through a Process call, you lose distinction between errors and warnings that you normally get back in the form of `FSharpErrorInfo` when you call FSharpChecker's compile method. I thought of using regex to scan the error messages for the keywords \"warning\" or \"error\", but I figured i'd ask about it first to see if there's a better way to handle this. \r\nAlso, I'm still unsure if I've referenced FSharp Compiler Service the correct way, although I suspect this setup should work.\r\n\r\nLastly, did we need to apply this fix to the fake4 module as well?\r\n","created_at":"2018-05-09T18:57:49Z","updated_at":"2018-05-10T19:18:24Z","closed_at":null,"merged_at":null,"merge_commit_sha":"32d1e9c0ea4c705d78a72ecdf7ee5c2715c7003e","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/fsharp/FAKE/pulls/1919/commits","review_comments_url":"https://api.github.com/repos/fsharp/FAKE/pulls/1919/comments","review_comment_url":"https://api.github.com/repos/fsharp/FAKE/pulls/comments{/number}","comments_url":"https://api.github.com/repos/fsharp/FAKE/issues/1919/comments","statuses_url":"https://api.github.com/repos/fsharp/FAKE/statuses/10637781d38cc2ff3c382f232f6c2961f7e428b6","head":{"label":"vanceism7:FscModule","ref":"FscModule","sha":"10637781d38cc2ff3c382f232f6c2961f7e428b6","user":{"login":"vanceism7","id":2016375,"avatar_url":"https://avatars3.githubusercontent.com/u/2016375?v=4","gravatar_id":"","url":"https://api.github.com/users/vanceism7","html_url":"https://github.com/vanceism7","followers_url":"https://api.github.com/users/vanceism7/followers","following_url":"https://api.github.com/users/vanceism7/following{/other_user}","gists_url":"https://api.github.com/users/vanceism7/gists{/gist_id}","starred_url":"https://api.github.com/users/vanceism7/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/vanceism7/subscriptions","organizations_url":"https://api.github.com/users/vanceism7/orgs","repos_url":"https://api.github.com/users/vanceism7/repos","events_url":"https://api.github.com/users/vanceism7/events{/privacy}","received_events_url":"https://api.github.com/users/vanceism7/received_events","type":"User","site_admin":false},"repo":{"id":122585262,"name":"FAKE","full_name":"vanceism7/FAKE","owner":{"login":"vanceism7","id":2016375,"avatar_url":"https://avatars3.githubusercontent.com/u/2016375?v=4","gravatar_id":"","url":"https://api.github.com/users/vanceism7","html_url":"https://github.com/vanceism7","followers_url":"https://api.github.com/users/vanceism7/followers","following_url":"https://api.github.com/users/vanceism7/following{/other_user}","gists_url":"https://api.github.com/users/vanceism7/gists{/gist_id}","starred_url":"https://api.github.com/users/vanceism7/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/vanceism7/subscriptions","organizations_url":"https://api.github.com/users/vanceism7/orgs","repos_url":"https://api.github.com/users/vanceism7/repos","events_url":"https://api.github.com/users/vanceism7/events{/privacy}","received_events_url":"https://api.github.com/users/vanceism7/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/vanceism7/FAKE","description":"FAKE - F# Make","fork":true,"url":"https://api.github.com/repos/vanceism7/FAKE","forks_url":"https://api.github.com/repos/vanceism7/FAKE/forks","keys_url":"https://api.github.com/repos/vanceism7/FAKE/keys{/key_id}","collaborators_url":"https://api.github.com/repos/vanceism7/FAKE/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/vanceism7/FAKE/teams","hooks_url":"https://api.github.com/repos/vanceism7/FAKE/hooks","issue_events_url":"https://api.github.com/repos/vanceism7/FAKE/issues/events{/number}","events_url":"https://api.github.com/repos/vanceism7/FAKE/events","assignees_url":"https://api.github.com/repos/vanceism7/FAKE/assignees{/user}","branches_url":"https://api.github.com/repos/vanceism7/FAKE/branches{/branch}","tags_url":"https://api.github.com/repos/vanceism7/FAKE/tags","blobs_url":"https://api.github.com/repos/vanceism7/FAKE/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/vanceism7/FAKE/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/vanceism7/FAKE/git/refs{/sha}","trees_url":"https://api.github.com/repos/vanceism7/FAKE/git/trees{/sha}","statuses_url":"https://api.github.com/repos/vanceism7/FAKE/statuses/{sha}","languages_url":"https://api.github.com/repos/vanceism7/FAKE/languages","stargazers_url":"https://api.github.com/repos/vanceism7/FAKE/stargazers","contributors_url":"https://api.github.com/repos/vanceism7/FAKE/contributors","subscribers_url":"https://api.github.com/repos/vanceism7/FAKE/subscribers","subscription_url":"https://api.github.com/repos/vanceism7/FAKE/subscription","commits_url":"https://api.github.com/repos/vanceism7/FAKE/commits{/sha}","git_commits_url":"https://api.github.com/repos/vanceism7/FAKE/git/commits{/sha}","comments_url":"https://api.github.com/repos/vanceism7/FAKE/comments{/number}","issue_comment_url":"https://api.github.com/repos/vanceism7/FAKE/issues/comments{/number}","contents_url":"https://api.github.com/repos/vanceism7/FAKE/contents/{+path}","compare_url":"https://api.github.com/repos/vanceism7/FAKE/compare/{base}...{head}","merges_url":"https://api.github.com/repos/vanceism7/FAKE/merges","archive_url":"https://api.github.com/repos/vanceism7/FAKE/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/vanceism7/FAKE/downloads","issues_url":"https://api.github.com/repos/vanceism7/FAKE/issues{/number}","pulls_url":"https://api.github.com/repos/vanceism7/FAKE/pulls{/number}","milestones_url":"https://api.github.com/repos/vanceism7/FAKE/milestones{/number}","notifications_url":"https://api.github.com/repos/vanceism7/FAKE/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/vanceism7/FAKE/labels{/name}","releases_url":"https://api.github.com/repos/vanceism7/FAKE/releases{/id}","deployments_url":"https://api.github.com/repos/vanceism7/FAKE/deployments","created_at":"2018-02-23T07:02:40Z","updated_at":"2018-05-03T02:05:46Z","pushed_at":"2018-05-09T18:50:41Z","git_url":"git://github.com/vanceism7/FAKE.git","ssh_url":"git@github.com:vanceism7/FAKE.git","clone_url":"https://github.com/vanceism7/FAKE.git","svn_url":"https://github.com/vanceism7/FAKE","homepage":"https://fake.build","size":164320,"stargazers_count":0,"watchers_count":0,"language":"F#","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":0,"license":{"key":"other","name":"Other","spdx_id":null,"url":null},"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"fsharp:master","ref":"master","sha":"38b77b8d3ed67f0b9b0402f5c79774cb477c1c8d","user":{"login":"fsharp","id":485415,"avatar_url":"https://avatars3.githubusercontent.com/u/485415?v=4","gravatar_id":"","url":"https://api.github.com/users/fsharp","html_url":"https://github.com/fsharp","followers_url":"https://api.github.com/users/fsharp/followers","following_url":"https://api.github.com/users/fsharp/following{/other_user}","gists_url":"https://api.github.com/users/fsharp/gists{/gist_id}","starred_url":"https://api.github.com/users/fsharp/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/fsharp/subscriptions","organizations_url":"https://api.github.com/users/fsharp/orgs","repos_url":"https://api.github.com/users/fsharp/repos","events_url":"https://api.github.com/users/fsharp/events{/privacy}","received_events_url":"https://api.github.com/users/fsharp/received_events","type":"Organization","site_admin":false},"repo":{"id":507569,"name":"FAKE","full_name":"fsharp/FAKE","owner":{"login":"fsharp","id":485415,"avatar_url":"https://avatars3.githubusercontent.com/u/485415?v=4","gravatar_id":"","url":"https://api.github.com/users/fsharp","html_url":"https://github.com/fsharp","followers_url":"https://api.github.com/users/fsharp/followers","following_url":"https://api.github.com/users/fsharp/following{/other_user}","gists_url":"https://api.github.com/users/fsharp/gists{/gist_id}","starred_url":"https://api.github.com/users/fsharp/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/fsharp/subscriptions","organizations_url":"https://api.github.com/users/fsharp/orgs","repos_url":"https://api.github.com/users/fsharp/repos","events_url":"https://api.github.com/users/fsharp/events{/privacy}","received_events_url":"https://api.github.com/users/fsharp/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/fsharp/FAKE","description":"FAKE - F# Make","fork":false,"url":"https://api.github.com/repos/fsharp/FAKE","forks_url":"https://api.github.com/repos/fsharp/FAKE/forks","keys_url":"https://api.github.com/repos/fsharp/FAKE/keys{/key_id}","collaborators_url":"https://api.github.com/repos/fsharp/FAKE/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/fsharp/FAKE/teams","hooks_url":"https://api.github.com/repos/fsharp/FAKE/hooks","issue_events_url":"https://api.github.com/repos/fsharp/FAKE/issues/events{/number}","events_url":"https://api.github.com/repos/fsharp/FAKE/events","assignees_url":"https://api.github.com/repos/fsharp/FAKE/assignees{/user}","branches_url":"https://api.github.com/repos/fsharp/FAKE/branches{/branch}","tags_url":"https://api.github.com/repos/fsharp/FAKE/tags","blobs_url":"https://api.github.com/repos/fsharp/FAKE/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/fsharp/FAKE/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/fsharp/FAKE/git/refs{/sha}","trees_url":"https://api.github.com/repos/fsharp/FAKE/git/trees{/sha}","statuses_url":"https://api.github.com/repos/fsharp/FAKE/statuses/{sha}","languages_url":"https://api.github.com/repos/fsharp/FAKE/languages","stargazers_url":"https://api.github.com/repos/fsharp/FAKE/stargazers","contributors_url":"https://api.github.com/repos/fsharp/FAKE/contributors","subscribers_url":"https://api.github.com/repos/fsharp/FAKE/subscribers","subscription_url":"https://api.github.com/repos/fsharp/FAKE/subscription","commits_url":"https://api.github.com/repos/fsharp/FAKE/commits{/sha}","git_commits_url":"https://api.github.com/repos/fsharp/FAKE/git/commits{/sha}","comments_url":"https://api.github.com/repos/fsharp/FAKE/comments{/number}","issue_comment_url":"https://api.github.com/repos/fsharp/FAKE/issues/comments{/number}","contents_url":"https://api.github.com/repos/fsharp/FAKE/contents/{+path}","compare_url":"https://api.github.com/repos/fsharp/FAKE/compare/{base}...{head}","merges_url":"https://api.github.com/repos/fsharp/FAKE/merges","archive_url":"https://api.github.com/repos/fsharp/FAKE/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/fsharp/FAKE/downloads","issues_url":"https://api.github.com/repos/fsharp/FAKE/issues{/number}","pulls_url":"https://api.github.com/repos/fsharp/FAKE/pulls{/number}","milestones_url":"https://api.github.com/repos/fsharp/FAKE/milestones{/number}","notifications_url":"https://api.github.com/repos/fsharp/FAKE/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/fsharp/FAKE/labels{/name}","releases_url":"https://api.github.com/repos/fsharp/FAKE/releases{/id}","deployments_url":"https://api.github.com/repos/fsharp/FAKE/deployments","created_at":"2010-02-08T10:02:28Z","updated_at":"2018-05-09T08:18:21Z","pushed_at":"2018-05-10T19:17:12Z","git_url":"git://github.com/fsharp/FAKE.git","ssh_url":"git@github.com:fsharp/FAKE.git","clone_url":"https://github.com/fsharp/FAKE.git","svn_url":"https://github.com/fsharp/FAKE","homepage":"https://fake.build","size":170794,"stargazers_count":860,"watchers_count":860,"language":"F#","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":true,"forks_count":541,"mirror_url":null,"archived":false,"open_issues_count":56,"license":{"key":"other","name":"Other","spdx_id":null,"url":null},"forks":541,"open_issues":56,"watchers":860,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/fsharp/FAKE/pulls/1919"},"html":{"href":"https://github.com/fsharp/FAKE/pull/1919"},"issue":{"href":"https://api.github.com/repos/fsharp/FAKE/issues/1919"},"comments":{"href":"https://api.github.com/repos/fsharp/FAKE/issues/1919/comments"},"review_comments":{"href":"https://api.github.com/repos/fsharp/FAKE/pulls/1919/comments"},"review_comment":{"href":"https://api.github.com/repos/fsharp/FAKE/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/fsharp/FAKE/pulls/1919/commits"},"statuses":{"href":"https://api.github.com/repos/fsharp/FAKE/statuses/10637781d38cc2ff3c382f232f6c2961f7e428b6"}},"author_association":"CONTRIBUTOR"}}
{"actor":{"display_login":"matthid"}}