diff --git a/.paket/Paket.Restore.targets b/.paket/Paket.Restore.targets index 0f4f033a..74c39cc9 100644 --- a/.paket/Paket.Restore.targets +++ b/.paket/Paket.Restore.targets @@ -11,20 +11,26 @@ $(MSBuildThisFileDirectory)..\ $(PaketRootPath)paket-files\paket.restore.cached $(PaketRootPath)paket.lock + classic + proj + assembly + native /Library/Frameworks/Mono.framework/Commands/mono mono + $(PaketToolsPath)paket $(PaketRootPath)paket.exe - $(PaketToolsPath)paket.exe - "$(PaketExePath)" - $(MonoPath) --runtime=v4.0.30319 "$(PaketExePath)" - - <_PaketExeExtension>$([System.IO.Path]::GetExtension("$(PaketExePath)")) - dotnet "$(PaketExePath)" + $(PaketToolsPath)paket.exe + $(PaketToolsPath)paket.exe + $(PaketToolsPath)paket - - "$(PaketExePath)" + + <_PaketExeExtension>$([System.IO.Path]::GetExtension("$(PaketExePath)")) + dotnet "$(PaketExePath)" + "$(PaketExePath)" + $(MonoPath) --runtime=v4.0.30319 "$(PaketExePath)" + "$(PaketExePath)" $(PaketRootPath)paket.bootstrapper.exe $(PaketToolsPath)paket.bootstrapper.exe @@ -38,7 +44,11 @@ true - + + + + + @@ -77,7 +87,7 @@ - + @@ -141,14 +151,17 @@ + $([System.String]::Copy('%(PaketReferencesFileLines.Identity)').Split(',').Length) $([System.String]::Copy('%(PaketReferencesFileLines.Identity)').Split(',')[0]) $([System.String]::Copy('%(PaketReferencesFileLines.Identity)').Split(',')[1]) $([System.String]::Copy('%(PaketReferencesFileLines.Identity)').Split(',')[4]) + $([System.String]::Copy('%(PaketReferencesFileLines.Identity)').Split(',')[5]) %(PaketReferencesFileLinesInfo.PackageVersion) All - runtime + runtime + runtime true @@ -181,19 +194,27 @@ false + $(MSBuildVersion) + 15.8.0 <_NuspecFilesNewLocation Include="$(BaseIntermediateOutputPath)$(Configuration)\*.nuspec"/> + + $(MSBuildProjectDirectory)/$(MSBuildProjectFile) true - false - true + false + true + false + true + false + true $(BaseIntermediateOutputPath)$(Configuration) $(BaseIntermediateOutputPath) @@ -208,9 +229,52 @@ - - + + - Proc.run |> ignore +//#if (deploy == "gcp-kubernetes") +let runToolWithOutput cmd args workingDir = + let arguments = args |> String.split ' ' |> Arguments.OfArgs + let result = + Command.RawCommand (cmd, arguments) + |> CreateProcess.fromCommand + |> CreateProcess.withWorkingDirectory workingDir + |> CreateProcess.ensureExitCode + |> CreateProcess.redirectOutput + |> Proc.run + result.Result.Output |> (fun s -> s.TrimEnd()) + +let getGcloudProject() = + runToolWithOutput "gcloud" "config get-value project -q" "." + +let getDockerTag() = "v1" + +let createDockerImageName projectName = + let dockerTag = getDockerTag() + let projectId = getGcloudProject() + sprintf "gcr.io/%s/%s:%s" projectId projectName dockerTag + +let deployExists appName = + let result = runToolWithOutput "kubectl" "get deploy" "." + let pattern = "^" + appName + "\s+" + Regex.IsMatch(result, pattern, RegexOptions.Multiline) + +let updateKubernetesDeploy appName dockerTag = + let updateArgs = sprintf "set image deployment/%s %s=%s" appName appName dockerTag + runTool "kubectl" updateArgs "." + +let createAndExposeKubernetesDeploy appName dockerTag port = + let deployArgs = sprintf "run %s --image=%s --port %i" appName dockerTag port + runTool "kubectl" deployArgs "." + + let exposeArgs = sprintf "expose deployment %s --type=LoadBalancer --port 80 --target-port %i" appName port + runTool "kubectl" exposeArgs "." +//#endif + Target.create "Clean" (fun _ -> [ deployDir clientDeployPath ] @@ -126,7 +168,11 @@ Target.create "Run" (fun _ -> |> ignore ) -//#if (deploy == "docker" || deploy == "gcp-appengine") +//#if (deploy == "docker" || deploy == "gcp-kubernetes" || deploy == "gcp-appengine") +let buildDocker tag = + let args = sprintf "build -t %s ." tag + runTool "docker" args "." + Target.create "Bundle" (fun _ -> let serverDir = Path.combine deployDir "Server" let clientDir = Path.combine deployDir "Client" @@ -140,17 +186,46 @@ Target.create "Bundle" (fun _ -> let dockerUser = "safe-template" let dockerImageName = "safe-template" +//#endif +//#if (deploy == "docker" || deploy == "gcp-appengine") let dockerFullName = sprintf "%s/%s" dockerUser dockerImageName Target.create "Docker" (fun _ -> - let buildArgs = sprintf "build -t %s ." dockerFullName - runTool "docker" buildArgs "." + buildDocker dockerFullName +) - let tagArgs = sprintf "tag %s %s" dockerFullName dockerFullName - runTool "docker" tagArgs "." +//#endif +//#if (deploy == "gcp-kubernetes") +Target.create "Docker" (fun _ -> + let imageName = createDockerImageName dockerImageName + buildDocker imageName ) +Target.create "Publish" (fun _ -> + let imageName = createDockerImageName dockerImageName + let pushArgs = sprintf "push %s" imageName + runTool "docker" pushArgs "." +) + +Target.create "ClusterAuth" (fun _ -> + let clusterName = Environment.environVarOrDefault "SAFE_CLUSTER" "safe-cluster" + let authArgs = sprintf "container clusters get-credentials %s" clusterName + runTool "gcloud" authArgs "." +) + +Target.create "Deploy" (fun _ -> + let imageName = createDockerImageName dockerImageName + let appName = dockerImageName + let port = 8085 + if deployExists appName + then + updateKubernetesDeploy appName imageName + else + createAndExposeKubernetesDeploy appName imageName port +) //#endif + + //#if (deploy == "azure") Target.create "Bundle" (fun _ -> let serverDir = deployDir @@ -247,6 +322,12 @@ open Fake.Core.TargetOperators ==> "Bundle" ==> "ArmTemplate" ==> "AppService" +//#elseif (deploy == "gcp-kubernetes") + ==> "Bundle" + ==> "Docker" + ==> "Publish" + ==> "ClusterAuth" + ==> "Deploy" //#endif //#if (deploy == "gcp-appengine") diff --git a/Content/paket.dependencies b/Content/paket.dependencies index ebbd58bf..2a1f4b2f 100644 --- a/Content/paket.dependencies +++ b/Content/paket.dependencies @@ -16,7 +16,7 @@ group Server //#if (!remoting && server != "suave") nuget Thoth.Json.Giraffe //#elseif (!remoting && server == "suave") - nuget Thoth.Json.Net + nuget Thoth.Json.Net //#elseif (remoting && server == "suave") nuget Fable.Remoting.Suave //#elseif (remoting && server != "suave")