From f0ba00273c849fe761683fc81980aca4e9d929c8 Mon Sep 17 00:00:00 2001 From: Severin Sverdvik Date: Fri, 13 Apr 2018 20:29:46 +0200 Subject: [PATCH] Convert YarnHelper to module --- Fake.sln | 15 ++ build.fsx | 1 + src/app/Fake.JavaScript.Yarn/AssemblyInfo.fs | 17 ++ .../Fake.JavaScript.Yarn.fsproj | 17 ++ src/app/Fake.JavaScript.Yarn/Yarn.fs | 170 ++++++++++++++++++ src/app/Fake.JavaScript.Yarn/paket.references | 4 + src/legacy/FakeLib/FakeLib.fsproj | 3 + src/legacy/FakeLib/YarnHelper.fs | 9 + 8 files changed, 236 insertions(+) create mode 100644 src/app/Fake.JavaScript.Yarn/AssemblyInfo.fs create mode 100644 src/app/Fake.JavaScript.Yarn/Fake.JavaScript.Yarn.fsproj create mode 100644 src/app/Fake.JavaScript.Yarn/Yarn.fs create mode 100644 src/app/Fake.JavaScript.Yarn/paket.references diff --git a/Fake.sln b/Fake.sln index 0a365a9e1ee..950586119c3 100644 --- a/Fake.sln +++ b/Fake.sln @@ -104,6 +104,8 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{E09B72E4-D EndProject Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "Fake.Core.CommandLine.UnitTests", "src/test/Fake.Core.CommandLine.UnitTests/Fake.Core.CommandLine.UnitTests.fsproj", "{8561A35A-C2A4-43C7-A938-CB35A7747121}" EndProject +Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "Fake.JavaScript.Yarn", "src/app/Fake.JavaScript.Yarn/Fake.JavaScript.Yarn.fsproj", "{DE7579F2-C20F-4C35-BC04-C10362912243}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -666,6 +668,18 @@ Global {8561A35A-C2A4-43C7-A938-CB35A7747121}.Release|x64.Build.0 = Release|x64 {8561A35A-C2A4-43C7-A938-CB35A7747121}.Release|x86.ActiveCfg = Release|x86 {8561A35A-C2A4-43C7-A938-CB35A7747121}.Release|x86.Build.0 = Release|x86 + {DE7579F2-C20F-4C35-BC04-C10362912243}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {DE7579F2-C20F-4C35-BC04-C10362912243}.Debug|Any CPU.Build.0 = Debug|Any CPU + {DE7579F2-C20F-4C35-BC04-C10362912243}.Debug|x64.ActiveCfg = Debug|x64 + {DE7579F2-C20F-4C35-BC04-C10362912243}.Debug|x64.Build.0 = Debug|x64 + {DE7579F2-C20F-4C35-BC04-C10362912243}.Debug|x86.ActiveCfg = Debug|x86 + {DE7579F2-C20F-4C35-BC04-C10362912243}.Debug|x86.Build.0 = Debug|x86 + {DE7579F2-C20F-4C35-BC04-C10362912243}.Release|Any CPU.ActiveCfg = Release|Any CPU + {DE7579F2-C20F-4C35-BC04-C10362912243}.Release|Any CPU.Build.0 = Release|Any CPU + {DE7579F2-C20F-4C35-BC04-C10362912243}.Release|x64.ActiveCfg = Release|x64 + {DE7579F2-C20F-4C35-BC04-C10362912243}.Release|x64.Build.0 = Release|x64 + {DE7579F2-C20F-4C35-BC04-C10362912243}.Release|x86.ActiveCfg = Release|x86 + {DE7579F2-C20F-4C35-BC04-C10362912243}.Release|x86.Build.0 = Release|x86 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -719,6 +733,7 @@ Global {CA6EB1B3-EB3A-4063-8A6C-DE099A53A8B1} = {901F162F-8925-4390-89C5-9EE2C343F744} {E09B72E4-D890-46A8-8D14-7367C2E23E9D} = {539D7B9A-18A1-4D79-86AB-C8B48090CA84} {8561A35A-C2A4-43C7-A938-CB35A7747121} = {E09B72E4-D890-46A8-8D14-7367C2E23E9D} + {DE7579F2-C20F-4C35-BC04-C10362912243} = {901F162F-8925-4390-89C5-9EE2C343F744} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {058A0C5E-2216-4306-8AFB-0AE28320C26A} diff --git a/build.fsx b/build.fsx index 74300cc3f22..d90c28482c1 100644 --- a/build.fsx +++ b/build.fsx @@ -278,6 +278,7 @@ let dotnetAssemblyInfos = "Fake.DotNet.Testing.MSTest", "Running mstest test runner" "Fake.DotNet.Xamarin", "Running Xamarin builds" "Fake.JavaScript.Npm", "Running npm commands" + "Fake.JavaScript.Yarn", "Running Yarn commands" "Fake.IO.FileSystem", "Core Filesystem utilities and globbing support" "Fake.IO.Zip", "Core Zip functionality" "Fake.Net.Http", "HTTP Client" diff --git a/src/app/Fake.JavaScript.Yarn/AssemblyInfo.fs b/src/app/Fake.JavaScript.Yarn/AssemblyInfo.fs new file mode 100644 index 00000000000..9b1d9a32028 --- /dev/null +++ b/src/app/Fake.JavaScript.Yarn/AssemblyInfo.fs @@ -0,0 +1,17 @@ +// Auto-Generated by FAKE; do not edit +namespace System +open System.Reflection + +[] +[] +[] +[] +[] +do () + +module internal AssemblyVersionInformation = + let [] AssemblyTitle = "FAKE - F# Make Running Yarn commands" + let [] AssemblyProduct = "FAKE - F# Make" + let [] AssemblyVersion = "5.0.0" + let [] AssemblyInformationalVersion = "5.0.0-rc004" + let [] AssemblyFileVersion = "5.0.0" diff --git a/src/app/Fake.JavaScript.Yarn/Fake.JavaScript.Yarn.fsproj b/src/app/Fake.JavaScript.Yarn/Fake.JavaScript.Yarn.fsproj new file mode 100644 index 00000000000..4aa9a0dd30b --- /dev/null +++ b/src/app/Fake.JavaScript.Yarn/Fake.JavaScript.Yarn.fsproj @@ -0,0 +1,17 @@ + + + netstandard1.6;netstandard2.0 + Fake.JavaScript.Yarn + Library + + + + + + + + + + + + \ No newline at end of file diff --git a/src/app/Fake.JavaScript.Yarn/Yarn.fs b/src/app/Fake.JavaScript.Yarn/Yarn.fs new file mode 100644 index 00000000000..357bce84eb3 --- /dev/null +++ b/src/app/Fake.JavaScript.Yarn/Yarn.fs @@ -0,0 +1,170 @@ +namespace Fake.JavaScript + +open Fake.Core +open Fake.IO +open System +open System.IO + +[] +module Yarn = + + /// Default paths to Yarn + let private yarnFileName = + Process.tryFindFileOnPath "yarn" + |> function + | Some yarn when File.Exists yarn -> yarn + | _ -> + match Environment.isWindows with + | true -> "./packages/Yarnpkg.js/tools/yarn.cmd" + | _ -> "/usr/bin/yarn" + + /// Arguments for the Yarn install command + type InstallArgs = + | Standard + | Flat + | Force + | Har + | NoLockFile + | Production + | PureLockFile + + /// The list of supported Yarn commands. The `Custom` alternative + /// can be used for other commands not in the list until they are + /// implemented + type YarnCommand = + | Install of InstallArgs + | Custom of string + + /// The Yarn parameter type + type YarnParams = + { Src: string + YarnFilePath: string + WorkingDirectory: string + Timeout: TimeSpan } + + /// Yarn default parameters + let defaultYarnParams = + { Src = "" + YarnFilePath = yarnFileName + WorkingDirectory = "." + Timeout = TimeSpan.MaxValue } + + let private parseInstallArgs = function + | Standard -> "" + | Flat -> " --flat" + | Force -> " --force" + | Har -> " --har" + | NoLockFile -> " --no-lockfile" + | Production -> " --production" + | PureLockFile -> " --pure-lockfile" + + let private parse = function + | Install installArgs -> sprintf "install%s" (installArgs |> parseInstallArgs) + | Custom str -> str + + let private run yarnParams command = + let yarnPath = Path.GetFullPath(yarnParams.YarnFilePath) + let arguments = command |> parse + let exitCode = + Process.execSimple (fun info -> + { info with + FileName = yarnPath + WorkingDirectory = yarnParams.WorkingDirectory + Arguments = arguments + } + ) yarnParams.Timeout + + if exitCode <> 0 then failwith (sprintf "'yarn %s' task failed" arguments) + + let private yarn setParams = defaultYarnParams |> setParams |> run + + + /// Run `yarn install` + /// ## Parameters + /// - 'setParams' - set command parameters + /// ## Sample + /// + /// Yarn.install (fun o -> + /// { o with + /// WorkingDirectory = "./src/FAKESimple.Web/" + /// }) + let install setParams = yarn setParams <| Install Standard + + /// Run `yarn install --production` + /// ## Parameters + /// - 'setParams' - set command parameters + /// ## Sample + /// + /// Yarn.installProduction (fun o -> + /// { o with + /// WorkingDirectory = "./src/FAKESimple.Web/" + /// }) + + let installProduction setParams = yarn setParams <| Install Production + + /// Run `yarn install --force` + /// ## Parameters + /// - 'setParams' - set command parameters + /// ## Sample + /// + /// Yarn.installForced (fun o -> + /// { o with + /// WorkingDirectory = "./src/FAKESimple.Web/" + /// }) + let installForced setParams = yarn setParams <| Install Force + + /// Run `yarn install --flat` + /// ## Parameters + /// - 'setParams' - set command parameters + /// ## Sample + /// + /// Yarn.installFlat (fun o -> + /// { o with + /// WorkingDirectory = "./src/FAKESimple.Web/" + /// }) + let installFlat setParams = yarn setParams <| Install Flat + + + /// Run `yarn install --har` + /// ## Parameters + /// - 'setParams' - set command parameters + /// ## Sample + /// + /// Yarn.installHar (fun o -> + /// { o with + /// WorkingDirectory = "./src/FAKESimple.Web/" + /// }) + let installHar setParams = yarn setParams <| Install Har + + /// Run `yarn install --no-lockfile` + /// ## Parameters + /// - 'setParams' - set command parameters + /// ## Sample + /// + /// Yarn.installNoLock (fun o -> + /// { o with + /// WorkingDirectory = "./src/FAKESimple.Web/" + /// }) + let installNoLock setParams = yarn setParams <| Install NoLockFile + + /// Run `yarn install --pure-lockfile` + /// ## Parameters + /// - 'setParams' - set command parameters + /// ## Sample + /// + /// Yarn.installPureLock (fun o -> + /// { o with + /// WorkingDirectory = "./src/FAKESimple.Web/" + /// }) + let installPureLock setParams = yarn setParams <| Install PureLockFile + + /// Run `yarn ` + /// ## Parameters + /// - 'setParams' - set command parameters + /// ## Sample + /// + /// Yarn.exec "someCommand" (fun o -> + /// { o with + /// WorkingDirectory = "./src/FAKESimple.Web/" + /// }) + let exec command setParams = yarn setParams <| Custom command \ No newline at end of file diff --git a/src/app/Fake.JavaScript.Yarn/paket.references b/src/app/Fake.JavaScript.Yarn/paket.references new file mode 100644 index 00000000000..2c8a7ddfd73 --- /dev/null +++ b/src/app/Fake.JavaScript.Yarn/paket.references @@ -0,0 +1,4 @@ +group netcore + +FSharp.Core +NETStandard.Library \ No newline at end of file diff --git a/src/legacy/FakeLib/FakeLib.fsproj b/src/legacy/FakeLib/FakeLib.fsproj index 65ca3774257..f4e1e8d8a45 100644 --- a/src/legacy/FakeLib/FakeLib.fsproj +++ b/src/legacy/FakeLib/FakeLib.fsproj @@ -259,6 +259,9 @@ Fake.JavaScript.Npm/Npm.fs + + Fake.JavaScript.Yarn/Yarn.fs + Fake.Tools.Git/CommandHelper.fs diff --git a/src/legacy/FakeLib/YarnHelper.fs b/src/legacy/FakeLib/YarnHelper.fs index a67ad4dcdbc..b2f513fbd37 100644 --- a/src/legacy/FakeLib/YarnHelper.fs +++ b/src/legacy/FakeLib/YarnHelper.fs @@ -1,4 +1,5 @@ /// Contains function to run yarn tasks +[] module Fake.YarnHelper open Fake open System @@ -29,6 +30,7 @@ let private yarnFileName = proc.StandardOutput.ReadLine() | _ -> "/usr/bin/yarn" +[] /// Arguments for the Yarn install command type InstallArgs = | Standard @@ -42,6 +44,7 @@ type InstallArgs = /// The list of supported Yarn commands. The `Custom` alternative /// can be used for other commands not in the list until they are /// implemented +[] type YarnCommand = | Install of InstallArgs | Add of string @@ -49,6 +52,7 @@ type YarnCommand = /// The Yarn parameter type [] +[] type YarnParams = { Src: string YarnFilePath: string @@ -57,6 +61,7 @@ type YarnParams = Timeout: TimeSpan } /// Yarn default parameters +[] let defaultYarnParams = { Src = "" YarnFilePath = yarnFileName @@ -78,6 +83,8 @@ let private parse = function | Add str -> sprintf "add %s" str | Custom str -> str + +[] let run yarnParams = let yarnPath = Path.GetFullPath(yarnParams.YarnFilePath) let arguments = yarnParams.Command |> parse @@ -111,5 +118,7 @@ let run yarnParams = /// WorkingDirectory = "./src/FAKESimple.Web/" /// }) /// ) + +[] let Yarn setParams = defaultYarnParams |> setParams |> run