mirror of
https://github.com/zoriya/octokit.net.git
synced 2025-12-06 07:16:09 +00:00
rewrite LINQPad samples functionality in F#. fixes #1081
This commit is contained in:
1
.gitignore
vendored
1
.gitignore
vendored
@@ -76,6 +76,7 @@ tools/FAKE.Core
|
|||||||
tools/SourceLink.Fake
|
tools/SourceLink.Fake
|
||||||
tools/xunit.runner.console
|
tools/xunit.runner.console
|
||||||
tools/Octokit.CodeFormatter
|
tools/Octokit.CodeFormatter
|
||||||
|
tools/FSharp.Data
|
||||||
*.ncrunch*
|
*.ncrunch*
|
||||||
*.GhostDoc.xml
|
*.GhostDoc.xml
|
||||||
|
|
||||||
|
|||||||
@@ -4,6 +4,7 @@
|
|||||||
"tools\nuget\nuget.exe" "install" "FAKE.Core" "-OutputDirectory" "tools" "-ExcludeVersion" "-version" "4.28.0" -verbosity quiet
|
"tools\nuget\nuget.exe" "install" "FAKE.Core" "-OutputDirectory" "tools" "-ExcludeVersion" "-version" "4.28.0" -verbosity quiet
|
||||||
"tools\nuget\nuget.exe" "install" "SourceLink.Fake" "-OutputDirectory" "tools" "-ExcludeVersion" "-version" "1.1.0" -verbosity quiet
|
"tools\nuget\nuget.exe" "install" "SourceLink.Fake" "-OutputDirectory" "tools" "-ExcludeVersion" "-version" "1.1.0" -verbosity quiet
|
||||||
"tools\nuget\nuget.exe" "install" "Octokit.CodeFormatter" "-OutputDirectory" "tools" "-ExcludeVersion" "-version" "1.0.0-preview" -Pre -verbosity quiet
|
"tools\nuget\nuget.exe" "install" "Octokit.CodeFormatter" "-OutputDirectory" "tools" "-ExcludeVersion" "-version" "1.0.0-preview" -Pre -verbosity quiet
|
||||||
|
"tools\nuget\nuget.exe" "install" "FSharp.Data" "-OutputDirectory" "tools" "-ExcludeVersion" "-version" "2.3.2" -verbosity quiet
|
||||||
|
|
||||||
:Build
|
:Build
|
||||||
cls
|
cls
|
||||||
|
|||||||
76
build.fsx
76
build.fsx
@@ -1,8 +1,12 @@
|
|||||||
#r @"tools/FAKE.Core/tools/FakeLib.dll"
|
#r @"tools/FAKE.Core/tools/FakeLib.dll"
|
||||||
|
#r @"tools/FSharp.Data/lib/net40/FSharp.Data.dll"
|
||||||
|
#r "System.Xml.Linq"
|
||||||
#load "tools/SourceLink.Fake/tools/SourceLink.fsx"
|
#load "tools/SourceLink.Fake/tools/SourceLink.fsx"
|
||||||
open Fake
|
open Fake
|
||||||
open System
|
open System
|
||||||
|
open System.IO
|
||||||
open SourceLink
|
open SourceLink
|
||||||
|
open FSharp.Data
|
||||||
|
|
||||||
let authors = ["GitHub"]
|
let authors = ["GitHub"]
|
||||||
|
|
||||||
@@ -148,19 +152,65 @@ Target "SourceLink" (fun _ ->
|
|||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
Target "ValidateLINQPadSamples"(fun _ ->
|
type LinqPadSampleMetadata = XmlProvider<"""
|
||||||
"The current LINQPad snippets reference the latest release of Octokit on NuGet, which may be very far behind what is currently on master. " +
|
<Query Kind="Program">
|
||||||
"These tests have been ported to SelfTests in the integration test suite. If someone would like to port them to F#, have a read of the details in https://github.com/octokit/octokit.net/issues/1081."
|
<NuGetReference>Octokit</NuGetReference>
|
||||||
|> traceImportant
|
<NuGetReference>Octokit.Reactive</NuGetReference>
|
||||||
// directoryInfo(samplesDir @@ "linqpad-samples")
|
<NuGetReference>Rx-Main</NuGetReference>
|
||||||
// |> filesInDir
|
<Namespace>Octokit</Namespace>
|
||||||
// |> Array.map(fun f -> f.FullName)
|
<Namespace>System.Reactive.Linq</Namespace>
|
||||||
// |> Seq.iter (fun sample ->
|
<Namespace>System.Threading.Tasks</Namespace>
|
||||||
// let result = ExecProcess (fun info ->
|
</Query>
|
||||||
// info.FileName <- linqPadDir @@ "lprun.exe"
|
""">
|
||||||
// info.Arguments <- " -compileonly " + sample) (TimeSpan.FromMinutes 5.0)
|
|
||||||
// if result <> 0 then failwithf "lprun.exe returned with a non-zero exit code for %s" sample
|
Target "ValidateLINQPadSamples" (fun _ ->
|
||||||
// )
|
|
||||||
|
let splitFileContents = fun (file: FileInfo) ->
|
||||||
|
let content = File.ReadAllText(file.FullName)
|
||||||
|
let closeTag = "</Query>"
|
||||||
|
let openTagIndex = content.IndexOf("<Query Kind=\"Program\">")
|
||||||
|
let closeTagIndex = content.IndexOf(closeTag)
|
||||||
|
let endOfXml = closeTagIndex + closeTag.Length
|
||||||
|
let xmlPart = content.Substring(openTagIndex, endOfXml - openTagIndex)
|
||||||
|
let rest = content.Substring(endOfXml)
|
||||||
|
|
||||||
|
(xmlPart, rest)
|
||||||
|
|
||||||
|
let createTempFile = fun(metadataString: string, rest: string) ->
|
||||||
|
let metadata = LinqPadSampleMetadata.Parse(metadataString)
|
||||||
|
let assembliesDir = buildDir @@ "Release/Net45"
|
||||||
|
let reactiveAssembliesDir = reactiveBuildDir @@ "Release/Net45"
|
||||||
|
let tempFileName = Path.GetTempFileName()
|
||||||
|
use stream = File.OpenWrite(tempFileName)
|
||||||
|
use writer = new StreamWriter(stream)
|
||||||
|
|
||||||
|
writer.WriteLine("ref {0}\\System.Reactive.Core.dll;", reactiveAssembliesDir);
|
||||||
|
writer.WriteLine("ref {0}\\System.Reactive.Interfaces.dll;", reactiveAssembliesDir);
|
||||||
|
writer.WriteLine("ref {0}\\System.Reactive.Linq.dll;", reactiveAssembliesDir);
|
||||||
|
writer.WriteLine("ref {0}\\Octokit.dll;", assembliesDir);
|
||||||
|
writer.WriteLine("ref {0}\\Octokit.Reactive.dll;", reactiveAssembliesDir);
|
||||||
|
writer.WriteLine("ref C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.5\\System.Net.Http.dll;");
|
||||||
|
|
||||||
|
for metadataNamespace in metadata.Namespaces do
|
||||||
|
writer.WriteLine("using {0};", metadataNamespace)
|
||||||
|
|
||||||
|
writer.WriteLine()
|
||||||
|
writer.WriteLine(rest)
|
||||||
|
|
||||||
|
writer.Flush()
|
||||||
|
|
||||||
|
tempFileName
|
||||||
|
|
||||||
|
directoryInfo(samplesDir @@ "linqpad-samples")
|
||||||
|
|> filesInDir
|
||||||
|
|> Array.map (splitFileContents >> createTempFile)
|
||||||
|
|> Seq.iter (fun sample ->
|
||||||
|
let result = ExecProcess (fun info ->
|
||||||
|
info.FileName <- linqPadDir @@ "lprun.exe"
|
||||||
|
info.Arguments <- " -compileonly -lang=Program " + sample) (TimeSpan.FromMinutes 5.0)
|
||||||
|
|
||||||
|
if result <> 0 then failwithf "lprun.exe returned with a non-zero exit code for %s" sample
|
||||||
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
Target "CreateOctokitPackage" (fun _ ->
|
Target "CreateOctokitPackage" (fun _ ->
|
||||||
|
|||||||
Reference in New Issue
Block a user