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")