- Adjust release packaging (#20) - Fix default theme for beta-5 changes (#24) - Remove RethinkDB case fix (cleanup from #21) - Bump versions for next release
146 lines
3.8 KiB
Plaintext
146 lines
3.8 KiB
Plaintext
#r "paket:
|
|
nuget Fake.DotNet.Cli
|
|
nuget Fake.IO.FileSystem
|
|
nuget Fake.IO.Zip
|
|
nuget Fake.Core.Target //"
|
|
#load ".fake/build.fsx/intellisense.fsx"
|
|
open System.IO
|
|
open Fake.Core
|
|
open Fake.DotNet
|
|
open Fake.IO
|
|
open Fake.IO.Globbing.Operators
|
|
open Fake.Core.TargetOperators
|
|
|
|
Target.initEnvironment ()
|
|
|
|
/// The output directory for release ZIPs
|
|
let releasePath = "releases"
|
|
|
|
/// The path to the main project
|
|
let projectPath = "src/MyWebLog"
|
|
|
|
/// The path and name of the main project
|
|
let projName = $"{projectPath}/MyWebLog.fsproj"
|
|
|
|
/// The version being packaged (extracted from appsettings.json)
|
|
let version =
|
|
let settings = File.ReadAllText $"{projectPath}/appsettings.json"
|
|
let generator = settings.Substring (settings.IndexOf "\"Generator\":")
|
|
let appVersion = generator.Replace("\"Generator\": \"", "")
|
|
let appVersion = appVersion.Substring (0, appVersion.IndexOf "\"")
|
|
appVersion.Split ' ' |> Array.last
|
|
|
|
/// Zip a theme distributed with myWebLog
|
|
let zipTheme (name : string) (_ : TargetParameter) =
|
|
let path = $"src/{name}-theme"
|
|
!! $"{path}/**/*"
|
|
|> Zip.filesAsSpecs path //$"src/{name}-theme"
|
|
|> Seq.filter (fun (_, name) -> not (name.EndsWith ".zip"))
|
|
|> Zip.zipSpec $"{releasePath}/{name}-theme.zip"
|
|
|
|
/// Publish the project for the given runtime ID
|
|
let publishFor rid (_ : TargetParameter) =
|
|
DotNet.publish (fun opts -> { opts with Runtime = Some rid; SelfContained = Some false; NoLogo = true }) projName
|
|
|
|
/// Package published output for the given runtime ID
|
|
let packageFor (rid : string) (_ : TargetParameter) =
|
|
let path = $"{projectPath}/bin/Release/net6.0/{rid}/publish"
|
|
let prodSettings = $"{path}/appsettings.Production.json"
|
|
if File.exists prodSettings then File.delete prodSettings
|
|
[ !! $"{path}/**/*"
|
|
|> Zip.filesAsSpecs path
|
|
Seq.singleton ($"{releasePath}/admin-theme.zip", "admin-theme.zip")
|
|
Seq.singleton ($"{releasePath}/default-theme.zip", "default-theme.zip")
|
|
]
|
|
|> Seq.concat
|
|
|> Zip.zipSpec $"{releasePath}/myWebLog-{version}.{rid}.zip"
|
|
|
|
|
|
Target.create "Clean" (fun _ ->
|
|
!! "src/**/bin"
|
|
++ "src/**/obj"
|
|
|> Shell.cleanDirs
|
|
Shell.cleanDir releasePath
|
|
)
|
|
|
|
Target.create "Build" (fun _ ->
|
|
DotNet.build (fun opts -> { opts with NoLogo = true }) projName
|
|
)
|
|
|
|
Target.create "ZipAdminTheme" (zipTheme "admin")
|
|
Target.create "ZipDefaultTheme" (zipTheme "default")
|
|
|
|
Target.create "PublishWindows" (publishFor "win-x64")
|
|
Target.create "PackageWindows" (packageFor "win-x64")
|
|
|
|
Target.create "PublishLinux" (publishFor "linux-x64")
|
|
Target.create "PackageLinux" (packageFor "linux-x64")
|
|
|
|
Target.create "RepackageLinux" (fun _ ->
|
|
let workDir = $"{releasePath}/linux"
|
|
let zipArchive = $"{releasePath}/myWebLog-{version}.linux-x64.zip"
|
|
let sh command args =
|
|
CreateProcess.fromRawCommand command args
|
|
|> CreateProcess.redirectOutput
|
|
|> Proc.run
|
|
|> ignore
|
|
Shell.mkdir workDir
|
|
Zip.unzip workDir zipArchive
|
|
Shell.cd workDir
|
|
sh "chmod" [ "+x"; "./MyWebLog" ]
|
|
sh "tar" [ "cfj"; $"../myWebLog-{version}.linux-x64.tar.bz2"; "." ]
|
|
Shell.cd "../.."
|
|
Shell.rm zipArchive
|
|
Shell.rm_rf workDir
|
|
)
|
|
|
|
Target.create "All" ignore
|
|
|
|
Target.create "RemoveThemeArchives" (fun _ ->
|
|
Shell.rm $"{releasePath}/admin-theme.zip"
|
|
Shell.rm $"{releasePath}/default-theme.zip"
|
|
)
|
|
|
|
Target.create "CI" ignore
|
|
|
|
"Clean"
|
|
==> "All"
|
|
|
|
"Clean"
|
|
?=> "Build"
|
|
==> "All"
|
|
|
|
"Clean"
|
|
?=> "ZipDefaultTheme"
|
|
==> "All"
|
|
|
|
"Clean"
|
|
?=> "ZipAdminTheme"
|
|
==> "All"
|
|
|
|
"Build"
|
|
==> "PublishWindows"
|
|
==> "All"
|
|
|
|
"Build"
|
|
==> "PublishLinux"
|
|
==> "All"
|
|
|
|
"PublishWindows"
|
|
==> "PackageWindows"
|
|
==> "All"
|
|
|
|
"PublishLinux"
|
|
==> "PackageLinux"
|
|
==> "All"
|
|
|
|
"PackageLinux"
|
|
==> "RepackageLinux"
|
|
==> "All"
|
|
|
|
"All"
|
|
==> "RemoveThemeArchives"
|
|
==> "CI"
|
|
|
|
Target.runOrDefault "All"
|