diff --git a/.circleci/config.yml b/.circleci/config.yml index b903f1c0b97..adcea1caba3 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -16,7 +16,7 @@ jobs: command: | apt-get update apt-get install -y libunwind8 libicu52 unzip wget git - wget https://github.com/fsharp/FAKE/releases/download/5.0.0-rc001/fake-dotnetcore-ubuntu.14.04-x64.zip -O /tmp/fake-dotnetcore-ubuntu.14.04-x64.zip + wget https://github.com/fsharp/FAKE/releases/download/5.0.0-rc010/fake-dotnetcore-ubuntu.14.04-x64.zip -O /tmp/fake-dotnetcore-ubuntu.14.04-x64.zip mkdir fake-dotnetcore unzip /tmp/fake-dotnetcore-ubuntu.14.04-x64.zip -d fake-dotnetcore || echo unzip returned $? chmod +x $PWD/fake-dotnetcore/fake diff --git a/.fake/build.fsx/intellisense.fsx b/.fake/build.fsx/intellisense.fsx index 3ef9a1e1089..dc1ae8f87c6 100644 --- a/.fake/build.fsx/intellisense.fsx +++ b/.fake/build.fsx/intellisense.fsx @@ -60,44 +60,44 @@ #r "C:\\Users\\matth\\.nuget\\packages\\system.runtime\\4.3.0\\lib\\net462\\System.Runtime.dll" #r "C:\\Users\\matth\\.nuget\\packages\\system.security.principal.windows\\4.4.1\\lib\\net461\\System.Security.Principal.Windows.dll" #r "C:\\Users\\matth\\.nuget\\packages\\system.security.cryptography.protecteddata\\4.4.0\\lib\\net461\\System.Security.Cryptography.ProtectedData.dll" -#r "C:\\Users\\matth\\.nuget\\packages\\fake.core.xml\\5.0.0-rc008\\lib\\net46\\Fake.Core.Xml.dll" -#r "C:\\Users\\matth\\.nuget\\packages\\fake.core.semver\\5.0.0-rc008\\lib\\net46\\Fake.Core.SemVer.dll" +#r "C:\\Users\\matth\\.nuget\\packages\\fake.core.xml\\5.0.0-rc010\\lib\\net46\\Fake.Core.Xml.dll" +#r "C:\\Users\\matth\\.nuget\\packages\\fake.core.semver\\5.0.0-rc010\\lib\\net46\\Fake.Core.SemVer.dll" #r "C:\\Users\\matth\\.nuget\\packages\\paket.core\\5.157.0-alpha003\\lib\\net45\\Paket.Core.dll" -#r "C:\\Users\\matth\\.nuget\\packages\\fake.api.github\\5.0.0-rc008\\lib\\net46\\Fake.Api.GitHub.dll" -#r "C:\\Users\\matth\\.nuget\\packages\\fake.core.context\\5.0.0-rc008\\lib\\net46\\Fake.Core.Context.dll" -#r "C:\\Users\\matth\\.nuget\\packages\\fake.core.environment\\5.0.0-rc008\\lib\\net46\\Fake.Core.Environment.dll" -#r "C:\\Users\\matth\\.nuget\\packages\\fake.core.string\\5.0.0-rc008\\lib\\net46\\Fake.Core.String.dll" +#r "C:\\Users\\matth\\.nuget\\packages\\fake.api.github\\5.0.0-rc010\\lib\\net46\\Fake.Api.GitHub.dll" +#r "C:\\Users\\matth\\.nuget\\packages\\fake.core.context\\5.0.0-rc010\\lib\\net46\\Fake.Core.Context.dll" +#r "C:\\Users\\matth\\.nuget\\packages\\fake.core.environment\\5.0.0-rc010\\lib\\net46\\Fake.Core.Environment.dll" +#r "C:\\Users\\matth\\.nuget\\packages\\fake.core.string\\5.0.0-rc010\\lib\\net46\\Fake.Core.String.dll" #r "C:\\Users\\matth\\.nuget\\packages\\fparsec\\1.0.3\\lib\\net40-client\\FParsec.dll" #r "C:\\Users\\matth\\.nuget\\packages\\suave\\2.4.0\\lib\\net461\\Suave.dll" #r "C:\\Users\\matth\\.nuget\\packages\\system.reflection.metadata\\1.5.0\\lib\\netstandard2.0\\System.Reflection.Metadata.dll" #r "C:\\Users\\matth\\.nuget\\packages\\mono.cecil\\0.10.0\\lib\\net40\\Mono.Cecil.Rocks.dll" #r "C:\\Users\\matth\\.nuget\\packages\\mono.cecil\\0.10.0\\lib\\net40\\Mono.Cecil.Pdb.dll" #r "C:\\Users\\matth\\.nuget\\packages\\mono.cecil\\0.10.0\\lib\\net40\\Mono.Cecil.Mdb.dll" -#r "C:\\Users\\matth\\.nuget\\packages\\fake.core.releasenotes\\5.0.0-rc008\\lib\\net46\\Fake.Core.ReleaseNotes.dll" -#r "C:\\Users\\matth\\.nuget\\packages\\fake.io.filesystem\\5.0.0-rc008\\lib\\net46\\Fake.IO.FileSystem.dll" -#r "C:\\Users\\matth\\.nuget\\packages\\fake.core.commandlineparsing\\5.0.0-rc008\\lib\\net46\\Fake.Core.CommandLineParsing.dll" -#r "C:\\Users\\matth\\.nuget\\packages\\fake.core.trace\\5.0.0-rc008\\lib\\net46\\Fake.Core.Trace.dll" -#r "C:\\Users\\matth\\.nuget\\packages\\fake.buildserver.teamfoundation\\5.0.0-rc008\\lib\\net46\\Fake.BuildServer.TeamFoundation.dll" -#r "C:\\Users\\matth\\.nuget\\packages\\fake.buildserver.travis\\5.0.0-rc008\\lib\\net46\\Fake.BuildServer.Travis.dll" -#r "C:\\Users\\matth\\.nuget\\packages\\fake.core.tasks\\5.0.0-rc008\\lib\\net46\\Fake.Core.Tasks.dll" -#r "C:\\Users\\matth\\.nuget\\packages\\fake.testing.common\\5.0.0-rc008\\lib\\net46\\Fake.Testing.Common.dll" -#r "C:\\Users\\matth\\.nuget\\packages\\fake.core.process\\5.0.0-rc008\\lib\\net46\\Fake.Core.Process.dll" -#r "C:\\Users\\matth\\.nuget\\packages\\fake.dotnet.assemblyinfofile\\5.0.0-rc008\\lib\\net46\\Fake.DotNet.AssemblyInfoFile.dll" -#r "C:\\Users\\matth\\.nuget\\packages\\fake.io.zip\\5.0.0-rc008\\lib\\net46\\Fake.IO.Zip.dll" -#r "C:\\Users\\matth\\.nuget\\packages\\fake.core.target\\5.0.0-rc008\\lib\\net46\\Fake.Core.Target.dll" -#r "C:\\Users\\matth\\.nuget\\packages\\fake.net.http\\5.0.0-rc008\\lib\\net46\\Fake.Net.Http.dll" -#r "C:\\Users\\matth\\.nuget\\packages\\fake.buildserver.appveyor\\5.0.0-rc008\\lib\\net46\\Fake.BuildServer.AppVeyor.dll" -#r "C:\\Users\\matth\\.nuget\\packages\\fake.buildserver.teamcity\\5.0.0-rc008\\lib\\net46\\Fake.BuildServer.TeamCity.dll" -#r "C:\\Users\\matth\\.nuget\\packages\\fake.dotnet.nuget\\5.0.0-rc008\\lib\\net46\\Fake.DotNet.NuGet.dll" -#r "C:\\Users\\matth\\.nuget\\packages\\fake.dotnet.testing.mspec\\5.0.0-rc008\\lib\\net46\\Fake.DotNet.Testing.MSpec.dll" -#r "C:\\Users\\matth\\.nuget\\packages\\fake.dotnet.testing.nunit\\5.0.0-rc008\\lib\\net46\\Fake.DotNet.Testing.NUnit.dll" -#r "C:\\Users\\matth\\.nuget\\packages\\fake.dotnet.testing.xunit2\\5.0.0-rc008\\lib\\net46\\Fake.DotNet.Testing.XUnit2.dll" -#r "C:\\Users\\matth\\.nuget\\packages\\fake.dotnet.cli\\5.0.0-rc008\\lib\\net46\\Fake.DotNet.Cli.dll" -#r "C:\\Users\\matth\\.nuget\\packages\\fake.dotnet.fsformatting\\5.0.0-rc008\\lib\\net46\\Fake.DotNet.FSFormatting.dll" -#r "C:\\Users\\matth\\.nuget\\packages\\fake.dotnet.msbuild\\5.0.0-rc008\\lib\\net46\\Fake.DotNet.MSBuild.dll" -#r "C:\\Users\\matth\\.nuget\\packages\\fake.dotnet.paket\\5.0.0-rc008\\lib\\net46\\Fake.DotNet.Paket.dll" -#r "C:\\Users\\matth\\.nuget\\packages\\fake.tools.git\\5.0.0-rc008\\lib\\net46\\Fake.Tools.Git.dll" -#r "C:\\Users\\matth\\.nuget\\packages\\fake.windows.chocolatey\\5.0.0-rc008\\lib\\net46\\Fake.Windows.Chocolatey.dll" +#r "C:\\Users\\matth\\.nuget\\packages\\fake.core.releasenotes\\5.0.0-rc010\\lib\\net46\\Fake.Core.ReleaseNotes.dll" +#r "C:\\Users\\matth\\.nuget\\packages\\fake.io.filesystem\\5.0.0-rc010\\lib\\net46\\Fake.IO.FileSystem.dll" +#r "C:\\Users\\matth\\.nuget\\packages\\fake.core.commandlineparsing\\5.0.0-rc010\\lib\\net46\\Fake.Core.CommandLineParsing.dll" +#r "C:\\Users\\matth\\.nuget\\packages\\fake.core.trace\\5.0.0-rc010\\lib\\net46\\Fake.Core.Trace.dll" +#r "C:\\Users\\matth\\.nuget\\packages\\fake.buildserver.teamfoundation\\5.0.0-rc010\\lib\\net46\\Fake.BuildServer.TeamFoundation.dll" +#r "C:\\Users\\matth\\.nuget\\packages\\fake.buildserver.travis\\5.0.0-rc010\\lib\\net46\\Fake.BuildServer.Travis.dll" +#r "C:\\Users\\matth\\.nuget\\packages\\fake.core.tasks\\5.0.0-rc010\\lib\\net46\\Fake.Core.Tasks.dll" +#r "C:\\Users\\matth\\.nuget\\packages\\fake.testing.common\\5.0.0-rc010\\lib\\net46\\Fake.Testing.Common.dll" +#r "C:\\Users\\matth\\.nuget\\packages\\fake.core.process\\5.0.0-rc010\\lib\\net46\\Fake.Core.Process.dll" +#r "C:\\Users\\matth\\.nuget\\packages\\fake.dotnet.assemblyinfofile\\5.0.0-rc010\\lib\\net46\\Fake.DotNet.AssemblyInfoFile.dll" +#r "C:\\Users\\matth\\.nuget\\packages\\fake.io.zip\\5.0.0-rc010\\lib\\net46\\Fake.IO.Zip.dll" +#r "C:\\Users\\matth\\.nuget\\packages\\fake.core.target\\5.0.0-rc010\\lib\\net46\\Fake.Core.Target.dll" +#r "C:\\Users\\matth\\.nuget\\packages\\fake.net.http\\5.0.0-rc010\\lib\\net46\\Fake.Net.Http.dll" +#r "C:\\Users\\matth\\.nuget\\packages\\fake.buildserver.appveyor\\5.0.0-rc010\\lib\\net46\\Fake.BuildServer.AppVeyor.dll" +#r "C:\\Users\\matth\\.nuget\\packages\\fake.buildserver.teamcity\\5.0.0-rc010\\lib\\net46\\Fake.BuildServer.TeamCity.dll" +#r "C:\\Users\\matth\\.nuget\\packages\\fake.dotnet.nuget\\5.0.0-rc010\\lib\\net46\\Fake.DotNet.NuGet.dll" +#r "C:\\Users\\matth\\.nuget\\packages\\fake.dotnet.testing.mspec\\5.0.0-rc010\\lib\\net46\\Fake.DotNet.Testing.MSpec.dll" +#r "C:\\Users\\matth\\.nuget\\packages\\fake.dotnet.testing.nunit\\5.0.0-rc010\\lib\\net46\\Fake.DotNet.Testing.NUnit.dll" +#r "C:\\Users\\matth\\.nuget\\packages\\fake.dotnet.testing.xunit2\\5.0.0-rc010\\lib\\net46\\Fake.DotNet.Testing.XUnit2.dll" +#r "C:\\Users\\matth\\.nuget\\packages\\fake.dotnet.cli\\5.0.0-rc010\\lib\\net46\\Fake.DotNet.Cli.dll" +#r "C:\\Users\\matth\\.nuget\\packages\\fake.dotnet.fsformatting\\5.0.0-rc010\\lib\\net46\\Fake.DotNet.FSFormatting.dll" +#r "C:\\Users\\matth\\.nuget\\packages\\fake.dotnet.msbuild\\5.0.0-rc010\\lib\\net46\\Fake.DotNet.MSBuild.dll" +#r "C:\\Users\\matth\\.nuget\\packages\\fake.dotnet.paket\\5.0.0-rc010\\lib\\net46\\Fake.DotNet.Paket.dll" +#r "C:\\Users\\matth\\.nuget\\packages\\fake.tools.git\\5.0.0-rc010\\lib\\net46\\Fake.Tools.Git.dll" +#r "C:\\Users\\matth\\.nuget\\packages\\fake.windows.chocolatey\\5.0.0-rc010\\lib\\net46\\Fake.Windows.Chocolatey.dll" #r "System" #r "System.Core" #r "System.Security" diff --git a/RELEASE_NOTES.md b/RELEASE_NOTES.md index 64fcc0ad646..385f73b8caf 100644 --- a/RELEASE_NOTES.md +++ b/RELEASE_NOTES.md @@ -1,12 +1,23 @@ # Release Notes +## 5.0.0-rc011 - 2018-05-06 + +* ENHANCEMENT: Add Verbosity setting for NuGet restore - https://github.com/fsharp/FAKE/pull/1904 +* BUGFIX: Fix msbuild helper OutputPath with trailing `\` - https://github.com/fsharp/FAKE/pull/1905 +* BUGFIX: Make `Fake.Tools.Pickles` run on unix (with mono) - https://github.com/fsharp/FAKE/pull/1901 +* DOCS: Add docs on how to test modules locally - https://github.com/fsharp/FAKE/pull/1906 +* DOCS: Added some links to the documentation of SpecFlow, Pickles and ReportGenerator - https://github.com/fsharp/FAKE/pull/1907 +* BUGFIX: API-Reference documentation showing invalid tool-tips - https://github.com/fsharp/FAKE/pull/1912 +* BUGFIX: Fake being unable to compile when `intellisense.fsx` doesn't exist - https://github.com/fsharp/FAKE/issues/1908 +* ENHANCEMENT: Some improvements to the target build order algorithm - https://github.com/fsharp/FAKE/pull/1903 + ## 5.0.0-rc010 - 2018-05-01 * BUGFIX: Some minor issues after last performance release - https://github.com/fsharp/FAKE/pull/1902 ## 5.0.0-rc009 - 2018-05-01 -* FAKE5: New module `Fake.Installer.InnoSetu` - https://github.com/fsharp/FAKE/pull/1890 +* FAKE5: New module `Fake.Installer.InnoSetup` - https://github.com/fsharp/FAKE/pull/1890 * DOCS: Order module-namespaces alphabetically - https://github.com/fsharp/FAKE/pull/1891 * BUGFIX: Make sure ReportGenerator is run with mono on unix - https://github.com/fsharp/FAKE/pull/1894 * DOCS: Make sure API docs for new modules and FAKE 4 is available - https://github.com/fsharp/FAKE/pull/1893 diff --git a/build.fsx b/build.fsx index c23b4f45fd2..8579879131e 100644 --- a/build.fsx +++ b/build.fsx @@ -61,7 +61,7 @@ open System.Reflection //let execContext = Fake.Core.Context.FakeExecutionContext.Create false "build.fsx" [] //Fake.Core.Context.setExecutionContext (Fake.Core.Context.RuntimeContext.Fake execContext) //#endif -#load "src/app/Fake.DotNet.FSFormatting/FSFormatting.fs" +// #load "src/app/Fake.DotNet.FSFormatting/FSFormatting.fs" open System.IO open Fake.Api open Fake.Core @@ -132,6 +132,9 @@ BuildServer.install [ TeamFoundation.Installer ] +let current = CoreTracing.getListeners() +if current |> Seq.contains CoreTracing.defaultConsoleTraceListener |> not then + CoreTracing.setTraceListeners (CoreTracing.defaultConsoleTraceListener :: current) let dotnetSdk = lazy DotNet.install DotNet.Release_2_1_4 let inline dtntWorkDir wd = DotNet.Options.lift dotnetSdk.Value @@ -419,17 +422,31 @@ Target.create "GenerateDocs" (fun _ -> Directory.ensure apidocsDir + let dllsAndLibDirs (dllPattern:IGlobbingPattern) = + let dlls = + dllPattern + |> Seq.distinctBy Path.GetFileName + |> List.ofSeq + let libDirs = + dlls + |> Seq.map Path.GetDirectoryName + |> Seq.distinct + |> List.ofSeq + (dlls,libDirs) // FAKE 5 module documentation let fake5ApidocsDir = apidocsDir @@ "v5" Directory.ensure fake5ApidocsDir - let fake5Dlls = - !! "./src/app/Fake.*/bin/Release/**/Fake.*.dll" - |> Seq.distinctBy Path.GetFileName + + let fake5Dlls, fake5LibDirs = + !! "./src/app/Fake.*/bin/Release/**/Fake.*.dll" + |> dllsAndLibDirs + fake5Dlls |> FSFormatting.createDocsForDlls (fun s -> { s with OutputDirectory = fake5ApidocsDir LayoutRoots = fake5LayoutRoots + LibDirs = fake5LibDirs // TODO: CurrentPage shouldn't be required as it's written in the template, but it is -> investigate ProjectParameters = ("api-docs-prefix", "/apidocs/v5/") :: ("CurrentPage", "APIReference") :: projInfo SourceRepository = githubLink + "/blob/master" }) @@ -465,7 +482,7 @@ Target.create "GenerateDocs" (fun _ -> // FAKE 5 legacy documentation let fake5LegacyApidocsDir = apidocsDir @@ "v5/legacy" Directory.ensure fake5LegacyApidocsDir - let fake5LegacyDlls = + let fake5LegacyDlls, fake5LegacyLibDirs = !! "./build/**/Fake.*.dll" ++ "./build/FakeLib.dll" -- "./build/**/Fake.Experimental.dll" @@ -474,14 +491,14 @@ Target.create "GenerateDocs" (fun _ -> -- "./build/**/FAKE.FSharp.Compiler.Service.dll" -- "./build/**/Fake.IIS.dll" -- "./build/**/Fake.Deploy.Lib.dll" - |> Seq.distinctBy Path.GetFileName + |> dllsAndLibDirs fake5LegacyDlls |> FSFormatting.createDocsForDlls (fun s -> { s with OutputDirectory = fake5LegacyApidocsDir LayoutRoots = legacyLayoutRoots - LibDirs = [ "./build" ] + LibDirs = fake5LegacyLibDirs // TODO: CurrentPage shouldn't be required as it's written in the template, but it is -> investigate ProjectParameters = ("api-docs-prefix", "/apidocs/v5/legacy/") :: ("CurrentPage", "APIReference") :: projInfo SourceRepository = githubLink + "/blob/master" }) @@ -489,7 +506,7 @@ Target.create "GenerateDocs" (fun _ -> // FAKE 4 legacy documentation let fake4LegacyApidocsDir = apidocsDir @@ "v4" Directory.ensure fake4LegacyApidocsDir - let fake4LegacyDlls = + let fake4LegacyDlls, fake4LegacyLibDirs = !! "./packages/docs/FAKE/tools/Fake.*.dll" ++ "./packages/docs/FAKE/tools/FakeLib.dll" -- "./packages/docs/FAKE/tools/Fake.Experimental.dll" @@ -497,14 +514,14 @@ Target.create "GenerateDocs" (fun _ -> -- "./packages/docs/FAKE/tools/FAKE.FSharp.Compiler.Service.dll" -- "./packages/docs/FAKE/tools/Fake.IIS.dll" -- "./packages/docs/FAKE/tools/Fake.Deploy.Lib.dll" - |> Seq.distinctBy Path.GetFileName + |> dllsAndLibDirs fake4LegacyDlls |> FSFormatting.createDocsForDlls (fun s -> { s with OutputDirectory = fake4LegacyApidocsDir LayoutRoots = fake4LayoutRoots - LibDirs = [ "./packages/docs/FAKE/tools" ] + LibDirs = fake4LegacyLibDirs // TODO: CurrentPage shouldn't be required as it's written in the template, but it is -> investigate ProjectParameters = ("api-docs-prefix", "/apidocs/v4/") ::("CurrentPage", "APIReference") :: projInfo SourceRepository = githubLink + "/blob/hotfix_fake4" }) @@ -1158,6 +1175,7 @@ open Fake.Core.TargetOperators "_DotNetPackage" ==> "DotNetPackage" +let mutable prev = None for runtime in "current" :: "portable" :: runtimes do let rawTargetName = sprintf "_DotNetPublish_%s" runtime let targetName = sprintf "DotNetPublish_%s" runtime @@ -1179,7 +1197,14 @@ for runtime in "current" :: "portable" :: runtimes do targetName ==> "DotNetPublish" |> ignore - + + // Make sure we order then (when building parallel!) + match prev with + | Some prev -> prev ?=> rawTargetName |> ignore + | None -> "_DotNetPackage" ?=> rawTargetName |> ignore + prev <- Some rawTargetName + + // Full framework build "Clean" ?=> "RenameFSharpCompilerService" diff --git a/build.proj b/build.proj index d08da325cb8..106f7d28ca3 100644 --- a/build.proj +++ b/build.proj @@ -15,10 +15,11 @@ $([System.IO.Path]::GetFullPath("$(MSBuildThisFileDirectory)")) + --parallel 5 - + diff --git a/help/markdown/404.md b/help/markdown/404.md index e2952367d48..0522e08ab6f 100644 --- a/help/markdown/404.md +++ b/help/markdown/404.md @@ -4,9 +4,14 @@ The new FAKE 5 website is still a work in progress. -[PLEASE HELP](fake-fake5-learn-more.html) -and [CONTRIBUTE](contributing.html) +[PLEASE HELP](/fake-fake5-learn-more.html) +and [CONTRIBUTE](/contributing.html) ## The Information is not lost! -You might find the information you are searching in the menu via Modules -> Legacy \ No newline at end of file +You might find the information you are searching + +* (legacy) in the menu via Modules -> Legacy +* Searching the API-Reference and the modules menu +* [opening an issue and tell us how you got here](https://github.com/fsharp/FAKE/issues/new) +* (legacy) Fake 4 -> Where is XYZ \ No newline at end of file diff --git a/help/markdown/buildserver.md b/help/markdown/buildserver.md index d5ccffa3d4a..097d534cf81 100644 --- a/help/markdown/buildserver.md +++ b/help/markdown/buildserver.md @@ -32,6 +32,9 @@ BuildServer.install [ TeamFoundation.Installer ] +// If you additionally want output in the console, even on the build-server (otherwise remove this line). +CoreTracing.ensureConsoleListener () + Target.create "Test" (fun _ -> File.WriteAllText("myfile.txt", "some content") diff --git a/help/markdown/contributing.md b/help/markdown/contributing.md index fac147df12e..219082a36cb 100644 --- a/help/markdown/contributing.md +++ b/help/markdown/contributing.md @@ -92,6 +92,26 @@ It turns `*.md` (Markdown with embedded code snippets) and `*.fsx` files (F# scr * The pull request will be updated automatically. +### A note on module testing + +* If you make a change to a module and would like to test it in a fake script, the easiest way to do this is to create a local nuget package and reference it in your script. To do this, follow the steps below + +1. Create a local nuget package for the module you've changed. +e.g: Using dotnet cli + + cd path/to/project + dotnet pack + +2. Dotnet pack will create a default nuget package with version of 1.0.0 in the `bin/Debug` of your project. Set an additional paket source in your build script to this directory, and require this exact version in your paket references + + e.g: If you wanted to test a local build of Fake.DotNet.NuGet + + #r "paket: + source path/to/Fake.DotNet.NuGet/bin/Debug/ + source https://api.nuget.org/v3/index.json + ...Other Dependencies... + nuget Fake.DotNet.NuGet == 1.0.0 //" //Require version 1.0.0, which is the local build + ## General considerations * Fake 4 (FakeLib) is in maintainance mode. Therefore new features need to be at least available as new FAKE 5 module (that might mean that the old module needs to be migrated as part of the PR). diff --git a/help/markdown/fake-dotnet-testing-specflow.md b/help/markdown/fake-dotnet-testing-specflow.md index c433bde3111..cb51dea1fb3 100644 --- a/help/markdown/fake-dotnet-testing-specflow.md +++ b/help/markdown/fake-dotnet-testing-specflow.md @@ -1,11 +1,15 @@ # Make BDD with Gherkin and SpecFlow +**Note: This documentation is for FAKE version 5.0 or later. The old documentation can be found [here](apidocs/v4/fake-specflowhelper.html)** + Use [SpecFlow] to define, manage and automatically execute human-readable acceptance tests in .NET projects. Writing easily understandable tests is a cornerstone of the BDD paradigm and also helps build up a living documentation of your system. SpecFlow is open source and provided under a BSD license. As part of the Cucumber family, SpecFlow uses the official Gherkin parser and supports the .NET framework, Xamarin and Mono. The package Fake.DotNet.Testing.SpecFlow is a bridge to the [SpecFlow] CLI (specflow.exe). +[API-Reference](https://fake.build/apidocs/v5/fake-dotnet-testing-specflow.html) + ## Minimal working example ```fsharp diff --git a/help/markdown/fake-tools-pickles.md b/help/markdown/fake-tools-pickles.md index 086bf2cef82..8abae1c3e32 100644 --- a/help/markdown/fake-tools-pickles.md +++ b/help/markdown/fake-tools-pickles.md @@ -1,18 +1,23 @@ # Convert Gherkin to HTML with Pickles +**Note: This documentation is for FAKE version 5.0 or later. The old documentation can be found [here](apidocs/v4/fake-pickleshelper.html)** + [Pickles] is a Living Documentation generator: it takes your Specification (written in Gherkin, with Markdown descriptions) and turns them into an always up-to-date documentation of the current state of your software - in a variety of formats. +[API-Reference](apidocs/v5/fake-tools-pickles.html) + ## Minimal working example ```fsharp #r "paket: nuget Fake.Core.Target nuget Fake.IO.FileSystem -nuget Fake.Tools.Pickles //" +nuget Fake.Tools.Pickles +//" open Fake.Core -open Fake.Core.TargetOperators open Fake.IO.FileSystemOperators +open Fake.IO.Globbing open Fake.Tools open System.IO diff --git a/help/markdown/testing-reportgenerator.md b/help/markdown/testing-reportgenerator.md index d38bfc029d8..4b6ba32c9ae 100644 --- a/help/markdown/testing-reportgenerator.md +++ b/help/markdown/testing-reportgenerator.md @@ -1,5 +1,7 @@ # Fake.Testing.ReportGenerator +**Note: This documentation is for FAKE version 5.0 or later. The old documentation can be found [here](apidocs/v4/fake-specflowhelper.html)** + ReportGenerator converts XML reports generated by OpenCover, PartCover, dotCover, Visual Studio, NCover or Cobertura into human readable reports in various formats. he reports do not only show the coverage quota, but also include the source code and visualize which lines have been covered. @@ -8,6 +10,8 @@ ReportGenerator supports merging several reports into one. It is also possible t See https://github.com/danielpalme/ReportGenerator +[API-Reference](apidocs/v5/fake-testing-reportgenerator.html) + ## Minimal working example ```fsharp diff --git a/paket.lock b/paket.lock index 7bde8927e22..3d8877b92dc 100644 --- a/paket.lock +++ b/paket.lock @@ -1103,7 +1103,7 @@ GROUP Build CONTENT: NONE NUGET remote: https://api.nuget.org/v3/index.json - FAKE (5.0.0-rc008) + FAKE (5.0.0-rc010) FSharp.Compiler.Service (22.0.3) FSharp.Core (>= 4.1.18) - restriction: || (>= net45) (>= netstandard2.0) Microsoft.DiaSymReader (>= 1.1) - restriction: || (>= net45) (>= netstandard2.0) @@ -2629,19 +2629,19 @@ NUGET FSharp.Core - restriction: < netstandard1.6 FSharp.Core (>= 4.0.1.7-alpha) - restriction: >= netstandard1.6 NETStandard.Library (>= 1.6) - restriction: >= netstandard1.6 - Fake.Api.GitHub (5.0.0-rc008) + Fake.Api.GitHub (5.0.0-rc010) FSharp.Core (>= 4.3.4) - restriction: || (>= net46) (>= netstandard1.6) NETStandard.Library (>= 1.6.1) - restriction: && (< net46) (>= netstandard1.6) (< netstandard2.0) Octokit (>= 0.29) - restriction: || (>= net46) (>= netstandard1.6) - Fake.BuildServer.AppVeyor (5.0.0-rc008) - Fake.Core.Context (>= 5.0.0-rc008) - restriction: || (>= net46) (>= netstandard1.6) - Fake.Core.Environment (>= 5.0.0-rc008) - restriction: || (>= net46) (>= netstandard1.6) - Fake.Core.Process (>= 5.0.0-rc008) - restriction: || (>= net46) (>= netstandard1.6) - Fake.Core.String (>= 5.0.0-rc008) - restriction: || (>= net46) (>= netstandard1.6) - Fake.Core.Trace (>= 5.0.0-rc008) - restriction: || (>= net46) (>= netstandard1.6) - Fake.Core.Xml (>= 5.0.0-rc008) - restriction: || (>= net46) (>= netstandard1.6) - Fake.IO.FileSystem (>= 5.0.0-rc008) - restriction: || (>= net46) (>= netstandard1.6) - Fake.Net.Http (>= 5.0.0-rc008) - restriction: || (>= net46) (>= netstandard1.6) + Fake.BuildServer.AppVeyor (5.0.0-rc010) + Fake.Core.Context (>= 5.0.0-rc010) - restriction: || (>= net46) (>= netstandard1.6) + Fake.Core.Environment (>= 5.0.0-rc010) - restriction: || (>= net46) (>= netstandard1.6) + Fake.Core.Process (>= 5.0.0-rc010) - restriction: || (>= net46) (>= netstandard1.6) + Fake.Core.String (>= 5.0.0-rc010) - restriction: || (>= net46) (>= netstandard1.6) + Fake.Core.Trace (>= 5.0.0-rc010) - restriction: || (>= net46) (>= netstandard1.6) + Fake.Core.Xml (>= 5.0.0-rc010) - restriction: || (>= net46) (>= netstandard1.6) + Fake.IO.FileSystem (>= 5.0.0-rc010) - restriction: || (>= net46) (>= netstandard1.6) + Fake.Net.Http (>= 5.0.0-rc010) - restriction: || (>= net46) (>= netstandard1.6) FSharp.Core (>= 4.3.4) - restriction: || (>= net46) (>= netstandard1.6) NETStandard.Library (>= 1.6.1) - restriction: && (< net46) (>= netstandard1.6) (< netstandard2.0) System.Diagnostics.FileVersionInfo (>= 4.3) - restriction: || (>= net46) (>= netstandard1.6) @@ -2654,15 +2654,15 @@ NUGET System.Xml.XPath (>= 4.3) - restriction: || (>= net46) (>= netstandard1.6) System.Xml.XPath.XDocument (>= 4.3) - restriction: || (>= net46) (>= netstandard1.6) System.Xml.XPath.XmlDocument (>= 4.3) - restriction: || (>= net46) (>= netstandard1.6) - Fake.BuildServer.TeamCity (5.0.0-rc008) - Fake.Core.Context (>= 5.0.0-rc008) - restriction: || (>= net46) (>= netstandard1.6) - Fake.Core.Environment (>= 5.0.0-rc008) - restriction: || (>= net46) (>= netstandard1.6) - Fake.Core.Process (>= 5.0.0-rc008) - restriction: || (>= net46) (>= netstandard1.6) - Fake.Core.String (>= 5.0.0-rc008) - restriction: || (>= net46) (>= netstandard1.6) - Fake.Core.Trace (>= 5.0.0-rc008) - restriction: || (>= net46) (>= netstandard1.6) - Fake.Core.Xml (>= 5.0.0-rc008) - restriction: || (>= net46) (>= netstandard1.6) - Fake.IO.FileSystem (>= 5.0.0-rc008) - restriction: || (>= net46) (>= netstandard1.6) - Fake.Net.Http (>= 5.0.0-rc008) - restriction: || (>= net46) (>= netstandard1.6) + Fake.BuildServer.TeamCity (5.0.0-rc010) + Fake.Core.Context (>= 5.0.0-rc010) - restriction: || (>= net46) (>= netstandard1.6) + Fake.Core.Environment (>= 5.0.0-rc010) - restriction: || (>= net46) (>= netstandard1.6) + Fake.Core.Process (>= 5.0.0-rc010) - restriction: || (>= net46) (>= netstandard1.6) + Fake.Core.String (>= 5.0.0-rc010) - restriction: || (>= net46) (>= netstandard1.6) + Fake.Core.Trace (>= 5.0.0-rc010) - restriction: || (>= net46) (>= netstandard1.6) + Fake.Core.Xml (>= 5.0.0-rc010) - restriction: || (>= net46) (>= netstandard1.6) + Fake.IO.FileSystem (>= 5.0.0-rc010) - restriction: || (>= net46) (>= netstandard1.6) + Fake.Net.Http (>= 5.0.0-rc010) - restriction: || (>= net46) (>= netstandard1.6) FSharp.Core (>= 4.3.4) - restriction: || (>= net46) (>= netstandard1.6) NETStandard.Library (>= 1.6.1) - restriction: && (< net46) (>= netstandard1.6) (< netstandard2.0) System.Diagnostics.FileVersionInfo (>= 4.3) - restriction: || (>= net46) (>= netstandard1.6) @@ -2675,15 +2675,15 @@ NUGET System.Xml.XPath (>= 4.3) - restriction: || (>= net46) (>= netstandard1.6) System.Xml.XPath.XDocument (>= 4.3) - restriction: || (>= net46) (>= netstandard1.6) System.Xml.XPath.XmlDocument (>= 4.3) - restriction: || (>= net46) (>= netstandard1.6) - Fake.BuildServer.TeamFoundation (5.0.0-rc008) - Fake.Core.Context (>= 5.0.0-rc008) - restriction: || (>= net46) (>= netstandard1.6) - Fake.Core.Environment (>= 5.0.0-rc008) - restriction: || (>= net46) (>= netstandard1.6) - Fake.Core.Process (>= 5.0.0-rc008) - restriction: || (>= net46) (>= netstandard1.6) - Fake.Core.String (>= 5.0.0-rc008) - restriction: || (>= net46) (>= netstandard1.6) - Fake.Core.Trace (>= 5.0.0-rc008) - restriction: || (>= net46) (>= netstandard1.6) - Fake.Core.Xml (>= 5.0.0-rc008) - restriction: || (>= net46) (>= netstandard1.6) - Fake.IO.FileSystem (>= 5.0.0-rc008) - restriction: || (>= net46) (>= netstandard1.6) - Fake.Net.Http (>= 5.0.0-rc008) - restriction: || (>= net46) (>= netstandard1.6) + Fake.BuildServer.TeamFoundation (5.0.0-rc010) + Fake.Core.Context (>= 5.0.0-rc010) - restriction: || (>= net46) (>= netstandard1.6) + Fake.Core.Environment (>= 5.0.0-rc010) - restriction: || (>= net46) (>= netstandard1.6) + Fake.Core.Process (>= 5.0.0-rc010) - restriction: || (>= net46) (>= netstandard1.6) + Fake.Core.String (>= 5.0.0-rc010) - restriction: || (>= net46) (>= netstandard1.6) + Fake.Core.Trace (>= 5.0.0-rc010) - restriction: || (>= net46) (>= netstandard1.6) + Fake.Core.Xml (>= 5.0.0-rc010) - restriction: || (>= net46) (>= netstandard1.6) + Fake.IO.FileSystem (>= 5.0.0-rc010) - restriction: || (>= net46) (>= netstandard1.6) + Fake.Net.Http (>= 5.0.0-rc010) - restriction: || (>= net46) (>= netstandard1.6) FSharp.Core (>= 4.3.4) - restriction: || (>= net46) (>= netstandard1.6) NETStandard.Library (>= 1.6.1) - restriction: && (< net46) (>= netstandard1.6) (< netstandard2.0) System.Diagnostics.FileVersionInfo (>= 4.3) - restriction: || (>= net46) (>= netstandard1.6) @@ -2696,15 +2696,15 @@ NUGET System.Xml.XPath (>= 4.3) - restriction: || (>= net46) (>= netstandard1.6) System.Xml.XPath.XDocument (>= 4.3) - restriction: || (>= net46) (>= netstandard1.6) System.Xml.XPath.XmlDocument (>= 4.3) - restriction: || (>= net46) (>= netstandard1.6) - Fake.BuildServer.Travis (5.0.0-rc008) - Fake.Core.Context (>= 5.0.0-rc008) - restriction: || (>= net46) (>= netstandard1.6) - Fake.Core.Environment (>= 5.0.0-rc008) - restriction: || (>= net46) (>= netstandard1.6) - Fake.Core.Process (>= 5.0.0-rc008) - restriction: || (>= net46) (>= netstandard1.6) - Fake.Core.String (>= 5.0.0-rc008) - restriction: || (>= net46) (>= netstandard1.6) - Fake.Core.Trace (>= 5.0.0-rc008) - restriction: || (>= net46) (>= netstandard1.6) - Fake.Core.Xml (>= 5.0.0-rc008) - restriction: || (>= net46) (>= netstandard1.6) - Fake.IO.FileSystem (>= 5.0.0-rc008) - restriction: || (>= net46) (>= netstandard1.6) - Fake.Net.Http (>= 5.0.0-rc008) - restriction: || (>= net46) (>= netstandard1.6) + Fake.BuildServer.Travis (5.0.0-rc010) + Fake.Core.Context (>= 5.0.0-rc010) - restriction: || (>= net46) (>= netstandard1.6) + Fake.Core.Environment (>= 5.0.0-rc010) - restriction: || (>= net46) (>= netstandard1.6) + Fake.Core.Process (>= 5.0.0-rc010) - restriction: || (>= net46) (>= netstandard1.6) + Fake.Core.String (>= 5.0.0-rc010) - restriction: || (>= net46) (>= netstandard1.6) + Fake.Core.Trace (>= 5.0.0-rc010) - restriction: || (>= net46) (>= netstandard1.6) + Fake.Core.Xml (>= 5.0.0-rc010) - restriction: || (>= net46) (>= netstandard1.6) + Fake.IO.FileSystem (>= 5.0.0-rc010) - restriction: || (>= net46) (>= netstandard1.6) + Fake.Net.Http (>= 5.0.0-rc010) - restriction: || (>= net46) (>= netstandard1.6) FSharp.Core (>= 4.3.4) - restriction: || (>= net46) (>= netstandard1.6) NETStandard.Library (>= 1.6.1) - restriction: && (< net46) (>= netstandard1.6) (< netstandard2.0) System.Diagnostics.FileVersionInfo (>= 4.3) - restriction: || (>= net46) (>= netstandard1.6) @@ -2717,68 +2717,68 @@ NUGET System.Xml.XPath (>= 4.3) - restriction: || (>= net46) (>= netstandard1.6) System.Xml.XPath.XDocument (>= 4.3) - restriction: || (>= net46) (>= netstandard1.6) System.Xml.XPath.XmlDocument (>= 4.3) - restriction: || (>= net46) (>= netstandard1.6) - Fake.Core.CommandLineParsing (5.0.0-rc008) - restriction: || (>= net46) (>= netstandard1.6) + Fake.Core.CommandLineParsing (5.0.0-rc010) - restriction: || (>= net46) (>= netstandard1.6) FParsec (>= 1.0.3) - restriction: || (>= net46) (>= netstandard1.6) FSharp.Core (>= 4.3.4) - restriction: || (>= net46) (>= netstandard1.6) NETStandard.Library (>= 1.6.1) - restriction: && (< net46) (>= netstandard1.6) (< netstandard2.0) - Fake.Core.Context (5.0.0-rc008) - restriction: || (>= net46) (>= netstandard1.6) + Fake.Core.Context (5.0.0-rc010) - restriction: || (>= net46) (>= netstandard1.6) FSharp.Core (>= 4.3.4) - restriction: || (>= net46) (>= netstandard1.6) NETStandard.Library (>= 1.6.1) - restriction: && (< net46) (>= netstandard1.6) (< netstandard2.0) - Fake.Core.Environment (5.0.0-rc008) - restriction: || (>= net46) (>= netstandard1.6) + Fake.Core.Environment (5.0.0-rc010) - restriction: || (>= net46) (>= netstandard1.6) FSharp.Core (>= 4.3.4) - restriction: || (>= net46) (>= netstandard1.6) NETStandard.Library (>= 1.6.1) - restriction: && (< net46) (>= netstandard1.6) (< netstandard2.0) - Fake.Core.Process (5.0.0-rc008) - restriction: || (>= net46) (>= netstandard1.6) - Fake.Core.Context (>= 5.0.0-rc008) - restriction: || (>= net46) (>= netstandard1.6) - Fake.Core.Environment (>= 5.0.0-rc008) - restriction: || (>= net46) (>= netstandard1.6) - Fake.Core.String (>= 5.0.0-rc008) - restriction: || (>= net46) (>= netstandard1.6) - Fake.Core.Trace (>= 5.0.0-rc008) - restriction: || (>= net46) (>= netstandard1.6) - Fake.IO.FileSystem (>= 5.0.0-rc008) - restriction: || (>= net46) (>= netstandard1.6) + Fake.Core.Process (5.0.0-rc010) - restriction: || (>= net46) (>= netstandard1.6) + Fake.Core.Context (>= 5.0.0-rc010) - restriction: || (>= net46) (>= netstandard1.6) + Fake.Core.Environment (>= 5.0.0-rc010) - restriction: || (>= net46) (>= netstandard1.6) + Fake.Core.String (>= 5.0.0-rc010) - restriction: || (>= net46) (>= netstandard1.6) + Fake.Core.Trace (>= 5.0.0-rc010) - restriction: || (>= net46) (>= netstandard1.6) + Fake.IO.FileSystem (>= 5.0.0-rc010) - restriction: || (>= net46) (>= netstandard1.6) FSharp.Core (>= 4.3.4) - restriction: || (>= net46) (>= netstandard1.6) NETStandard.Library (>= 1.6.1) - restriction: && (< net46) (>= netstandard1.6) (< netstandard2.0) System.Diagnostics.Process (>= 4.3) - restriction: || (>= net46) (>= netstandard1.6) - Fake.Core.ReleaseNotes (5.0.0-rc008) - Fake.Core.SemVer (>= 5.0.0-rc008) - restriction: || (>= net46) (>= netstandard1.6) - Fake.Core.String (>= 5.0.0-rc008) - restriction: || (>= net46) (>= netstandard1.6) + Fake.Core.ReleaseNotes (5.0.0-rc010) + Fake.Core.SemVer (>= 5.0.0-rc010) - restriction: || (>= net46) (>= netstandard1.6) + Fake.Core.String (>= 5.0.0-rc010) - restriction: || (>= net46) (>= netstandard1.6) FSharp.Core (>= 4.3.4) - restriction: || (>= net46) (>= netstandard1.6) NETStandard.Library (>= 1.6.1) - restriction: && (< net46) (>= netstandard1.6) (< netstandard2.0) - Fake.Core.SemVer (5.0.0-rc008) - Fake.Core.String (>= 5.0.0-rc008) - restriction: || (>= net46) (>= netstandard1.6) + Fake.Core.SemVer (5.0.0-rc010) + Fake.Core.String (>= 5.0.0-rc010) - restriction: || (>= net46) (>= netstandard1.6) FSharp.Core (>= 4.3.4) - restriction: || (>= net46) (>= netstandard1.6) NETStandard.Library (>= 1.6.1) - restriction: && (< net46) (>= netstandard1.6) (< netstandard2.0) System.Runtime.Numerics (>= 4.3) - restriction: || (>= net46) (>= netstandard1.6) - Fake.Core.String (5.0.0-rc008) - restriction: || (>= net46) (>= netstandard1.6) + Fake.Core.String (5.0.0-rc010) - restriction: || (>= net46) (>= netstandard1.6) FSharp.Core (>= 4.3.4) - restriction: || (>= net46) (>= netstandard1.6) NETStandard.Library (>= 1.6.1) - restriction: && (< net46) (>= netstandard1.6) (< netstandard2.0) - Fake.Core.Target (5.0.0-rc008) - Fake.Core.CommandLineParsing (>= 5.0.0-rc008) - restriction: || (>= net46) (>= netstandard1.6) - Fake.Core.Context (>= 5.0.0-rc008) - restriction: || (>= net46) (>= netstandard1.6) - Fake.Core.Environment (>= 5.0.0-rc008) - restriction: || (>= net46) (>= netstandard1.6) - Fake.Core.String (>= 5.0.0-rc008) - restriction: || (>= net46) (>= netstandard1.6) - Fake.Core.Trace (>= 5.0.0-rc008) - restriction: || (>= net46) (>= netstandard1.6) + Fake.Core.Target (5.0.0-rc010) + Fake.Core.CommandLineParsing (>= 5.0.0-rc010) - restriction: || (>= net46) (>= netstandard1.6) + Fake.Core.Context (>= 5.0.0-rc010) - restriction: || (>= net46) (>= netstandard1.6) + Fake.Core.Environment (>= 5.0.0-rc010) - restriction: || (>= net46) (>= netstandard1.6) + Fake.Core.String (>= 5.0.0-rc010) - restriction: || (>= net46) (>= netstandard1.6) + Fake.Core.Trace (>= 5.0.0-rc010) - restriction: || (>= net46) (>= netstandard1.6) FSharp.Core (>= 4.3.4) - restriction: || (>= net46) (>= netstandard1.6) NETStandard.Library (>= 1.6.1) - restriction: && (< net46) (>= netstandard1.6) (< netstandard2.0) - Fake.Core.Tasks (5.0.0-rc008) - restriction: || (>= net46) (>= netstandard1.6) - Fake.Core.Context (>= 5.0.0-rc008) - restriction: || (>= net46) (>= netstandard1.6) - Fake.Core.Environment (>= 5.0.0-rc008) - restriction: || (>= net46) (>= netstandard1.6) - Fake.Core.Process (>= 5.0.0-rc008) - restriction: || (>= net46) (>= netstandard1.6) - Fake.Core.String (>= 5.0.0-rc008) - restriction: || (>= net46) (>= netstandard1.6) - Fake.Core.Trace (>= 5.0.0-rc008) - restriction: || (>= net46) (>= netstandard1.6) - Fake.IO.FileSystem (>= 5.0.0-rc008) - restriction: || (>= net46) (>= netstandard1.6) + Fake.Core.Tasks (5.0.0-rc010) - restriction: || (>= net46) (>= netstandard1.6) + Fake.Core.Context (>= 5.0.0-rc010) - restriction: || (>= net46) (>= netstandard1.6) + Fake.Core.Environment (>= 5.0.0-rc010) - restriction: || (>= net46) (>= netstandard1.6) + Fake.Core.Process (>= 5.0.0-rc010) - restriction: || (>= net46) (>= netstandard1.6) + Fake.Core.String (>= 5.0.0-rc010) - restriction: || (>= net46) (>= netstandard1.6) + Fake.Core.Trace (>= 5.0.0-rc010) - restriction: || (>= net46) (>= netstandard1.6) + Fake.IO.FileSystem (>= 5.0.0-rc010) - restriction: || (>= net46) (>= netstandard1.6) FSharp.Core (>= 4.3.4) - restriction: || (>= net46) (>= netstandard1.6) NETStandard.Library (>= 1.6.1) - restriction: && (< net46) (>= netstandard1.6) (< netstandard2.0) - Fake.Core.Trace (5.0.0-rc008) - restriction: || (>= net46) (>= netstandard1.6) - Fake.Core.Context (>= 5.0.0-rc008) - restriction: || (>= net46) (>= netstandard1.6) - Fake.Core.Environment (>= 5.0.0-rc008) - restriction: || (>= net46) (>= netstandard1.6) - Fake.Core.String (>= 5.0.0-rc008) - restriction: || (>= net46) (>= netstandard1.6) + Fake.Core.Trace (5.0.0-rc010) - restriction: || (>= net46) (>= netstandard1.6) + Fake.Core.Context (>= 5.0.0-rc010) - restriction: || (>= net46) (>= netstandard1.6) + Fake.Core.Environment (>= 5.0.0-rc010) - restriction: || (>= net46) (>= netstandard1.6) + Fake.Core.String (>= 5.0.0-rc010) - restriction: || (>= net46) (>= netstandard1.6) FSharp.Core (>= 4.3.4) - restriction: || (>= net46) (>= netstandard1.6) NETStandard.Library (>= 1.6.1) - restriction: && (< net46) (>= netstandard1.6) (< netstandard2.0) - Fake.Core.Xml (5.0.0-rc008) - restriction: || (>= net46) (>= netstandard1.6) - Fake.Core.Context (>= 5.0.0-rc008) - restriction: || (>= net46) (>= netstandard1.6) - Fake.Core.Environment (>= 5.0.0-rc008) - restriction: || (>= net46) (>= netstandard1.6) - Fake.Core.Process (>= 5.0.0-rc008) - restriction: || (>= net46) (>= netstandard1.6) - Fake.Core.String (>= 5.0.0-rc008) - restriction: || (>= net46) (>= netstandard1.6) - Fake.Core.Trace (>= 5.0.0-rc008) - restriction: || (>= net46) (>= netstandard1.6) - Fake.IO.FileSystem (>= 5.0.0-rc008) - restriction: || (>= net46) (>= netstandard1.6) + Fake.Core.Xml (5.0.0-rc010) - restriction: || (>= net46) (>= netstandard1.6) + Fake.Core.Context (>= 5.0.0-rc010) - restriction: || (>= net46) (>= netstandard1.6) + Fake.Core.Environment (>= 5.0.0-rc010) - restriction: || (>= net46) (>= netstandard1.6) + Fake.Core.Process (>= 5.0.0-rc010) - restriction: || (>= net46) (>= netstandard1.6) + Fake.Core.String (>= 5.0.0-rc010) - restriction: || (>= net46) (>= netstandard1.6) + Fake.Core.Trace (>= 5.0.0-rc010) - restriction: || (>= net46) (>= netstandard1.6) + Fake.IO.FileSystem (>= 5.0.0-rc010) - restriction: || (>= net46) (>= netstandard1.6) FSharp.Core (>= 4.3.4) - restriction: || (>= net46) (>= netstandard1.6) NETStandard.Library (>= 1.6.1) - restriction: && (< net46) (>= netstandard1.6) (< netstandard2.0) System.Xml.ReaderWriter (>= 4.3.1) - restriction: || (>= net46) (&& (>= netstandard1.6) (< netstandard2.0)) @@ -2786,141 +2786,141 @@ NUGET System.Xml.XPath (>= 4.3) - restriction: || (>= net46) (>= netstandard1.6) System.Xml.XPath.XDocument (>= 4.3) - restriction: || (>= net46) (>= netstandard1.6) System.Xml.XPath.XmlDocument (>= 4.3) - restriction: || (>= net46) (>= netstandard1.6) - Fake.DotNet.AssemblyInfoFile (5.0.0-rc008) - Fake.Core.Environment (>= 5.0.0-rc008) - restriction: || (>= net46) (>= netstandard1.6) - Fake.Core.String (>= 5.0.0-rc008) - restriction: || (>= net46) (>= netstandard1.6) - Fake.Core.Trace (>= 5.0.0-rc008) - restriction: || (>= net46) (>= netstandard1.6) - Fake.IO.FileSystem (>= 5.0.0-rc008) - restriction: || (>= net46) (>= netstandard1.6) + Fake.DotNet.AssemblyInfoFile (5.0.0-rc010) + Fake.Core.Environment (>= 5.0.0-rc010) - restriction: || (>= net46) (>= netstandard1.6) + Fake.Core.String (>= 5.0.0-rc010) - restriction: || (>= net46) (>= netstandard1.6) + Fake.Core.Trace (>= 5.0.0-rc010) - restriction: || (>= net46) (>= netstandard1.6) + Fake.IO.FileSystem (>= 5.0.0-rc010) - restriction: || (>= net46) (>= netstandard1.6) FSharp.Core (>= 4.3.4) - restriction: || (>= net46) (>= netstandard1.6) NETStandard.Library (>= 1.6.1) - restriction: && (< net46) (>= netstandard1.6) (< netstandard2.0) - Fake.DotNet.Cli (5.0.0-rc008) - Fake.Core.Context (>= 5.0.0-rc008) - restriction: || (>= net46) (>= netstandard1.6) - Fake.Core.Environment (>= 5.0.0-rc008) - restriction: || (>= net46) (>= netstandard1.6) - Fake.Core.Process (>= 5.0.0-rc008) - restriction: || (>= net46) (>= netstandard1.6) - Fake.Core.String (>= 5.0.0-rc008) - restriction: || (>= net46) (>= netstandard1.6) - Fake.Core.Trace (>= 5.0.0-rc008) - restriction: || (>= net46) (>= netstandard1.6) - Fake.IO.FileSystem (>= 5.0.0-rc008) - restriction: || (>= net46) (>= netstandard1.6) + Fake.DotNet.Cli (5.0.0-rc010) + Fake.Core.Context (>= 5.0.0-rc010) - restriction: || (>= net46) (>= netstandard1.6) + Fake.Core.Environment (>= 5.0.0-rc010) - restriction: || (>= net46) (>= netstandard1.6) + Fake.Core.Process (>= 5.0.0-rc010) - restriction: || (>= net46) (>= netstandard1.6) + Fake.Core.String (>= 5.0.0-rc010) - restriction: || (>= net46) (>= netstandard1.6) + Fake.Core.Trace (>= 5.0.0-rc010) - restriction: || (>= net46) (>= netstandard1.6) + Fake.IO.FileSystem (>= 5.0.0-rc010) - restriction: || (>= net46) (>= netstandard1.6) FSharp.Core (>= 4.3.4) - restriction: || (>= net46) (>= netstandard1.6) NETStandard.Library (>= 1.6.1) - restriction: && (< net46) (>= netstandard1.6) (< netstandard2.0) Newtonsoft.Json (>= 11.0.2) - restriction: || (>= net46) (>= netstandard1.6) - Fake.DotNet.FSFormatting (5.0.0-rc008) - Fake.Core.Context (>= 5.0.0-rc008) - restriction: || (>= net46) (>= netstandard1.6) - Fake.Core.Environment (>= 5.0.0-rc008) - restriction: || (>= net46) (>= netstandard1.6) - Fake.Core.Process (>= 5.0.0-rc008) - restriction: || (>= net46) (>= netstandard1.6) - Fake.Core.String (>= 5.0.0-rc008) - restriction: || (>= net46) (>= netstandard1.6) - Fake.Core.Trace (>= 5.0.0-rc008) - restriction: || (>= net46) (>= netstandard1.6) - Fake.IO.FileSystem (>= 5.0.0-rc008) - restriction: || (>= net46) (>= netstandard1.6) + Fake.DotNet.FSFormatting (5.0.0-rc010) + Fake.Core.Context (>= 5.0.0-rc010) - restriction: || (>= net46) (>= netstandard1.6) + Fake.Core.Environment (>= 5.0.0-rc010) - restriction: || (>= net46) (>= netstandard1.6) + Fake.Core.Process (>= 5.0.0-rc010) - restriction: || (>= net46) (>= netstandard1.6) + Fake.Core.String (>= 5.0.0-rc010) - restriction: || (>= net46) (>= netstandard1.6) + Fake.Core.Trace (>= 5.0.0-rc010) - restriction: || (>= net46) (>= netstandard1.6) + Fake.IO.FileSystem (>= 5.0.0-rc010) - restriction: || (>= net46) (>= netstandard1.6) FSharp.Core (>= 4.3.4) - restriction: || (>= net46) (>= netstandard1.6) NETStandard.Library (>= 1.6.1) - restriction: && (< net46) (>= netstandard1.6) (< netstandard2.0) - Fake.DotNet.MsBuild (5.0.0-rc008) - Fake.Core.Context (>= 5.0.0-rc008) - restriction: || (>= net46) (>= netstandard1.6) - Fake.Core.Environment (>= 5.0.0-rc008) - restriction: || (>= net46) (>= netstandard1.6) - Fake.Core.Process (>= 5.0.0-rc008) - restriction: || (>= net46) (>= netstandard1.6) - Fake.Core.String (>= 5.0.0-rc008) - restriction: || (>= net46) (>= netstandard1.6) - Fake.Core.Trace (>= 5.0.0-rc008) - restriction: || (>= net46) (>= netstandard1.6) - Fake.IO.FileSystem (>= 5.0.0-rc008) - restriction: || (>= net46) (>= netstandard1.6) + Fake.DotNet.MsBuild (5.0.0-rc010) + Fake.Core.Context (>= 5.0.0-rc010) - restriction: || (>= net46) (>= netstandard1.6) + Fake.Core.Environment (>= 5.0.0-rc010) - restriction: || (>= net46) (>= netstandard1.6) + Fake.Core.Process (>= 5.0.0-rc010) - restriction: || (>= net46) (>= netstandard1.6) + Fake.Core.String (>= 5.0.0-rc010) - restriction: || (>= net46) (>= netstandard1.6) + Fake.Core.Trace (>= 5.0.0-rc010) - restriction: || (>= net46) (>= netstandard1.6) + Fake.IO.FileSystem (>= 5.0.0-rc010) - restriction: || (>= net46) (>= netstandard1.6) FSharp.Core (>= 4.3.4) - restriction: || (>= net46) (>= netstandard1.6) NETStandard.Library (>= 1.6.1) - restriction: && (< net46) (>= netstandard1.6) (< netstandard2.0) - Fake.DotNet.NuGet (5.0.0-rc008) - Fake.Core.Context (>= 5.0.0-rc008) - restriction: || (>= net46) (>= netstandard1.6) - Fake.Core.Environment (>= 5.0.0-rc008) - restriction: || (>= net46) (>= netstandard1.6) - Fake.Core.Process (>= 5.0.0-rc008) - restriction: || (>= net46) (>= netstandard1.6) - Fake.Core.SemVer (>= 5.0.0-rc008) - restriction: || (>= net46) (>= netstandard1.6) - Fake.Core.String (>= 5.0.0-rc008) - restriction: || (>= net46) (>= netstandard1.6) - Fake.Core.Tasks (>= 5.0.0-rc008) - restriction: || (>= net46) (>= netstandard1.6) - Fake.Core.Trace (>= 5.0.0-rc008) - restriction: || (>= net46) (>= netstandard1.6) - Fake.Core.Xml (>= 5.0.0-rc008) - restriction: || (>= net46) (>= netstandard1.6) - Fake.IO.FileSystem (>= 5.0.0-rc008) - restriction: || (>= net46) (>= netstandard1.6) + Fake.DotNet.NuGet (5.0.0-rc010) + Fake.Core.Context (>= 5.0.0-rc010) - restriction: || (>= net46) (>= netstandard1.6) + Fake.Core.Environment (>= 5.0.0-rc010) - restriction: || (>= net46) (>= netstandard1.6) + Fake.Core.Process (>= 5.0.0-rc010) - restriction: || (>= net46) (>= netstandard1.6) + Fake.Core.SemVer (>= 5.0.0-rc010) - restriction: || (>= net46) (>= netstandard1.6) + Fake.Core.String (>= 5.0.0-rc010) - restriction: || (>= net46) (>= netstandard1.6) + Fake.Core.Tasks (>= 5.0.0-rc010) - restriction: || (>= net46) (>= netstandard1.6) + Fake.Core.Trace (>= 5.0.0-rc010) - restriction: || (>= net46) (>= netstandard1.6) + Fake.Core.Xml (>= 5.0.0-rc010) - restriction: || (>= net46) (>= netstandard1.6) + Fake.IO.FileSystem (>= 5.0.0-rc010) - restriction: || (>= net46) (>= netstandard1.6) FSharp.Core (>= 4.3.4) - restriction: || (>= net46) (>= netstandard1.6) NETStandard.Library (>= 1.6.1) - restriction: && (< net46) (>= netstandard1.6) (< netstandard2.0) Newtonsoft.Json (>= 11.0.2) - restriction: || (>= net46) (>= netstandard1.6) System.Net.Http (>= 4.3.3) - restriction: || (>= net46) (&& (>= netstandard1.6) (< netstandard2.0)) - Fake.DotNet.Paket (5.0.0-rc008) - Fake.Core.Context (>= 5.0.0-rc008) - restriction: || (>= net46) (>= netstandard1.6) - Fake.Core.Environment (>= 5.0.0-rc008) - restriction: || (>= net46) (>= netstandard1.6) - Fake.Core.Process (>= 5.0.0-rc008) - restriction: || (>= net46) (>= netstandard1.6) - Fake.Core.String (>= 5.0.0-rc008) - restriction: || (>= net46) (>= netstandard1.6) - Fake.Core.Trace (>= 5.0.0-rc008) - restriction: || (>= net46) (>= netstandard1.6) - Fake.IO.FileSystem (>= 5.0.0-rc008) - restriction: || (>= net46) (>= netstandard1.6) + Fake.DotNet.Paket (5.0.0-rc010) + Fake.Core.Context (>= 5.0.0-rc010) - restriction: || (>= net46) (>= netstandard1.6) + Fake.Core.Environment (>= 5.0.0-rc010) - restriction: || (>= net46) (>= netstandard1.6) + Fake.Core.Process (>= 5.0.0-rc010) - restriction: || (>= net46) (>= netstandard1.6) + Fake.Core.String (>= 5.0.0-rc010) - restriction: || (>= net46) (>= netstandard1.6) + Fake.Core.Trace (>= 5.0.0-rc010) - restriction: || (>= net46) (>= netstandard1.6) + Fake.IO.FileSystem (>= 5.0.0-rc010) - restriction: || (>= net46) (>= netstandard1.6) FSharp.Core (>= 4.3.4) - restriction: || (>= net46) (>= netstandard1.6) NETStandard.Library (>= 1.6.1) - restriction: && (< net46) (>= netstandard1.6) (< netstandard2.0) - Fake.DotNet.Testing.MSpec (5.0.0-rc008) - Fake.Core.Context (>= 5.0.0-rc008) - restriction: || (>= net46) (>= netstandard1.6) - Fake.Core.Environment (>= 5.0.0-rc008) - restriction: || (>= net46) (>= netstandard1.6) - Fake.Core.Process (>= 5.0.0-rc008) - restriction: || (>= net46) (>= netstandard1.6) - Fake.Core.String (>= 5.0.0-rc008) - restriction: || (>= net46) (>= netstandard1.6) - Fake.Core.Trace (>= 5.0.0-rc008) - restriction: || (>= net46) (>= netstandard1.6) - Fake.IO.FileSystem (>= 5.0.0-rc008) - restriction: || (>= net46) (>= netstandard1.6) - Fake.Testing.Common (>= 5.0.0-rc008) - restriction: || (>= net46) (>= netstandard1.6) + Fake.DotNet.Testing.MSpec (5.0.0-rc010) + Fake.Core.Context (>= 5.0.0-rc010) - restriction: || (>= net46) (>= netstandard1.6) + Fake.Core.Environment (>= 5.0.0-rc010) - restriction: || (>= net46) (>= netstandard1.6) + Fake.Core.Process (>= 5.0.0-rc010) - restriction: || (>= net46) (>= netstandard1.6) + Fake.Core.String (>= 5.0.0-rc010) - restriction: || (>= net46) (>= netstandard1.6) + Fake.Core.Trace (>= 5.0.0-rc010) - restriction: || (>= net46) (>= netstandard1.6) + Fake.IO.FileSystem (>= 5.0.0-rc010) - restriction: || (>= net46) (>= netstandard1.6) + Fake.Testing.Common (>= 5.0.0-rc010) - restriction: || (>= net46) (>= netstandard1.6) FSharp.Core (>= 4.3.4) - restriction: || (>= net46) (>= netstandard1.6) NETStandard.Library (>= 1.6.1) - restriction: && (< net46) (>= netstandard1.6) (< netstandard2.0) - Fake.DotNet.Testing.NUnit (5.0.0-rc008) - Fake.Core.Context (>= 5.0.0-rc008) - restriction: || (>= net46) (>= netstandard1.6) - Fake.Core.Environment (>= 5.0.0-rc008) - restriction: || (>= net46) (>= netstandard1.6) - Fake.Core.Process (>= 5.0.0-rc008) - restriction: || (>= net46) (>= netstandard1.6) - Fake.Core.String (>= 5.0.0-rc008) - restriction: || (>= net46) (>= netstandard1.6) - Fake.Core.Trace (>= 5.0.0-rc008) - restriction: || (>= net46) (>= netstandard1.6) - Fake.IO.FileSystem (>= 5.0.0-rc008) - restriction: || (>= net46) (>= netstandard1.6) - Fake.Testing.Common (>= 5.0.0-rc008) - restriction: || (>= net46) (>= netstandard1.6) + Fake.DotNet.Testing.NUnit (5.0.0-rc010) + Fake.Core.Context (>= 5.0.0-rc010) - restriction: || (>= net46) (>= netstandard1.6) + Fake.Core.Environment (>= 5.0.0-rc010) - restriction: || (>= net46) (>= netstandard1.6) + Fake.Core.Process (>= 5.0.0-rc010) - restriction: || (>= net46) (>= netstandard1.6) + Fake.Core.String (>= 5.0.0-rc010) - restriction: || (>= net46) (>= netstandard1.6) + Fake.Core.Trace (>= 5.0.0-rc010) - restriction: || (>= net46) (>= netstandard1.6) + Fake.IO.FileSystem (>= 5.0.0-rc010) - restriction: || (>= net46) (>= netstandard1.6) + Fake.Testing.Common (>= 5.0.0-rc010) - restriction: || (>= net46) (>= netstandard1.6) FSharp.Core (>= 4.3.4) - restriction: || (>= net46) (>= netstandard1.6) NETStandard.Library (>= 1.6.1) - restriction: && (< net46) (>= netstandard1.6) (< netstandard2.0) System.Linq.Parallel (>= 4.3) - restriction: || (>= net46) (>= netstandard1.6) System.Xml.XDocument (>= 4.3) - restriction: && (< net46) (>= netstandard1.6) (< netstandard2.0) - Fake.DotNet.Testing.XUnit2 (5.0.0-rc008) - Fake.Core.Context (>= 5.0.0-rc008) - restriction: || (>= net46) (>= netstandard1.6) - Fake.Core.Environment (>= 5.0.0-rc008) - restriction: || (>= net46) (>= netstandard1.6) - Fake.Core.Process (>= 5.0.0-rc008) - restriction: || (>= net46) (>= netstandard1.6) - Fake.Core.String (>= 5.0.0-rc008) - restriction: || (>= net46) (>= netstandard1.6) - Fake.Core.Trace (>= 5.0.0-rc008) - restriction: || (>= net46) (>= netstandard1.6) - Fake.IO.FileSystem (>= 5.0.0-rc008) - restriction: || (>= net46) (>= netstandard1.6) - Fake.Testing.Common (>= 5.0.0-rc008) - restriction: || (>= net46) (>= netstandard1.6) + Fake.DotNet.Testing.XUnit2 (5.0.0-rc010) + Fake.Core.Context (>= 5.0.0-rc010) - restriction: || (>= net46) (>= netstandard1.6) + Fake.Core.Environment (>= 5.0.0-rc010) - restriction: || (>= net46) (>= netstandard1.6) + Fake.Core.Process (>= 5.0.0-rc010) - restriction: || (>= net46) (>= netstandard1.6) + Fake.Core.String (>= 5.0.0-rc010) - restriction: || (>= net46) (>= netstandard1.6) + Fake.Core.Trace (>= 5.0.0-rc010) - restriction: || (>= net46) (>= netstandard1.6) + Fake.IO.FileSystem (>= 5.0.0-rc010) - restriction: || (>= net46) (>= netstandard1.6) + Fake.Testing.Common (>= 5.0.0-rc010) - restriction: || (>= net46) (>= netstandard1.6) FSharp.Core (>= 4.3.4) - restriction: || (>= net46) (>= netstandard1.6) NETStandard.Library (>= 1.6.1) - restriction: && (< net46) (>= netstandard1.6) (< netstandard2.0) - Fake.IO.FileSystem (5.0.0-rc008) - Fake.Core.String (>= 5.0.0-rc008) - restriction: || (>= net46) (>= netstandard1.6) + Fake.IO.FileSystem (5.0.0-rc010) + Fake.Core.String (>= 5.0.0-rc010) - restriction: || (>= net46) (>= netstandard1.6) FSharp.Core (>= 4.3.4) - restriction: || (>= net46) (>= netstandard1.6) NETStandard.Library (>= 1.6.1) - restriction: && (< net46) (>= netstandard1.6) (< netstandard2.0) System.Diagnostics.FileVersionInfo (>= 4.3) - restriction: || (>= net46) (>= netstandard1.6) System.IO.FileSystem.Watcher (>= 4.3) - restriction: || (>= net46) (>= netstandard1.6) - Fake.IO.Zip (5.0.0-rc008) - Fake.Core.String (>= 5.0.0-rc008) - restriction: || (>= net46) (>= netstandard1.6) - Fake.IO.FileSystem (>= 5.0.0-rc008) - restriction: || (>= net46) (>= netstandard1.6) + Fake.IO.Zip (5.0.0-rc010) + Fake.Core.String (>= 5.0.0-rc010) - restriction: || (>= net46) (>= netstandard1.6) + Fake.IO.FileSystem (>= 5.0.0-rc010) - restriction: || (>= net46) (>= netstandard1.6) FSharp.Core (>= 4.3.4) - restriction: || (>= net46) (>= netstandard1.6) NETStandard.Library (>= 1.6.1) - restriction: && (< net46) (>= netstandard1.6) (< netstandard2.0) System.IO.Compression (>= 4.3) - restriction: || (>= net46) (>= netstandard1.6) System.IO.Compression.ZipFile (>= 4.3) - restriction: || (>= net46) (>= netstandard1.6) - Fake.Net.Http (5.0.0-rc008) - restriction: || (>= net46) (>= netstandard1.6) - Fake.Core.Trace (>= 5.0.0-rc008) - restriction: || (>= net46) (>= netstandard1.6) + Fake.Net.Http (5.0.0-rc010) - restriction: || (>= net46) (>= netstandard1.6) + Fake.Core.Trace (>= 5.0.0-rc010) - restriction: || (>= net46) (>= netstandard1.6) FSharp.Core (>= 4.3.4) - restriction: || (>= net46) (>= netstandard1.6) NETStandard.Library (>= 1.6.1) - restriction: && (< net46) (>= netstandard1.6) (< netstandard2.0) System.Net.Http (>= 4.3.3) - restriction: || (>= net46) (&& (>= netstandard1.6) (< netstandard2.0)) - Fake.Testing.Common (5.0.0-rc008) - restriction: || (>= net46) (>= netstandard1.6) - Fake.Core.Context (>= 5.0.0-rc008) - restriction: || (>= net46) (>= netstandard1.6) - Fake.Core.Environment (>= 5.0.0-rc008) - restriction: || (>= net46) (>= netstandard1.6) - Fake.Core.Process (>= 5.0.0-rc008) - restriction: || (>= net46) (>= netstandard1.6) - Fake.Core.String (>= 5.0.0-rc008) - restriction: || (>= net46) (>= netstandard1.6) - Fake.Core.Trace (>= 5.0.0-rc008) - restriction: || (>= net46) (>= netstandard1.6) - Fake.IO.FileSystem (>= 5.0.0-rc008) - restriction: || (>= net46) (>= netstandard1.6) + Fake.Testing.Common (5.0.0-rc010) - restriction: || (>= net46) (>= netstandard1.6) + Fake.Core.Context (>= 5.0.0-rc010) - restriction: || (>= net46) (>= netstandard1.6) + Fake.Core.Environment (>= 5.0.0-rc010) - restriction: || (>= net46) (>= netstandard1.6) + Fake.Core.Process (>= 5.0.0-rc010) - restriction: || (>= net46) (>= netstandard1.6) + Fake.Core.String (>= 5.0.0-rc010) - restriction: || (>= net46) (>= netstandard1.6) + Fake.Core.Trace (>= 5.0.0-rc010) - restriction: || (>= net46) (>= netstandard1.6) + Fake.IO.FileSystem (>= 5.0.0-rc010) - restriction: || (>= net46) (>= netstandard1.6) FSharp.Core (>= 4.3.4) - restriction: || (>= net46) (>= netstandard1.6) NETStandard.Library (>= 1.6.1) - restriction: && (< net46) (>= netstandard1.6) (< netstandard2.0) - Fake.Tools.Git (5.0.0-rc008) - Fake.Core.Context (>= 5.0.0-rc008) - restriction: || (>= net46) (>= netstandard1.6) - Fake.Core.Environment (>= 5.0.0-rc008) - restriction: || (>= net46) (>= netstandard1.6) - Fake.Core.Process (>= 5.0.0-rc008) - restriction: || (>= net46) (>= netstandard1.6) - Fake.Core.SemVer (>= 5.0.0-rc008) - restriction: || (>= net46) (>= netstandard1.6) - Fake.Core.String (>= 5.0.0-rc008) - restriction: || (>= net46) (>= netstandard1.6) - Fake.Core.Trace (>= 5.0.0-rc008) - restriction: || (>= net46) (>= netstandard1.6) - Fake.IO.FileSystem (>= 5.0.0-rc008) - restriction: || (>= net46) (>= netstandard1.6) + Fake.Tools.Git (5.0.0-rc010) + Fake.Core.Context (>= 5.0.0-rc010) - restriction: || (>= net46) (>= netstandard1.6) + Fake.Core.Environment (>= 5.0.0-rc010) - restriction: || (>= net46) (>= netstandard1.6) + Fake.Core.Process (>= 5.0.0-rc010) - restriction: || (>= net46) (>= netstandard1.6) + Fake.Core.SemVer (>= 5.0.0-rc010) - restriction: || (>= net46) (>= netstandard1.6) + Fake.Core.String (>= 5.0.0-rc010) - restriction: || (>= net46) (>= netstandard1.6) + Fake.Core.Trace (>= 5.0.0-rc010) - restriction: || (>= net46) (>= netstandard1.6) + Fake.IO.FileSystem (>= 5.0.0-rc010) - restriction: || (>= net46) (>= netstandard1.6) FSharp.Core (>= 4.3.4) - restriction: || (>= net46) (>= netstandard1.6) NETStandard.Library (>= 1.6.1) - restriction: && (< net46) (>= netstandard1.6) (< netstandard2.0) - Fake.Windows.Chocolatey (5.0.0-rc008) - Fake.Core.Context (>= 5.0.0-rc008) - restriction: || (>= net46) (>= netstandard1.6) - Fake.Core.Environment (>= 5.0.0-rc008) - restriction: || (>= net46) (>= netstandard1.6) - Fake.Core.Process (>= 5.0.0-rc008) - restriction: || (>= net46) (>= netstandard1.6) - Fake.Core.String (>= 5.0.0-rc008) - restriction: || (>= net46) (>= netstandard1.6) - Fake.Core.Trace (>= 5.0.0-rc008) - restriction: || (>= net46) (>= netstandard1.6) - Fake.DotNet.NuGet (>= 5.0.0-rc008) - restriction: || (>= net46) (>= netstandard1.6) - Fake.IO.FileSystem (>= 5.0.0-rc008) - restriction: || (>= net46) (>= netstandard1.6) + Fake.Windows.Chocolatey (5.0.0-rc010) + Fake.Core.Context (>= 5.0.0-rc010) - restriction: || (>= net46) (>= netstandard1.6) + Fake.Core.Environment (>= 5.0.0-rc010) - restriction: || (>= net46) (>= netstandard1.6) + Fake.Core.Process (>= 5.0.0-rc010) - restriction: || (>= net46) (>= netstandard1.6) + Fake.Core.String (>= 5.0.0-rc010) - restriction: || (>= net46) (>= netstandard1.6) + Fake.Core.Trace (>= 5.0.0-rc010) - restriction: || (>= net46) (>= netstandard1.6) + Fake.DotNet.NuGet (>= 5.0.0-rc010) - restriction: || (>= net46) (>= netstandard1.6) + Fake.IO.FileSystem (>= 5.0.0-rc010) - restriction: || (>= net46) (>= netstandard1.6) FSharp.Core (>= 4.3.4) - restriction: || (>= net46) (>= netstandard1.6) NETStandard.Library (>= 1.6.1) - restriction: && (< net46) (>= netstandard1.6) (< netstandard2.0) FParsec (1.0.3) - restriction: || (>= net46) (>= netstandard1.6) diff --git a/src/app/Fake.BuildServer.TeamFoundation/TeamFoundation.fs b/src/app/Fake.BuildServer.TeamFoundation/TeamFoundation.fs index c14369572de..cb31aa0af63 100644 --- a/src/app/Fake.BuildServer.TeamFoundation/TeamFoundation.fs +++ b/src/app/Fake.BuildServer.TeamFoundation/TeamFoundation.fs @@ -21,9 +21,9 @@ module TeamFoundation = properties |> Seq.map (fun (prop, value) -> sprintf "%s=%s;" (ensureProp prop) (ensureProp value)) |> String.separated "" - if String.isNullOrWhiteSpace temp then "" else " " + temp + if String.isNullOrWhiteSpace temp then "" else " " + temp printfn "##vso[%s%s]%s" action formattedProperties message - + let private toType t o = o |> Option.map (fun value -> t, value) let private toList t o = @@ -135,4 +135,4 @@ module TeamFoundation = let Installer = { new BuildServerInstaller() with member __.Install () = install (false) - member __.Detect () = detect() } \ No newline at end of file + member __.Detect () = detect() } diff --git a/src/app/Fake.Core.Process/Process.fs b/src/app/Fake.Core.Process/Process.fs index bb480b82dd5..94e61322453 100644 --- a/src/app/Fake.Core.Process/Process.fs +++ b/src/app/Fake.Core.Process/Process.fs @@ -619,12 +619,17 @@ module Process = |> fun path -> // See https://unix.stackexchange.com/questions/280528/is-there-a-unix-equivalent-of-the-windows-environment-variable-pathext if Environment.isWindows then - match tryFindFile path file with - | Some s -> Some s - | None -> - Environment.environVarOrDefault "PATHEXT" ".COM;.EXE;.BAT" - |> String.split ';' - |> Seq.tryPick (fun postFix -> tryFindFile path (file + postFix)) + // Prefer PATHEXT, see https://github.com/fsharp/FAKE/issues/1911 + // and https://github.com/fsharp/FAKE/issues/1899 + Environment.environVarOrDefault "PATHEXT" ".COM;.EXE;.BAT" + |> String.split ';' + |> Seq.tryPick (fun postFix -> tryFindFile path (file + postFix)) + |> function + | None -> + match tryFindFile path file with + | Some s -> Some s + | None -> None + | Some s -> Some s else tryFindFile path file /// Returns the AppSettings for the key - Splitted on ; diff --git a/src/app/Fake.Core.Target/Fake.Core.Target.fsproj b/src/app/Fake.Core.Target/Fake.Core.Target.fsproj index eff32e3ac23..be9d8f14976 100644 --- a/src/app/Fake.Core.Target/Fake.Core.Target.fsproj +++ b/src/app/Fake.Core.Target/Fake.Core.Target.fsproj @@ -1,4 +1,4 @@ - + net46;netstandard1.6;netstandard2.0 Fake.Core.Target @@ -9,6 +9,7 @@ + diff --git a/src/app/Fake.Core.Target/Target.fs b/src/app/Fake.Core.Target/Target.fs index 96358996faf..440f7ce2065 100644 --- a/src/app/Fake.Core.Target/Target.fs +++ b/src/app/Fake.Core.Target/Target.fs @@ -351,21 +351,35 @@ module Target = match getTargetDict().TryGetValue (target) with | false,_ -> listAvailable() | true,target -> - Trace.logfn "%sDependencyGraph for Target %s:" (if verbose then String.Empty else "Shortened ") target.Name + let sb = System.Text.StringBuilder() + let appendfn fmt = Printf.ksprintf (sb.AppendLine >> ignore) fmt + appendfn "%sDependencyGraph for Target %s:" (if verbose then String.Empty else "Shortened ") target.Name let logDependency ((t: Target), depType, level, isVisited) = if verbose || not isVisited then let indent = (String(' ', level * 3)) if depType = DependencyType.Soft then - Trace.log <| sprintf "%s<=? %s" indent t.Name + appendfn "%s<=? %s" indent t.Name else - Trace.log <| sprintf "%s<== %s" indent t.Name + appendfn "%s<== %s" indent t.Name let _, ordered = visitDependencies logDependency target.Name - - Trace.log "" - Trace.log "The resulting target order is:" - Seq.iter (Trace.logfn " - %s") ordered + //appendfn "" + //sb.Length <- sb.Length - Environment.NewLine.Length + Trace.log <| sb.ToString() + + let internal printRunningOrder (targetOrder:Target[] list) = + let sb = System.Text.StringBuilder() + let appendfn fmt = Printf.ksprintf (sb.AppendLine >> ignore) fmt + appendfn "The running order is:" + targetOrder + |> List.iteri (fun index x -> + //if (environVarOrDefault "parallel-jobs" "1" |> int > 1) then + appendfn "Group - %d" (index + 1) + Seq.iter (appendfn " - %s") (x|>Seq.map (fun t -> t.Name))) + + sb.Length <- sb.Length - Environment.NewLine.Length + Trace.log <| sb.ToString() /// Writes a build time report. /// The total runtime. @@ -411,31 +425,46 @@ module Target = /// Determines a parallel build order for the given set of targets let internal determineBuildOrder (target : string) = - let t = get target - let targetLevels = new Dictionary<_,_>() - let addTargetLevel ((target: Target), _, level, _ ) = - match targetLevels.TryGetValue target.Name with - | true, mapLevel when mapLevel >= level -> () - | _ -> targetLevels.[target.Name] <- level - - let visited, ordered = visitDependencies addTargetLevel target - - // the results are grouped by their level, sorted descending (by level) and - // finally grouped together in a list[]> - let result = - targetLevels - |> Seq.map (fun pair -> pair.Key, pair.Value) - |> Seq.groupBy snd - |> Seq.sortBy (fun (l,_) -> -l) - |> Seq.map (snd >> Seq.map fst >> Seq.distinct >> Seq.map get >> Seq.toArray) - |> Seq.toList - - // Note that this build order cannot be considered "optimal" - // since it may introduce order where actually no dependencies - // exist. However it yields a "good" execution order in practice. - result + let rec visitDependenciesAux fGetDependencies (visited:string list) level (depType,targetName) = + let target = get targetName + let isVisited = visited |> Seq.contains targetName + //fVisit (target, depType, level, isVisited) + let dependencies = + fGetDependencies target + |> Seq.collect (visitDependenciesAux fGetDependencies (targetName::visited) (level + 1)) + |> Seq.distinctBy (fun t -> t.Name) + |> Seq.toList + if not isVisited then target :: dependencies + else dependencies + + // first find the list of targets we "have" to build + let targets = visitDependenciesAux (fun t -> t.Dependencies |> withDependencyType DependencyType.Hard) [] 0 (DependencyType.Hard, target) + let isValidTarget name = targets |> Seq.exists (fun t -> t.Name = name) + + // Try to build the optimal tree by starting with the targets without dependencies and remove them from the list iteratively + let rec findOrder (targetLeft:Target list) = + let isValidTarget name = targetLeft |> Seq.exists (fun t -> t.Name = name) + let canBeExecuted (t:Target) = + t.Dependencies @ t.SoftDependencies + |> Seq.filter isValidTarget + |> Seq.isEmpty + let map = + targetLeft + |> Seq.groupBy (fun t -> canBeExecuted t) + |> Seq.map (fun (t, g) -> t, Seq.toList g) + |> dict + let execute, left = + (match map.TryGetValue true with + | true, ts -> ts + | _ -> []), + match map.TryGetValue false with + | true, ts -> ts + | _ -> [] + if List.isEmpty execute then failwithf "Could not progress build order in %A" targetLeft + List.toArray execute :: if List.isEmpty left then [] else findOrder left + findOrder targets /// Runs a single target without its dependencies... only when no error has been detected yet. let internal runSingleTarget (target : Target) (context:TargetContext) = @@ -471,42 +500,34 @@ module Target = | Some d -> failwithf "You set a task description (%A) but didn't specify a task. Make sure to set the Description above the Target." d | None -> () - let rec runTargets (targets: Target array) (context:TargetContext) = - let lastTarget = targets |> Array.last - //if not context.HasErrors && context.TryFindPrevious(lastTarget.Name).IsNone then - if singleTarget then - Trace.traceImportant "Single target mode ==> Skipping dependencies." - runSingleTarget lastTarget context - else - targets |> Array.fold (fun context target -> runSingleTarget target context) context - // else - printfn "run %s" targetName let watch = new System.Diagnostics.Stopwatch() watch.Start() let context = TargetContext.Create targetName args let context = Trace.tracefn "Building project with version: %s" BuildServer.buildVersion + printDependencyGraph false targetName + + // determine a build order + let order = determineBuildOrder targetName + if singleTarget + then Trace.traceImportant "Single target mode ==> Skipping dependencies." + else printRunningOrder order + // Figure out the order in in which targets can be run, and which can be run in parallel. - if parallelJobs > 1 then + if parallelJobs > 1 && not singleTarget then Trace.tracefn "Running parallel build with %d workers" parallelJobs - // determine a parallel build order - let order = determineBuildOrder targetName - // run every level in parallel order |> Seq.fold (fun context par -> runTargetsParallel parallelJobs par context) context else - // single threaded build. - printDependencyGraph false targetName - - // Note: we could use the ordering resulting from flattening the result of determineBuildOrder - // for a single threaded build (thereby centralizing the algorithm for build order), but that - // ordering is inconsistent with earlier versions of FAKE (and PrintDependencyGraph). - let _, ordered = visitDependencies ignore targetName - - runTargets (ordered |> Seq.map get |> Seq.toArray) context + let targets = order |> Seq.collect id |> Seq.toArray + let lastTarget = targets |> Array.last + if singleTarget then + runSingleTarget lastTarget context + else + targets |> Array.fold (fun context target -> runSingleTarget target context) context let context = if context.HasError then diff --git a/src/app/Fake.Core.Target/ThisAssemblyInfo.fs b/src/app/Fake.Core.Target/ThisAssemblyInfo.fs new file mode 100644 index 00000000000..deeeb60a2b5 --- /dev/null +++ b/src/app/Fake.Core.Target/ThisAssemblyInfo.fs @@ -0,0 +1,5 @@ +namespace System +open System.Runtime.CompilerServices + +[] +do () diff --git a/src/app/Fake.Core.Trace/TraceListener.fs b/src/app/Fake.Core.Trace/TraceListener.fs index 3cdd29ba7e5..5d6656fede8 100644 --- a/src/app/Fake.Core.Trace/TraceListener.fs +++ b/src/app/Fake.Core.Trace/TraceListener.fs @@ -300,6 +300,11 @@ module CoreTracing = let setTraceListeners l = setTraceListenersPrivate l let addListener l = setTraceListenersPrivate (l :: getListeners()) + let ensureConsoleListener () = + let current = getListeners() + if current |> Seq.contains defaultConsoleTraceListener |> not then + setTraceListenersPrivate (defaultConsoleTraceListener :: current) + /// Allows to post messages to all trace listeners let postMessage x = let msg = diff --git a/src/app/Fake.DotNet.MSBuild/MSBuild.fs b/src/app/Fake.DotNet.MSBuild/MSBuild.fs index 638457d9323..666e8ba41ca 100644 --- a/src/app/Fake.DotNet.MSBuild/MSBuild.fs +++ b/src/app/Fake.DotNet.MSBuild/MSBuild.fs @@ -9,6 +9,7 @@ open Fake.Core open Fake.IO open Fake.IO.FileSystemOperators open Fake.IO.Globbing.Operators +open Fake.Core /// A type to represent MSBuild project files. type MSBuildProject = XDocument @@ -16,13 +17,11 @@ type MSBuildProject = XDocument /// An exception type to signal build errors. exception BuildException of string*list with - override x.ToString() = x.Data0.ToString() + "\r\n" + (String.separated "\r\n" x.Data1) - -type MSBuildEntry = { - Version: string; - Paths: string list; -} + override x.ToString() = x.Data0.ToString() + Environment.NewLine + (String.separated Environment.NewLine x.Data1) +type MSBuildEntry = + { Version: string + Paths: string list } /// MSBuild verbosity option type MSBuildVerbosity = @@ -57,10 +56,9 @@ type MSBuildFileLoggerConfig = Parameters : MSBuildLogParameter list option } type MSBuildDistributedLoggerConfig = - { - ClassName : string option - AssemblyPath : string - Parameters : (string * string) list option } + { ClassName : string option + AssemblyPath : string + Parameters : (string * string) list option } module private MSBuildExe = let knownMSBuildEntries = @@ -90,7 +88,6 @@ module private MSBuildExe = /// NOTE: in System.Version 5.0 >= 5.0.0.0 is false while 5.0.0.0 >= 5.0 is true... let monoVersionToUseMSBuildOn = System.Version("5.0") - /// Tries to detect the right version of MSBuild. /// /// - On all OS's, we check a `MSBuild` environment variable which is either @@ -276,7 +273,6 @@ module MSBuild = /// [omit] let processReferences elementName f projectFileName (doc : XDocument) = - let fi = FileInfo.ofPath projectFileName doc |> getReferenceElements elementName projectFileName |> Seq.iter (fun (a, fileName) -> a.Value <- f fileName) @@ -294,7 +290,6 @@ module MSBuild = |> Seq.append references |> Set.ofSeq - /// [omit] let internal getAllParameters targets maxcpu noLogo nodeReuse tools verbosity noconsolelogger warnAsError nowarn fileLoggers binaryLoggers distributedFileLoggers properties = if Environment.isUnix then [ targets; tools; verbosity; noconsolelogger; warnAsError; nowarn ] @ fileLoggers @ binaryLoggers @ distributedFileLoggers @ properties @@ -450,20 +445,6 @@ module MSBuild = let private pathToLogger = typedefof.Assembly.Location #endif - /// Defines the loggers to use for MSBuild task - let mutable private MSBuildLoggers = - [] - //[ ErrorLoggerName ] - //|> List.map (fun a -> sprintf "%s,\"%s\"" a pathToLogger) - - do - // Add MSBuildLogger to track build messages - match BuildServer.buildServer with - | BuildServer.AppVeyor -> - MSBuildLoggers <- @"""C:\Program Files\AppVeyor\BuildAgent\Appveyor.MSBuildLogger.dll""" :: MSBuildLoggers - //| BuildServer.TeamCity -> MSBuildLoggers <- sprintf "%s,\"%s\"" TeamCityLoggerName pathToLogger :: MSBuildLoggers - | _ -> () - /// Runs a MSBuild project /// ## Parameters /// - `setParams` - A function that overwrites the default MSBuildParams @@ -492,12 +473,7 @@ module MSBuild = |> setParams let argsString = msBuildParams |> serializeMSBuildParams - let errorLoggerParam = - MSBuildLoggers - |> List.map (fun a -> Some ("logger", a)) - |> serializeArgs - - let args = Process.toParam project + " " + argsString + " " + errorLoggerParam + let args = Process.toParam project + " " + argsString Trace.tracefn "Building project: %s\n %s %s" project msBuildParams.ToolPath args let exitCode = Process.execSimple (fun info -> @@ -530,15 +506,18 @@ module MSBuild = let projects = projects |> Seq.toList let output = - if String.isNullOrEmpty outputPath then "" - else - outputPath - |> Path.getFullName - |> String.trimSeparator + match String.liftString outputPath with + | Some path -> Some (Path.getFullName path) + | None -> None let properties = - if String.isNullOrEmpty output then properties - else fun x -> ("OutputPath", output) :: (properties x) + match output with + | Some path -> + (fun project -> + let outputPath = path |> String.trimSeparator + ("OutputPath", (sprintf @"%s\\" outputPath)) :: (properties project) + ) + | None -> properties let dependencies = projects @@ -553,11 +532,13 @@ module MSBuild = Properties = projectParams.Properties @ properties project } projects - |> List.filter (fun project -> not <| Set.contains project dependencies) - |> List.iter (fun project -> build (setBuildParam project) project) + |> List.filter (fun project -> not <| Set.contains project dependencies) + |> List.iter (fun project -> build (setBuildParam project) project) + // it makes no sense to output the root dir content here since it does not contain the build output - if String.isNotNullOrEmpty output then !!(outputPath @@ "/**/*.*") |> Seq.toList - else [] + match output with + | Some path -> !! (path @@ "/**/*.*") |> Seq.toList + | None -> [] /// Builds the given project files or solution files and collects the output files. /// ## Parameters @@ -608,8 +589,8 @@ module MSBuild = /// - `configuration` - MSBuild configuration. /// - `projectFile` - The project file path. let buildWebsiteConfig setParams outputPath configuration projectFile = - use t = Trace.traceTask "BuildWebsite" projectFile - let projectName = (FileInfo.ofPath projectFile).Name.Replace(".csproj", "").Replace(".fsproj", "").Replace(".vbproj", "") + use __ = Trace.traceTask "BuildWebsite" projectFile + let projectName = Path.GetFileNameWithoutExtension projectFile let slashes (dir : string) = dir.Replace("\\", "/").TrimEnd('/') @@ -630,7 +611,7 @@ module MSBuild = "OutDir", prefix + outputPath "WebProjectOutputDir", prefix + outputPath + "/" + projectName ] [ projectFile ] |> ignore - !!(projectDir + "/bin/*.*") |> Shell.Copy(outputPath + "/" + projectName + "/bin/") + !! (projectDir + "/bin/*.*") |> Shell.copy(outputPath + "/" + projectName + "/bin/") /// Builds the given web project file with debug configuration and copies it to the given outputPath. /// ## Parameters diff --git a/src/app/Fake.DotNet.NuGet/Restore.fs b/src/app/Fake.DotNet.NuGet/Restore.fs index 0b0b53c78f6..30b5b20b3a3 100644 --- a/src/app/Fake.DotNet.NuGet/Restore.fs +++ b/src/app/Fake.DotNet.NuGet/Restore.fs @@ -50,6 +50,13 @@ let findNuget defaultPath = with | _ -> defaultPath @@ "NuGet.exe" + +/// RestorePackages Verbosity settings +type NugetRestoreVerbosity = +| Normal +| Quiet +| Detailed + /// RestorePackages parameter path type RestorePackageParams = { ToolPath: string @@ -57,7 +64,8 @@ type RestorePackageParams = TimeOut: TimeSpan /// Specifies how often nuget should try to restore the packages - default is 5 Retries: int - OutputPath: string} + OutputPath: string + Verbosity: NugetRestoreVerbosity } /// RestorePackage defaults parameters let RestorePackageDefaults = @@ -65,7 +73,8 @@ let RestorePackageDefaults = Sources = [] TimeOut = TimeSpan.FromMinutes 5. Retries = 5 - OutputPath = "./packages" } + OutputPath = "./packages" + Verbosity = Normal } /// RestorePackages parameter path for single packages type RestoreSinglePackageParams = @@ -77,7 +86,8 @@ type RestoreSinglePackageParams = ExcludeVersion: bool /// Specifies how often nuget should try to restore the packages - default is 5 Retries: int - IncludePreRelease: bool } + IncludePreRelease: bool + Verbosity: NugetRestoreVerbosity } /// RestoreSinglePackageParams defaults parameters let RestoreSinglePackageDefaults = @@ -88,7 +98,8 @@ let RestoreSinglePackageDefaults = Version = None ExcludeVersion = false Retries = 5 - IncludePreRelease = false } + IncludePreRelease = false + Verbosity = Normal } /// [omit] let runNuGet toolPath timeOut args failWith = @@ -110,12 +121,30 @@ let buildSources sources = |> List.map (fun source -> " \"-Source\" \"" + source + "\"") |> String.separated "" + +//Args Helper Functions +//quotePair wraps a pair of arguments in quotes -- used to pass cli args +let private quotePair = sprintf "\"%s\" \"%s\"" +let private joinArgs = Seq.filter( not << String.IsNullOrEmpty ) >> String.concat " " + +let private install = quotePair "install" +let private restore = quotePair "restore" +let private outputDirectory = quotePair "-OutputDirectory" +let private verbosity (v:NugetRestoreVerbosity) = + quotePair "-verbosity" (match v with | Quiet -> "quiet" | Detailed -> "detailed" | Normal -> "normal") + + /// [omit] let buildNuGetArgs setParams packageId = let parameters = RestoreSinglePackageDefaults |> setParams let sources = parameters.Sources |> buildSources - let args = " \"install\" \"" + packageId + "\" \"-OutputDirectory\" \"" + (parameters.OutputPath |> Path.getFullName) + "\"" + sources + let args = + [ + install packageId + outputDirectory (Path.combine (parameters.OutputPath |> Path.getFullName) sources) + verbosity parameters.Verbosity + ] |> joinArgs match parameters.ExcludeVersion, parameters.IncludePreRelease, parameters.Version with | (true, false, Some(v)) -> args + " \"-ExcludeVersion\" \"-Version\" \"" + v.ToString() + "\"" @@ -155,9 +184,12 @@ let RestorePackage setParams packageFile = let sources = parameters.Sources |> buildSources - let args = - " \"install\" \"" + (packageFile |> Path.getFullName) + "\"" + - " \"-OutputDirectory\" \"" + (parameters.OutputPath |> Path.getFullName) + "\"" + sources + let args = + [ + install (packageFile |> Path.getFullName) + outputDirectory (Path.combine (parameters.OutputPath |> Path.getFullName) sources) + verbosity parameters.Verbosity + ] |> joinArgs runNuGetTrial parameters.Retries parameters.ToolPath parameters.TimeOut args (fun () -> failwithf "Package installation of %s generation failed." packageFile) @@ -189,7 +221,10 @@ let RestoreMSSolutionPackages setParams solutionFile = let sources = parameters.Sources |> buildSources let args = - "\"restore\" \"" + (solutionFile |> Path.getFullName) + "\"" + - " \"-OutputDirectory\" \"" + (parameters.OutputPath |> Path.getFullName) + "\"" + sources + [ + restore (solutionFile |> Path.getFullName) + outputDirectory (Path.combine (parameters.OutputPath |> Path.getFullName) sources) + verbosity parameters.Verbosity + ] |> joinArgs runNuGetTrial parameters.Retries parameters.ToolPath parameters.TimeOut args (fun () -> failwithf "Package restore of %s failed" solutionFile) diff --git a/src/app/Fake.Runtime/FakeRuntime.fs b/src/app/Fake.Runtime/FakeRuntime.fs index c8df33ad678..32af28015c0 100644 --- a/src/app/Fake.Runtime/FakeRuntime.fs +++ b/src/app/Fake.Runtime/FakeRuntime.fs @@ -192,37 +192,49 @@ let paketCachingProvider (script:string) (logLevel:Trace.VerboseLevel) cacheDir |> Seq.toList #endif - let writeIntellisenseFile cacheDir (context : Paket.LoadingScripts.ScriptGeneration.PaketContext) = - // Write loadDependencies file (basically only for editor support) + + let writeIntellisenseFile cacheDir = let intellisenseFile = Path.Combine (cacheDir, Runners.loadScriptName) if logLevel.PrintVerbose then Trace.log <| sprintf "Writing '%s'" intellisenseFile - let groupScripts = Paket.LoadingScripts.ScriptGeneration.generateScriptContent context - let _, groupScript = - match groupScripts with - | [] -> failwith "generateScriptContent returned []" - | [h] -> failwithf "generateScriptContent returned a single item: %A" h - | [ _, scripts; _, [groupScript] ] -> scripts, groupScript - | _ -> failwithf "generateScriptContent returned %A" groupScripts - - - let rootDir = DirectoryInfo cacheDir - //for sd in scripts do - // let scriptPath = Path.Combine (rootDir.FullName , sd.PartialPath) - // let scriptDir = Path.GetDirectoryName scriptPath |> Path.GetFullPath |> DirectoryInfo - // scriptDir.Create() - // sd.Save rootDir - - let content = groupScript.RenderDirect rootDir (FileInfo intellisenseFile) - // TODO: Make sure to create #if !FAKE block, because we don't actually need it. + // Make sure to create #if !FAKE block, because we don't actually need it. let intellisenseContents = [| "// This file is automatically generated by FAKE" "// This file is needed for IDE support only" "#if !FAKE" - content + sprintf "#load \"%s\"" Runners.loadScriptLazyName "#endif" |] File.WriteAllLines (intellisenseFile, intellisenseContents) + let writeIntellisenseLazyFile cacheDir (context : Paket.LoadingScripts.ScriptGeneration.PaketContext) = + // Write loadDependencies file (basically only for editor support) + async { + try + let intellisenseLazyFile = Path.Combine (cacheDir, Runners.loadScriptName) + let cache = context.Cache + cache.StartSetupGroup(groupName) |> ignore + do! cache.AwaitFinishSetup() + let groupScripts = Paket.LoadingScripts.ScriptGeneration.generateScriptContent context + let _, groupScript = + match groupScripts with + | [] -> failwith "generateScriptContent returned []" + | [h] -> failwithf "generateScriptContent returned a single item: %A" h + | [ _, scripts; _, [groupScript] ] -> scripts, groupScript + | _ -> failwithf "generateScriptContent returned %A" groupScripts + + + let rootDir = DirectoryInfo cacheDir + let content = groupScript.RenderDirect rootDir (FileInfo intellisenseLazyFile) + + let intellisenseContents = + [| "// This file is automatically generated by FAKE" + "// This file is needed for IDE support only" + content |] + File.WriteAllLines (intellisenseLazyFile, intellisenseContents) + with e -> + eprintfn "Failed to write intellisense script: %O" e + } + let lockFile = lazy LockFile.LoadFrom(lockFilePath.FullName) let cache = lazy DependencyCache(lockFile.Value) let retrieveInfosUncached () = @@ -232,8 +244,6 @@ let paketCachingProvider (script:string) (logLevel:Trace.VerboseLevel) cacheDir let (cache:DependencyCache) = cache.Value let orderedGroup = cache.OrderedGroups groupName // lockFile.GetGroup groupName - - //dependencyCacheProfile.Dispose() let rid = #if DOTNETCORE @@ -348,27 +358,21 @@ let paketCachingProvider (script:string) (logLevel:Trace.VerboseLevel) cacheDir () if needLocalLock then File.Copy(lockFilePath.FullName, localLock, true) - // TODO: Check if restore is up-to date and skip all paket calls (load assembly-list from a new cache) // Restore paketApi.Restore((*false, group, [], false, true*)) |> ignore - // Restore load-script, as we don't need it create it in the background. - let writeIntellisenseTask = + // https://github.com/fsharp/FAKE/issues/1908 + writeIntellisenseFile cacheDir // write intellisense.fsx immediately + let writeIntellisenseTask = // write intellisense_lazy.fsx when something changed. lazy - async { - try - cache.Value.StartSetupGroup(groupName) |> ignore - do! cache.Value.AwaitFinishSetup() - writeIntellisenseFile cacheDir { - Cache = cache.Value - ScriptType = Paket.LoadingScripts.ScriptGeneration.ScriptType.FSharp - Groups = [groupName] - DefaultFramework = false, (Paket.FrameworkIdentifier.DotNetFramework (Paket.FrameworkVersion.V4_7_1)) - } - with e -> - eprintfn "Failed to write intellisense script: %O" e - } |> Async.StartAsTask + writeIntellisenseLazyFile cacheDir { + Cache = cache.Value + ScriptType = Paket.LoadingScripts.ScriptGeneration.ScriptType.FSharp + Groups = [groupName] + DefaultFramework = false, (Paket.FrameworkIdentifier.DotNetFramework (Paket.FrameworkVersion.V4_7_1)) + } + |> Async.StartAsTask let readFromCache () = File.ReadLines(assemblyCacheFile) diff --git a/src/app/Fake.Runtime/Runners.fs b/src/app/Fake.Runtime/Runners.fs index dd9245aad64..519850e0186 100644 --- a/src/app/Fake.Runtime/Runners.fs +++ b/src/app/Fake.Runtime/Runners.fs @@ -50,7 +50,10 @@ type FakeConfig = let fsiAssemblyName = "removeme" let cachedAssemblyPrefix = "FAKE_CACHE_" +// This file is created immediately in order to make fsc happy let loadScriptName = "intellisense.fsx" +// This file is created lazily and is not used by fsc (only for intellisense). +let loadScriptLazyName = "intellisense_lazy.fsx" type ResultCoreCacheInfo = { MaybeCompiledAssembly : string option diff --git a/src/app/Fake.Tools.Pickles/Pickles.fs b/src/app/Fake.Tools.Pickles/Pickles.fs index 3e416b57be0..de2f40d6e38 100644 --- a/src/app/Fake.Tools.Pickles/Pickles.fs +++ b/src/app/Fake.Tools.Pickles/Pickles.fs @@ -217,8 +217,9 @@ let convert setParams = let makeProcessStartInfo info = { info with FileName = parameters.ToolPath WorkingDirectory = "." - Arguments = parameters |> buildPicklesArgs } + Arguments = parameters |> buildPicklesArgs } + |> Process.withFramework - let result = Process.execSimple makeProcessStartInfo parameters.TimeOut + let result = Process.execSimple makeProcessStartInfo parameters.TimeOut ResultHandling.failBuildIfPicklesReportedError parameters.ErrorLevel result diff --git a/src/legacy/Fake.Deploy.Lib/Fake.Deploy.Lib.fsproj b/src/legacy/Fake.Deploy.Lib/Fake.Deploy.Lib.fsproj index 6c90a9000f5..802a3854fe0 100644 --- a/src/legacy/Fake.Deploy.Lib/Fake.Deploy.Lib.fsproj +++ b/src/legacy/Fake.Deploy.Lib/Fake.Deploy.Lib.fsproj @@ -15,6 +15,7 @@ 512 Fake.Deploy.Lib + 44 true diff --git a/src/legacy/Fake.Deploy/Fake.Deploy.fsproj b/src/legacy/Fake.Deploy/Fake.Deploy.fsproj index 9a0b9ddb51e..f213216fbe0 100644 --- a/src/legacy/Fake.Deploy/Fake.Deploy.fsproj +++ b/src/legacy/Fake.Deploy/Fake.Deploy.fsproj @@ -14,6 +14,7 @@ v4.6 512 + 44 true diff --git a/src/legacy/Fake.Experimental/Fake.Experimental.fsproj b/src/legacy/Fake.Experimental/Fake.Experimental.fsproj index 51dca8b42ea..f6dbf2a6dbc 100644 --- a/src/legacy/Fake.Experimental/Fake.Experimental.fsproj +++ b/src/legacy/Fake.Experimental/Fake.Experimental.fsproj @@ -15,6 +15,7 @@ Fake.Experimental v4.6 + 44 true diff --git a/src/legacy/Fake.FluentMigrator/Fake.FluentMigrator.fsproj b/src/legacy/Fake.FluentMigrator/Fake.FluentMigrator.fsproj index 29ee1d1b2f3..66d5630797a 100644 --- a/src/legacy/Fake.FluentMigrator/Fake.FluentMigrator.fsproj +++ b/src/legacy/Fake.FluentMigrator/Fake.FluentMigrator.fsproj @@ -12,6 +12,7 @@ Fake.FluentMigrator v4.6 Fake.FluentMigrator + 44 ..\..\..\ diff --git a/src/legacy/Fake.Gallio/Fake.Gallio.fsproj b/src/legacy/Fake.Gallio/Fake.Gallio.fsproj index d557ff7d4ae..9722a67a909 100644 --- a/src/legacy/Fake.Gallio/Fake.Gallio.fsproj +++ b/src/legacy/Fake.Gallio/Fake.Gallio.fsproj @@ -14,6 +14,7 @@ v4.6 Fake.Gallio + 44 true diff --git a/src/legacy/Fake.IIS/Fake.IIS.fsproj b/src/legacy/Fake.IIS/Fake.IIS.fsproj index 555c008a4a2..efa27e26368 100644 --- a/src/legacy/Fake.IIS/Fake.IIS.fsproj +++ b/src/legacy/Fake.IIS/Fake.IIS.fsproj @@ -14,6 +14,7 @@ Fake.IIS ..\..\..\ + 44 true diff --git a/src/legacy/Fake.SQL/Fake.SQL.fsproj b/src/legacy/Fake.SQL/Fake.SQL.fsproj index af6c8e7de1e..17241e8f933 100644 --- a/src/legacy/Fake.SQL/Fake.SQL.fsproj +++ b/src/legacy/Fake.SQL/Fake.SQL.fsproj @@ -15,6 +15,7 @@ 512 Fake.SQL + 44 true diff --git a/src/legacy/FsCheck.Fake/FsCheck.Fake.fsproj b/src/legacy/FsCheck.Fake/FsCheck.Fake.fsproj index f68418bd3d3..31bc7d3762c 100644 --- a/src/legacy/FsCheck.Fake/FsCheck.Fake.fsproj +++ b/src/legacy/FsCheck.Fake/FsCheck.Fake.fsproj @@ -16,6 +16,7 @@ FsCheck.Fake v4.6 + 44 true diff --git a/src/legacy/Test.FAKECore/Test.FAKECore.csproj b/src/legacy/Test.FAKECore/Test.FAKECore.csproj index 6d392b05973..22a2ca939f9 100644 --- a/src/legacy/Test.FAKECore/Test.FAKECore.csproj +++ b/src/legacy/Test.FAKECore/Test.FAKECore.csproj @@ -32,6 +32,7 @@ false true + 44 true diff --git a/src/legacy/Test.Fake.Deploy.Web.File/Test.Fake.Deploy.Web.File.fsproj b/src/legacy/Test.Fake.Deploy.Web.File/Test.Fake.Deploy.Web.File.fsproj index 7712c4a4ccd..1e5450f99ba 100644 --- a/src/legacy/Test.Fake.Deploy.Web.File/Test.Fake.Deploy.Web.File.fsproj +++ b/src/legacy/Test.Fake.Deploy.Web.File/Test.Fake.Deploy.Web.File.fsproj @@ -14,6 +14,7 @@ Test.Fake.Deploy.Web.File v4.6 Test.Fake.Deploy.Web.File + 44 true diff --git a/src/legacy/Test.Fake.Deploy.Web/Test.Fake.Deploy.Web.fsproj b/src/legacy/Test.Fake.Deploy.Web/Test.Fake.Deploy.Web.fsproj index f774c2a9b5d..0f84897901f 100644 --- a/src/legacy/Test.Fake.Deploy.Web/Test.Fake.Deploy.Web.fsproj +++ b/src/legacy/Test.Fake.Deploy.Web/Test.Fake.Deploy.Web.fsproj @@ -15,6 +15,7 @@ v4.6 Test.Fake.Deploy.Web + 44 true diff --git a/src/legacy/Test.Fake.Deploy/Test.Fake.Deploy.csproj b/src/legacy/Test.Fake.Deploy/Test.Fake.Deploy.csproj index 493e86e74e8..e80e0a9a584 100644 --- a/src/legacy/Test.Fake.Deploy/Test.Fake.Deploy.csproj +++ b/src/legacy/Test.Fake.Deploy/Test.Fake.Deploy.csproj @@ -30,6 +30,7 @@ false true + 44 true diff --git a/src/legacy/Test.Git/Test.Git.csproj b/src/legacy/Test.Git/Test.Git.csproj index 6d484759063..bff8fc0d02f 100644 --- a/src/legacy/Test.Git/Test.Git.csproj +++ b/src/legacy/Test.Git/Test.Git.csproj @@ -13,6 +13,7 @@ v4.6 512 + 44 true diff --git a/src/legacy/deploy.web/Fake.Deploy.Web.Abstractions/Fake.Deploy.Web.Abstractions.fsproj b/src/legacy/deploy.web/Fake.Deploy.Web.Abstractions/Fake.Deploy.Web.Abstractions.fsproj index eac8961fe47..41bd7f6ecf6 100644 --- a/src/legacy/deploy.web/Fake.Deploy.Web.Abstractions/Fake.Deploy.Web.Abstractions.fsproj +++ b/src/legacy/deploy.web/Fake.Deploy.Web.Abstractions/Fake.Deploy.Web.Abstractions.fsproj @@ -14,6 +14,7 @@ 512 Fake.Deploy.Web.Abstractions + 44 true diff --git a/src/legacy/deploy.web/Fake.Deploy.Web.DataProviders/Fake.Deploy.Web.File/Fake.Deploy.Web.File.fsproj b/src/legacy/deploy.web/Fake.Deploy.Web.DataProviders/Fake.Deploy.Web.File/Fake.Deploy.Web.File.fsproj index 886371087e4..9e844c64e64 100644 --- a/src/legacy/deploy.web/Fake.Deploy.Web.DataProviders/Fake.Deploy.Web.File/Fake.Deploy.Web.File.fsproj +++ b/src/legacy/deploy.web/Fake.Deploy.Web.DataProviders/Fake.Deploy.Web.File/Fake.Deploy.Web.File.fsproj @@ -12,6 +12,7 @@ Fake.Deploy.Web.File v4.6 Fake.Deploy.Web.File + 44 true diff --git a/src/legacy/deploy.web/Fake.Deploy.Web.DataProviders/Fake.Deploy.Web.RavenDb/Fake.Deploy.Web.RavenDb.fsproj b/src/legacy/deploy.web/Fake.Deploy.Web.DataProviders/Fake.Deploy.Web.RavenDb/Fake.Deploy.Web.RavenDb.fsproj index 5a7055751a1..9fe3a547a92 100644 --- a/src/legacy/deploy.web/Fake.Deploy.Web.DataProviders/Fake.Deploy.Web.RavenDb/Fake.Deploy.Web.RavenDb.fsproj +++ b/src/legacy/deploy.web/Fake.Deploy.Web.DataProviders/Fake.Deploy.Web.RavenDb/Fake.Deploy.Web.RavenDb.fsproj @@ -14,6 +14,7 @@ 512 Fake.Deploy.Web.RavenDb + 44 true diff --git a/src/legacy/deploy.web/Fake.Deploy.Web/Fake.Deploy.Web.fsproj b/src/legacy/deploy.web/Fake.Deploy.Web/Fake.Deploy.Web.fsproj index 59b5fba3691..7915e0ec25a 100644 --- a/src/legacy/deploy.web/Fake.Deploy.Web/Fake.Deploy.Web.fsproj +++ b/src/legacy/deploy.web/Fake.Deploy.Web/Fake.Deploy.Web.fsproj @@ -15,6 +15,7 @@ v4.6 true Fake.Deploy.Web + 44 true disabled diff --git a/src/test/Fake.Core.UnitTests/Fake.Core.Target.fs b/src/test/Fake.Core.UnitTests/Fake.Core.Target.fs index f9a8db210af..0061cb37e34 100644 --- a/src/test/Fake.Core.UnitTests/Fake.Core.Target.fs +++ b/src/test/Fake.Core.UnitTests/Fake.Core.Target.fs @@ -15,32 +15,444 @@ let run targetName = open Fake.Core.TargetOperators -[] -let tests = - testList "Fake.Core.Target.Tests" [ - testCase "Test that we run a simple target with dependency" <| fun _ -> - +let (|Target|) (t : Target) = + Target t.Name + +let (|TargetSet|) (t : seq) = + let list = t |> Seq.map (fun t -> t.Name) |> Seq.sort |> Seq.toList + TargetSet list + +let targetTestCase name f = + testCase name <| fun arg -> use execContext = Fake.Core.Context.FakeExecutionContext.Create false "text.fsx" [] Fake.Core.Context.setExecutionContext (Fake.Core.Context.RuntimeContext.Fake execContext) + f arg +let DoNothing = ignore +let determineBuildOrder a b = Target.determineBuildOrder a +let validateBuildOrder a b = ignore a; ignore b + +[] +let tests = + testList "Fake.Core.Target.Tests" [ + targetTestCase "check simple parallelism" <| fun _ -> + Target.create "a" ignore + Target.create "b" ignore + Target.create "c" ignore + + Target.create "dep" ignore + + "a" ==> "dep" |> ignore + "b" ==> "dep" |> ignore + "c" ==> "dep" |> ignore + + let order = Target.determineBuildOrder "dep" + //validateBuildOrder order "dep" + match order with + | [TargetSet ["a"; "b"; "c"]; [|Target "dep"|]] -> + // as expected + () + | _ -> + Expect.isTrue (sprintf "inconsistent order: %A" order) false + + targetTestCase "issue #1395 example" <| fun _ -> + Target.create "T1" DoNothing + Target.create "T2.1" DoNothing + Target.create "T2.2" DoNothing + Target.create "T2.3" DoNothing + Target.create "T3" DoNothing + Target.create "T4" DoNothing + + // create a graph + "T1" ==> "T2.1" ==> "T2.2" ==> "T2.3" |> ignore + "T1" ==> "T3" |> ignore + "T2.3" ==> "T4" |> ignore + "T3" ==> "T4" |> ignore + + let order = determineBuildOrder "T4" 2 + validateBuildOrder order "T4" + + match order with + | [[|Target "T1"|];TargetSet ["T2.1"; "T3"];[|Target "T2.2"|];[|Target "T2.3"|];[|Target "T4"|]] -> + // as expected + () + + | _ -> + failwithf "unexpected order: %A" order + + targetTestCase "Diamonds are resolved correctly" <| fun _ -> + Target.create "a" DoNothing + Target.create "b" DoNothing + Target.create "c" DoNothing + Target.create "d" DoNothing + + // create graph + "a" ==> "b" ==> "d" |> ignore + "a" ==> "c" ==> "d" |> ignore + + let order = determineBuildOrder "d" 2 + validateBuildOrder order "d" + + match order with + | [[|Target "a"|];TargetSet ["b"; "c"];[|Target "d"|]] -> + // as expected + () + + | _ -> + failwithf "unexpected order: %A" order + + targetTestCase "Initial Targets Can Run Concurrently" <| fun _ -> + Target.create "a" DoNothing + Target.create "b" DoNothing + Target.create "c1" DoNothing + Target.create "c2" DoNothing + Target.create "d" DoNothing + + // create graph + "a" ==> "b" ==> "d" |> ignore + "c1" ==> "c2" ==> "d" |> ignore + + let order = determineBuildOrder "d" 2 + validateBuildOrder order "d" + + match order with + | [TargetSet ["a"; "c1"];TargetSet ["b"; "c2"];[|Target "d"|]] -> + // as expected + () + + | _ -> + failwithf "unexpected order: %A" order + + targetTestCase "BlythMeisters Scenario Of Complex Build Order Is Correct" <| fun _ -> + Target.create "PrepareBuild" DoNothing + Target.create "CreateWholeCaboodle" DoNothing + Target.create "UpdateVersions" DoNothing + Target.create "PreBuildVerifications" DoNothing + Target.create "BuildWholeCaboodle" DoNothing + Target.create "RunUnitTests" DoNothing + Target.create "RunIntTests" DoNothing + Target.create "CreateDBNugets" DoNothing + Target.create "DropIntDatabases" DoNothing + Target.create "DeployIntDatabases" DoNothing + Target.create "CreateNugets" DoNothing + Target.create "PublishNugets" DoNothing + + "PrepareBuild" ==> "CreateWholeCaboodle" |> ignore + "PrepareBuild" ==> "UpdateVersions" |> ignore + "CreateWholeCaboodle" ==> "PreBuildVerifications" |> ignore + "UpdateVersions" ==> "PreBuildVerifications" |> ignore + "PreBuildVerifications" ==> "BuildWholeCaboodle" |> ignore + "PreBuildVerifications" ==> "CreateDBNugets" |> ignore + "PreBuildVerifications" ==> "DropIntDatabases" |> ignore + "BuildWholeCaboodle" ==> "CreateNugets" |> ignore + "BuildWholeCaboodle" ==> "RunUnitTests" |> ignore + "BuildWholeCaboodle" ==> "RunIntTests" |> ignore + "CreateDBNugets" ==> "DeployIntDatabases" |> ignore + "DropIntDatabases" ==> "DeployIntDatabases" |> ignore + "DeployIntDatabases" ==> "RunIntTests" |> ignore + "CreateNugets" ==> "PublishNugets" |> ignore + "CreateDBNugets" ==> "PublishNugets" |> ignore + "RunUnitTests" ==> "PublishNugets" |> ignore + "RunIntTests" ==> "PublishNugets" |> ignore + + let order = determineBuildOrder "PublishNugets" 2 + validateBuildOrder order "PublishNugets" + + match order with + | [ + TargetSet ["PrepareBuild"]; + TargetSet ["CreateWholeCaboodle"; "UpdateVersions"]; + TargetSet ["PreBuildVerifications"]; + TargetSet ["BuildWholeCaboodle"; "CreateDBNugets"; "DropIntDatabases"]; + TargetSet ["CreateNugets"; "DeployIntDatabases"; "RunUnitTests"]; + TargetSet ["RunIntTests"]; + TargetSet ["PublishNugets"]; + ] -> + // as expected + () + + | _ -> + failwithf "unexpected order: %A" order + + targetTestCase "BlythMeisters Scenario Of Even More Complex Build Order Is Correct" <| fun _ -> + Target.create "PrepareBuild" DoNothing + Target.create "CreateWholeCaboodle" DoNothing + Target.create "UpdateVersions" DoNothing + Target.create "PreBuildVerifications" DoNothing + Target.create "BuildWholeCaboodle" DoNothing + Target.create "RunUnitTests" DoNothing + Target.create "RunIntTests" DoNothing + Target.create "CreateDBNugets" DoNothing + Target.create "DropIntDatabases" DoNothing + Target.create "DeployIntDatabases" DoNothing + Target.create "CreateNugets" DoNothing + Target.create "PublishNugets" DoNothing + + "PrepareBuild" ==> "CreateWholeCaboodle" ==> "PreBuildVerifications" |> ignore + "PrepareBuild" ==> "UpdateVersions" ==> "PreBuildVerifications" |> ignore + "PreBuildVerifications" ==> "CreateDBNugets" ==> "DeployIntDatabases" |> ignore + "PreBuildVerifications" ==> "DropIntDatabases" ==> "DeployIntDatabases" |> ignore + "PreBuildVerifications" ==> "BuildWholeCaboodle" |> ignore + "BuildWholeCaboodle" ==> "RunUnitTests" |> ignore + "BuildWholeCaboodle" ==> "RunIntTests" |> ignore + "DeployIntDatabases" ==> "RunIntTests" |> ignore + "BuildWholeCaboodle" ==> "CreateNugets" |> ignore + "RunIntTests" ==> "CreateNugets" |> ignore + "RunUnitTests" ==> "CreateNugets" |> ignore + "RunUnitTests" ==> "PublishNugets" |> ignore + "RunIntTests" ==> "PublishNugets" |> ignore + "CreateDBNugets" ==> "PublishNugets" |> ignore + "CreateNugets" ==> "PublishNugets" |> ignore + + let order = determineBuildOrder "PublishNugets" 2 + validateBuildOrder order "PublishNugets" + + match order with + | [ + TargetSet ["PrepareBuild"]; + TargetSet ["CreateWholeCaboodle"; "UpdateVersions"]; + TargetSet ["PreBuildVerifications"]; + TargetSet ["BuildWholeCaboodle"; "CreateDBNugets"; "DropIntDatabases"]; + TargetSet ["DeployIntDatabases"; "RunUnitTests"]; + TargetSet ["RunIntTests"]; + TargetSet ["CreateNugets"]; + TargetSet ["PublishNugets"]; + ] -> + // as expected + () + + | _ -> + failwithf "unexpected order: %A" order + + targetTestCase "Spurs run as early as possible" <| fun _ -> + Target.create "a" DoNothing + Target.create "b" DoNothing + Target.create "c1" DoNothing + Target.create "c2" DoNothing + Target.create "d" DoNothing + + // create graph + "a" ==> "b" ==> "d" |> ignore + "a" ==> "c1" ==> "c2" ==> "d" |> ignore + + let order = determineBuildOrder "d" 2 + validateBuildOrder order "d" + + match order with + | [[|Target "a"|];TargetSet ["b"; "c1"];[|Target "c2"|];[|Target "d"|]] -> + // as expected + () + + | _ -> + failwithf "unexpected order: %A" order + + targetTestCase "Spurs run as early as possible 3 and 2 length" <| fun _ -> + Target.create "a" DoNothing + Target.create "b1" DoNothing + Target.create "b2" DoNothing + Target.create "c1" DoNothing + Target.create "c2" DoNothing + Target.create "c3" DoNothing + Target.create "d" DoNothing + + // create graph + "a" ==> "b1" ==> "b2" ==> "d" |> ignore + "a" ==> "c1" ==> "c2" ==> "c3" ==> "d" |> ignore + + let order = determineBuildOrder "d" 2 + validateBuildOrder order "d" + match order with + | [[|Target "a"|];TargetSet ["b1"; "c1"];TargetSet ["b2"; "c2"];[|Target "c3"|];[|Target "d"|]] -> + // as expected + () + + | _ -> + failwithf "unexpected order: %A" order + + targetTestCase "Spurs run as early as possible (reverse definition order)" <| fun _ -> + Target.create "a" DoNothing + Target.create "b" DoNothing + Target.create "c1" DoNothing + Target.create "c2" DoNothing + Target.create "d" DoNothing + + // create graph + "a" ==> "c1" ==> "c2" ==> "d" |> ignore + "a" ==> "b" ==> "d" |> ignore + + let order = determineBuildOrder "d" 2 + validateBuildOrder order "d" + + match order with + | [[|Target "a"|];TargetSet ["b"; "c1"];[|Target "c2"|];[|Target "d"|]] -> + // as expected + () + + | _ -> + failwithf "unexpected order: %A" order + + targetTestCase "Spurs run as early as possible split on longer spur" <| fun _ -> + Target.create "a" DoNothing + Target.create "b" DoNothing + Target.create "c1" DoNothing + Target.create "c21" DoNothing + Target.create "c22" DoNothing + Target.create "d" DoNothing + + // create graph + "a" ==> "b" ==> "d" |> ignore + "a" ==> "c1" ==> "c21" ==> "d" |> ignore + "a" ==> "c1" ==> "c22" ==> "d" |> ignore + + let order = determineBuildOrder "d" 2 + validateBuildOrder order "d" + + match order with + | [[|Target "a"|];TargetSet ["b"; "c1"];TargetSet ["c21"; "c22"];[|Target "d"|]] -> + // as expected + () + + | _ -> + failwithf "unexpected order: %A" order + + targetTestCase "3 way Spurs run as early as possible" <| fun _ -> + Target.create "a" DoNothing + Target.create "b" DoNothing + Target.create "c1" DoNothing + Target.create "c2" DoNothing + Target.create "d1" DoNothing + Target.create "d2" DoNothing + Target.create "d3" DoNothing + Target.create "e" DoNothing + + // create graph + "a" ==> "b" ==> "e" |> ignore + "a" ==> "c1" ==> "c2" ==> "e" |> ignore + "a" ==> "d1" ==> "d2" ==> "d3" ==> "e" |> ignore + + let order = determineBuildOrder "e" 2 + validateBuildOrder order "e" + + match order with + | [[|Target "a"|];TargetSet ["b"; "c1"; "d1"];TargetSet ["c2"; "d2"];[|Target "d3"|];[|Target "e"|]] -> + // as expected + () + + | _ -> + failwithf "unexpected order: %A" order + + targetTestCase "Soft dependencies are respected when dependees are present" <| fun _ -> + Target.create "a" DoNothing + Target.create "b" DoNothing + Target.create "c" DoNothing + Target.create "d" DoNothing + Target.create "e" DoNothing + Target.create "f" DoNothing + + + "a" ==> "b" ==> "c" |> ignore + // d does not depend on c, but if something else forces c to run, then d must come after c. + "d" <=? "c" |> ignore + + // Running f will run c, d, and f. The soft dependency of d on c means that c must run first. + "d" ==> "f" |> ignore + "e" ==> "f" |> ignore + "c" ==> "f" |> ignore + + let order = determineBuildOrder "f" 2 + + validateBuildOrder order "f" + + match order with + | [TargetSet ["a"; "e"];TargetSet ["b";];[|Target "c"|];TargetSet ["d"];[|Target "f"|]] -> + // as expected + () + + | _ -> + failwithf "unexpected order: %A" order + () + + targetTestCase "Soft dependencies are ignored when dependees are not present" <| fun _ -> + Target.create "a" DoNothing + Target.create "b" DoNothing + Target.create "c" DoNothing + Target.create "d" DoNothing + Target.create "e" DoNothing + + + "a" ==> "b" ==> "c" |> ignore + // d does not depend on c, but if something else forces c to run, then d must come after c. + "c" ?=> "d" |> ignore + + // Running e will not run c, due to soft dependency + "d" ==> "e" |> ignore + "b" ==> "e" |> ignore + + let order = determineBuildOrder "e" 2 + + validateBuildOrder order "e" + + match order with + | [TargetSet ["a";"d"];[|Target "b"|];[|Target "e"|]] -> + // as expected + () + + | _ -> + failwithf "unexpected order: %A" order + () + + targetTestCase "Fsharp.Data Dependencies single worker (broken)" <| fun _ -> + Target.create "Clean" DoNothing + Target.create "AssemblyInfo" DoNothing + Target.create "Build" DoNothing + Target.create "BuildTests" DoNothing + Target.create "BuildConsoleTests" DoNothing + Target.create "RunTests" DoNothing + Target.create "FSharp.Data.Tests" DoNothing + Target.create "FSharp.Data.DesignTime.Tests" DoNothing + Target.create "RunConsoleTests" DoNothing + Target.create "All" DoNothing + + "FSharp.Data.Tests" ==> "RunTests" |> ignore + "FSharp.Data.DesignTime.Tests" ==> "RunTests" |> ignore + "Clean" ==> "AssemblyInfo" ==> "Build" |> ignore + "Build" ==> "All" |> ignore + "BuildTests" ==> "All" |> ignore + "BuildConsoleTests" ==> "All" |> ignore + "RunTests" ==> "All" |> ignore + "RunConsoleTests" ==> "All" |> ignore + + let order = determineBuildOrder "All" 1 + validateBuildOrder order "All" + + match order with + | [ + TargetSet ["BuildConsoleTests"; "BuildTests"; "Clean"; "FSharp.Data.DesignTime.Tests"; "FSharp.Data.Tests"; "RunConsoleTests"]; + TargetSet ["AssemblyInfo"; "RunTests" ]; + TargetSet ["Build"]; + TargetSet ["All"]; + ] -> + // as expected + () + + | _ -> + failwithf "unexpected order: %A" order + + targetTestCase "Test that we run a simple target with dependency" <| fun _ -> Target.create "SimpleTest" ignore Target.create "Dependency" ignore - + "Dependency" ==> "SimpleTest" |> ignore let context = run "SimpleTest" - Expect.equal "Expected both tasks to succeed" false context.HasError + Expect.equal "Expected both tasks to succeed" false context.HasError Expect.equal "Expected context to contain both targets" 2 context.PreviousTargets.Length - - testCase "Test we output targets after failing targets" <| fun _ -> - - use execContext = Fake.Core.Context.FakeExecutionContext.Create false "text.fsx" [] - Fake.Core.Context.setExecutionContext (Fake.Core.Context.RuntimeContext.Fake execContext) + targetTestCase "Test we output targets after failing targets" <| fun _ -> Target.create "SimpleTest" ignore Target.create "Dependency" (fun _ -> failwith "failed dependency") - + "Dependency" ==> "SimpleTest" |> ignore let context = run "SimpleTest" Expect.equal "Expected failure" true context.HasError Expect.equal "Expected context to contain both targets" 2 context.PreviousTargets.Length // second one as "skipped" - ] \ No newline at end of file + ]