Browse Source

Build: define solutions

spatial
Christoph Ruegg 8 years ago
parent
commit
5a7fb139eb
  1. 192
      build.fsx
  2. 134
      build/build-framework.fsx

192
build.fsx

@ -44,44 +44,32 @@ traceHeader releases
// NUMERICS PACKAGES
let numericsZipPackage =
{ Id = "MathNet.Numerics"
Release = numericsRelease
Title = "Math.NET Numerics"
FsLoader = true }
let numericsZipPackage = zipPackage "MathNet.Numerics" "Math.NET Numerics" numericsRelease true
let numericsStrongNameZipPackage = zipPackage "MathNet.Numerics.Signed" "Math.NET Numerics" numericsRelease true
let numericsStrongNameZipPackage =
{ numericsZipPackage with
Id = "MathNet.Numerics.Signed" }
let numericsNuGetPackage = nugetPackage "MathNet.Numerics" numericsRelease
let numericsFSharpNuGetPackage = nugetPackage "MathNet.Numerics.FSharp" numericsRelease
let numericsStrongNameNuGetPackage = nugetPackage "MathNet.Numerics.Signed" numericsRelease
let numericsFSharpStrongNameNuGetPackage = nugetPackage "MathNet.Numerics.FSharp.Signed" numericsRelease
let numericsNuGetPackage = { Id = "MathNet.Numerics"; Release = numericsRelease }
let numericsFSharpNuGetPackage = { Id = "MathNet.Numerics.FSharp"; Release = numericsRelease }
let numericsStrongNameNuGetPackage = { Id = "MathNet.Numerics.Signed"; Release = numericsRelease }
let numericsFSharpStrongNameNuGetPackage = { Id = "MathNet.Numerics.FSharp.Signed"; Release = numericsRelease }
let numericsProject = { AssemblyName = "MathNet.Numerics"; ProjectFile = "src/Numerics/Numerics.csproj"; OutputDir = "src/Numerics/bin/Release" }
let fsharpProject = { AssemblyName = "MathNet.Numerics.FSharp"; ProjectFile = "src/FSharp/FSharp.fsproj"; OutputDir = "src/FSharp/bin/Release" }
let numericsProject = project "MathNet.Numerics" "src/Numerics/Numerics.csproj" [numericsNuGetPackage; numericsStrongNameNuGetPackage]
let numericsFsharpProject = project "MathNet.Numerics.FSharp" "src/FSharp/FSharp.fsproj" [numericsFSharpNuGetPackage; numericsFSharpStrongNameNuGetPackage]
let numericsSolution = solution "Numerics" "MathNet.Numerics.sln" [numericsProject; numericsFsharpProject]
// DATA EXTENSION PACKAGES
let dataZipPackage =
{ Id = "MathNet.Numerics.Data"
Release = dataRelease
Title = "Math.NET Numerics Data Extensions"
FsLoader = false }
let dataStrongNameZipPackage =
{ dataZipPackage with
Id = "MathNet.Numerics.Data.Signed" }
let dataZipPackage = zipPackage "MathNet.Numerics.Data" "Math.NET Numerics Data Extensions" dataRelease false
let dataStrongNameZipPackage = zipPackage "MathNet.Numerics.Data.Signed" "Math.NET Numerics Data Extensions" dataRelease false
let dataTextNuGetPackage = { Id = "MathNet.Numerics.Data.Text"; Release = dataRelease }
let dataMatlabNuGetPackage = { Id = "MathNet.Numerics.Data.Matlab"; Release = dataRelease }
let dataTextStrongNameNuGetPackage = { Id = "MathNet.Numerics.Data.Text.Signed"; Release = dataRelease }
let dataMatlabStrongNameNuGetPackage = { Id = "MathNet.Numerics.Data.Matlab.Signed"; Release = dataRelease }
let dataTextNuGetPackage = nugetPackage "MathNet.Numerics.Data.Text" dataRelease
let dataMatlabNuGetPackage = nugetPackage "MathNet.Numerics.Data.Matlab" dataRelease
let dataTextStrongNameNuGetPackage = nugetPackage "MathNet.Numerics.Data.Text.Signed" dataRelease
let dataMatlabStrongNameNuGetPackage = nugetPackage "MathNet.Numerics.Data.Matlab.Signed" dataRelease
let dataTextProject = { AssemblyName = "MathNet.Numerics.Data.Text"; ProjectFile = "src/Data/Text/Text.csproj"; OutputDir = "src/Data/Text/bin/Release" }
let dataMatlabProject = { AssemblyName = "MathNet.Numerics.Data.Matlab"; ProjectFile = "src/Data/Matlab/Matlab.csproj"; OutputDir = "src/Data/Matlab/bin/Release" }
let dataTextProject = project "MathNet.Numerics.Data.Text" "src/Data/Text/Text.csproj" [dataTextNuGetPackage; dataTextStrongNameNuGetPackage]
let dataMatlabProject = project "MathNet.Numerics.Data.Matlab" "src/Data/Matlab/Matlab.csproj" [dataMatlabNuGetPackage; dataMatlabStrongNameNuGetPackage]
let dataSolution = solution "Data" "MathNet.Numerics.Data.sln" [dataTextProject; dataMatlabProject]
// MKL NATIVE PROVIDER PACKAGES
@ -168,25 +156,15 @@ let mklLinuxBundle =
Title = "Math.NET Numerics MKL Native Provider for Linux"
Packages = [ mklLinuxPack; mklLinux32Pack; mklLinux64Pack ] }
let mklWinZipPackage =
{ Id = "MathNet.Numerics.MKL.Win"
Release = mklRelease
Title = "Math.NET Numerics MKL Native Provider for Windows"
FsLoader = false }
let mklLinuxZipPackage =
{ Id = "MathNet.Numerics.MKL.Linux"
Release = mklRelease
Title = "Math.NET Numerics MKL Native Provider for Linux"
FsLoader = false }
let mklWinZipPackage = zipPackage "MathNet.Numerics.MKL.Win" "Math.NET Numerics MKL Native Provider for Windows" mklRelease false
let mklLinuxZipPackage = zipPackage "MathNet.Numerics.MKL.Linux" "Math.NET Numerics MKL Native Provider for Linux" mklRelease false
let mklWinNuGetPackage = { Id = "MathNet.Numerics.MKL.Win"; Release = mklRelease }
let mklWin32NuGetPackage = { Id = "MathNet.Numerics.MKL.Win-x86"; Release = mklRelease }
let mklWin64NuGetPackage = { Id = "MathNet.Numerics.MKL.Win-x64"; Release = mklRelease }
let mklLinuxNuGetPackage = { Id = "MathNet.Numerics.MKL.Linux"; Release = mklRelease }
let mklLinux32NuGetPackage = { Id = "MathNet.Numerics.MKL.Linux-x86"; Release = mklRelease }
let mklLinux64NuGetPackage = { Id = "MathNet.Numerics.MKL.Linux-x64"; Release = mklRelease }
let mklWinNuGetPackage = nugetPackage "MathNet.Numerics.MKL.Win" mklRelease
let mklWin32NuGetPackage = nugetPackage "MathNet.Numerics.MKL.Win-x86" mklRelease
let mklWin64NuGetPackage = nugetPackage "MathNet.Numerics.MKL.Win-x64" mklRelease
let mklLinuxNuGetPackage = nugetPackage "MathNet.Numerics.MKL.Linux" mklRelease
let mklLinux32NuGetPackage = nugetPackage "MathNet.Numerics.MKL.Linux-x86" mklRelease
let mklLinux64NuGetPackage = nugetPackage "MathNet.Numerics.MKL.Linux-x64" mklRelease
// CUDA NATIVE PROVIDER PACKAGES
@ -214,13 +192,8 @@ let cudaWinBundle =
Title = "Math.NET Numerics CUDA Native Provider for Windows"
Packages = [ cudaWinPack ] }
let cudaWinZipPackage =
{ Id = "MathNet.Numerics.CUDA.Win"
Release = cudaRelease
Title = "Math.NET Numerics CUDA Native Provider for Windows"
FsLoader = false }
let cudaWinNuGetPackage = { Id = "MathNet.Numerics.CUDA.Win"; Release = cudaRelease }
let cudaWinZipPackage = zipPackage "MathNet.Numerics.CUDA.Win" "Math.NET Numerics CUDA Native Provider for Windows" cudaRelease false
let cudaWinNuGetPackage = nugetPackage "MathNet.Numerics.CUDA.Win" cudaRelease
// OpenBLAS NATIVE PROVIDER PACKAGES
@ -254,13 +227,14 @@ let openBlasWinBundle =
Title = "Math.NET Numerics OpenBLAS Native Provider for Windows"
Packages = [ openBlasWinPack ] }
let openBlasWinZipPackage =
{ Id = "MathNet.Numerics.OpenBLAS.Win"
Release = openBlasRelease
Title = "Math.NET Numerics OpenBLAS Native Provider for Windows"
FsLoader = false }
let openBlasWinZipPackage = zipPackage "MathNet.Numerics.OpenBLAS.Win" "Math.NET Numerics OpenBLAS Native Provider for Windows" openBlasRelease false
let openBlasWinNuGetPackage = nugetPackage "MathNet.Numerics.OpenBLAS.Win" openBlasRelease
// ALL
let openBlasWinNuGetPackage = { Id = "MathNet.Numerics.OpenBLAS.Win"; Release = openBlasRelease }
let allSolutions = [numericsSolution; dataSolution]
let allProjects = allSolutions |> List.collect (fun s -> s.Projects) |> List.distinct
// --------------------------------------------------------------------------------------
@ -271,29 +245,23 @@ Target "Start" DoNothing
Target "Clean" (fun _ ->
DeleteDirs (!! "src/**/obj/" ++ "src/**/bin/" )
CleanDirs [ "out/api"; "out/docs"; "out/Numerics/packages/Zip"; "out/Numerics/packages/NuGet"; "out/Numerics/lib"; "out/Numerics/lib-strongname" ]
CleanDirs [ "out/Data"; "out/Data/packages/Zip"; "out/Data/packages/NuGet"; "out/Data/lib"; "out/Data/lib-strongname" ] // Data Extensions
CleanDirs [ "out/api"; "out/docs" ]
CleanDirs [ "out/MKL"; "out/ATLAS"; "out/CUDA"; "out/OpenBLAS" ] // Native Providers
clean "MathNet.Numerics.sln"
clean "MathNet.Numerics.Data.sln")
allSolutions |> List.iter (fun solution -> CleanDirs [ solution.OutputZipDir; solution.OutputNuGetDir; solution.OutputLibDir; solution.OutputLibStrongNameDir ])
allSolutions |> List.iter clean)
Target "ApplyVersion" (fun _ ->
allProjects |> List.iter patchVersionInProjectFile
patchVersionInAssemblyInfo "src/FSharp" numericsRelease
patchVersionInAssemblyInfo "src/TestData" numericsRelease
patchVersionInAssemblyInfo "src/Numerics.Tests" numericsRelease
patchVersionInAssemblyInfo "src/FSharp.Tests" numericsRelease
patchVersionInAssemblyInfo "src/Data.Tests" dataRelease
patchVersionInProjectFile "src/Numerics/Numerics.csproj" numericsRelease
patchVersionInProjectFile "src/FSharp/FSharp.fsproj" numericsRelease
patchVersionInProjectFile "src/Data/Text/Text.csproj" dataRelease
patchVersionInProjectFile "src/Data/Matlab/Matlab.csproj" dataRelease
patchVersionInResource "src/NativeProviders/MKL/resource.rc" mklRelease
patchVersionInResource "src/NativeProviders/CUDA/resource.rc" cudaRelease
patchVersionInResource "src/NativeProviders/OpenBLAS/resource.rc" openBlasRelease)
Target "Restore" (fun _ ->
restore "MathNet.Numerics.sln"
restore "MathNet.Numerics.Data.sln")
Target "Restore" (fun _ -> allSolutions |> List.iter restore)
"Start"
=?> ("Clean", not (hasBuildParam "incremental"))
==> "Restore"
@ -317,33 +285,27 @@ Target "Build" (fun _ ->
// Strong Name Build (with strong name, without certificate signature)
if hasBuildParam "strongname" then
CleanDirs (!! "src/**/obj/" ++ "src/**/bin/" )
restoreSN "MathNet.Numerics.sln"
buildSN "MathNet.Numerics.sln"
collectBinaries numericsProject "out/Numerics/lib-strongname"
collectBinaries fsharpProject "out/Numerics/lib-strongname"
zip numericsStrongNameZipPackage "out/Numerics/packages/Zip" "out/Numerics/lib-strongname" (fun f -> f.Contains("MathNet.Numerics.") || f.Contains("System.Threading.") || f.Contains("FSharp.Core."))
restoreSN numericsSolution
buildSN numericsSolution
collectBinariesSN numericsSolution
zip numericsStrongNameZipPackage numericsSolution.OutputZipDir numericsSolution.OutputLibStrongNameDir (fun f -> f.Contains("MathNet.Numerics.") || f.Contains("System.Threading.") || f.Contains("FSharp.Core."))
if isWindows then
packSN "MathNet.Numerics.sln"
collectNuGetPackages numericsProject "out/Numerics/packages/NuGet"
collectNuGetPackages fsharpProject "out/Numerics/packages/NuGet"
packSN numericsSolution.SolutionFile
collectNuGetPackages numericsSolution
// Normal Build (without strong name, with certificate signature)
CleanDirs (!! "src/**/obj/" ++ "src/**/bin/" )
restore "MathNet.Numerics.sln"
build "MathNet.Numerics.sln"
if isWindows && hasBuildParam "sign" then
sign fingerprint timeserver (!! (numericsProject.OutputDir + "**/MathNet.Numerics.dll") ++ (fsharpProject.OutputDir + "**/MathNet.Numerics.FSharp.dll") )
collectBinaries numericsProject "out/Numerics/lib"
collectBinaries fsharpProject "out/Numerics/lib"
zip numericsZipPackage "out/Numerics/packages/Zip" "out/Numerics/lib" (fun f -> f.Contains("MathNet.Numerics.") || f.Contains("System.Threading.") || f.Contains("FSharp.Core."))
restore numericsSolution
build numericsSolution
if isWindows && hasBuildParam "sign" then sign fingerprint timeserver numericsSolution
collectBinaries numericsSolution
zip numericsZipPackage numericsSolution.OutputZipDir numericsSolution.OutputLibDir (fun f -> f.Contains("MathNet.Numerics.") || f.Contains("System.Threading.") || f.Contains("FSharp.Core."))
if isWindows then
pack "MathNet.Numerics.sln"
collectNuGetPackages numericsProject "out/Numerics/packages/NuGet"
collectNuGetPackages fsharpProject "out/Numerics/packages/NuGet"
pack numericsSolution.SolutionFile
collectNuGetPackages numericsSolution
// NuGet Sign (all or nothing)
if isWindows && hasBuildParam "sign" then
Seq.iter (signNuGet fingerprint timeserver) !! "out/Numerics/packages/NuGet/*.nupkg"
if isWindows && hasBuildParam "sign" then signNuGet fingerprint timeserver numericsSolution
)
"Prepare" ==> "Build"
@ -353,35 +315,29 @@ Target "DataBuild" (fun _ ->
// Strong Name Build (with strong name, without certificate signature)
if hasBuildParam "strongname" then
CleanDirs (!! "src/**/obj/" ++ "src/**/bin/" )
restoreSN "MathNet.Numerics.Data.sln"
buildSN "MathNet.Numerics.Data.sln"
collectBinaries dataTextProject "out/Data/lib-strongname"
collectBinaries dataMatlabProject "out/Data/lib-strongname"
zip dataStrongNameZipPackage "out/Data/packages/Zip" "out/Data/lib-strongname" (fun f -> f.Contains("MathNet.Numerics.Data."))
restoreSN dataSolution
buildSN dataSolution
collectBinariesSN dataSolution
zip dataStrongNameZipPackage dataSolution.OutputZipDir dataSolution.OutputLibStrongNameDir (fun f -> f.Contains("MathNet.Numerics.Data."))
if isWindows then
packSN dataTextProject.ProjectFile
packSN dataMatlabProject.ProjectFile
collectNuGetPackages dataTextProject "out/Data/packages/NuGet"
collectNuGetPackages dataMatlabProject "out/Data/packages/NuGet"
collectNuGetPackages dataSolution
// Normal Build (without strong name, with certificate signature)
CleanDirs (!! "src/**/obj/" ++ "src/**/bin/" )
restore "MathNet.Numerics.Data.sln"
build "MathNet.Numerics.Data.sln"
if isWindows && hasBuildParam "sign" then
sign fingerprint timeserver (!! (dataTextProject.OutputDir + "**/MathNet.Numerics.Data.Text.dll") ++ (dataMatlabProject.OutputDir + "**/MathNet.Numerics.Data.Matlab.dll") )
collectBinaries dataTextProject "out/Data/lib"
collectBinaries dataMatlabProject "out/Data/lib"
zip dataZipPackage "out/Data/packages/Zip" "out/Data/lib" (fun f -> f.Contains("MathNet.Numerics.Data."))
restore dataSolution
build dataSolution
if isWindows && hasBuildParam "sign" then sign fingerprint timeserver dataSolution
collectBinaries dataSolution
zip dataZipPackage dataSolution.OutputZipDir dataSolution.OutputLibDir (fun f -> f.Contains("MathNet.Numerics.Data."))
if isWindows then
pack dataTextProject.ProjectFile
pack dataMatlabProject.ProjectFile
collectNuGetPackages dataTextProject "out/Data/packages/NuGet"
collectNuGetPackages dataMatlabProject "out/Data/packages/NuGet"
collectNuGetPackages dataSolution
// NuGet Sign (all or nothing)
if isWindows && hasBuildParam "sign" then
Seq.iter (signNuGet fingerprint timeserver) !! "out/Data/packages/NuGet/*.nupkg"
if isWindows && hasBuildParam "sign" then signNuGet fingerprint timeserver dataSolution
)
"Prepare" ==> "DataBuild"
@ -472,8 +428,6 @@ Target "DataTestNET45" (fun _ -> testData "net45")
// PACKAGES
// --------------------------------------------------------------------------------------
Target "Pack" DoNothing
Target "DataPack" DoNothing
Target "MklWinPack" DoNothing
Target "MklLinuxPack" DoNothing
Target "CudaWinPack" DoNothing
@ -598,17 +552,17 @@ Target "PublishMirrors" (fun _ -> publishMirrors ())
Target "PublishDocs" (fun _ -> publishDocs numericsRelease)
Target "PublishApi" (fun _ -> publishApi numericsRelease)
Target "PublishArchive" (fun _ -> publishArchive "out/Numerics/packages/Zip" "out/Numerics/packages/NuGet" [numericsZipPackage; numericsStrongNameZipPackage] [numericsNuGetPackage; numericsFSharpNuGetPackage; numericsStrongNameNuGetPackage; numericsFSharpStrongNameNuGetPackage])
Target "DataPublishArchive" (fun _ -> publishArchive "out/Data/packages/Zip" "out/Data/packages/NuGet" [dataZipPackage; dataStrongNameZipPackage] [dataTextNuGetPackage; dataMatlabNuGetPackage; dataTextStrongNameNuGetPackage; dataMatlabStrongNameNuGetPackage])
Target "PublishArchive" (fun _ -> publishArchive numericsSolution.OutputZipDir numericsSolution.OutputNuGetDir [numericsZipPackage; numericsStrongNameZipPackage] [numericsNuGetPackage; numericsFSharpNuGetPackage; numericsStrongNameNuGetPackage; numericsFSharpStrongNameNuGetPackage])
Target "DataPublishArchive" (fun _ -> publishArchive dataSolution.OutputZipDir dataSolution.OutputNuGetDir [dataZipPackage; dataStrongNameZipPackage] [dataTextNuGetPackage; dataMatlabNuGetPackage; dataTextStrongNameNuGetPackage; dataMatlabStrongNameNuGetPackage])
Target "MklPublishArchive" (fun _ -> publishArchive "out/MKL/packages/Zip" "out/MKL/packages/NuGet" [mklWinZipPackage; mklLinuxZipPackage] [mklWinNuGetPackage; mklWin32NuGetPackage; mklWin64NuGetPackage; mklLinuxNuGetPackage; mklLinux32NuGetPackage; mklLinux64NuGetPackage])
Target "CudaPublishArchive" (fun _ -> publishArchive "out/CUDA/packages/Zip" "out/CUDA/packages/NuGet" [cudaWinZipPackage] [cudaWinNuGetPackage])
Target "OpenBlasPublishArchive" (fun _ -> publishArchive "out/OpenBLAS/packages/Zip" "out/OpenBLAS/packages/NuGet" [openBlasWinZipPackage] [openBlasWinNuGetPackage])
Target "PublishNuGet" (fun _ -> !! "out/Numerics/packages/NuGet/*.nupkg" -- "out/Numerics/packages/NuGet/*.symbols.nupkg" |> publishNuGet)
Target "DataPublishNuGet" (fun _ -> !! "out/Data/packages/NuGet/*.nupkg" |> publishNuGet)
Target "MklPublishNuGet" (fun _ -> !! "out/MKL/packages/NuGet/*.nupkg" |> publishNuGet)
Target "CudaPublishNuGet" (fun _ -> !! "out/CUDA/packages/NuGet/*.nupkg" |> publishNuGet)
Target "OpenBlasPublishNuGet" (fun _ -> !! "out/OpenBLAS/packages/NuGet/*.nupkg" |> publishNuGet)
Target "PublishNuGet" (fun _ -> publishNuGet !! (numericsSolution.OutputNuGetDir </> "/*.nupkg"))
Target "DataPublishNuGet" (fun _ -> publishNuGet !! (dataSolution.OutputNuGetDir </> "/*.nupkg"))
Target "MklPublishNuGet" (fun _ -> publishNuGet !! "out/MKL/packages/NuGet/*.nupkg")
Target "CudaPublishNuGet" (fun _ -> publishNuGet !! "out/CUDA/packages/NuGet/*.nupkg")
Target "OpenBlasPublishNuGet" (fun _ -> publishNuGet !! "out/OpenBLAS/packages/NuGet/*.nupkg")
Target "Publish" DoNothing
Dependencies "Publish" [ "PublishTag"; "PublishDocs"; "PublishApi"; "PublishArchive"; "PublishNuGet" ]

134
build/build-framework.fsx

@ -99,6 +99,34 @@ type Release =
ReleaseNotes: string
ReleaseNotesFile: string }
type ZipPackage =
{ Id: string
Release: Release
Title: string
FsLoader: bool }
type NuGetPackage =
{ Id: string
Release: Release }
type Project =
{ AssemblyName: string
ProjectFile: string
OutputDir: string
Release: Release
NuGetPackages: NuGetPackage list }
type Solution =
{ Key: string
SolutionFile: string
Projects: Project list
Release: Release
OutputDir: string
OutputLibDir: string
OutputLibStrongNameDir: string
OutputZipDir: string
OutputNuGetDir: string }
type Package =
{ Id: string
Release: Release
@ -117,20 +145,6 @@ type Bundle =
Title: string
Packages: Package list }
type ZipPackage =
{ Id: string
Release: Release
Title: string
FsLoader: bool }
type NuGetPackage =
{ Id: string
Release: Release }
type Project =
{ AssemblyName: string
ProjectFile: string
OutputDir: string }
let release title releaseNotesFile : Release =
let info = LoadReleaseNotes releaseNotesFile
@ -138,12 +152,40 @@ let release title releaseNotesFile : Release =
let assemblyVersion = info.AssemblyVersion + "." + buildPart
let packageVersion = info.NugetVersion
let notes = info.Notes |> List.map (fun l -> l.Replace("*","").Replace("`","")) |> toLines
{ Title = title
{ Release.Title = title
AssemblyVersion = assemblyVersion
PackageVersion = packageVersion
ReleaseNotes = notes
ReleaseNotesFile = releaseNotesFile }
let zipPackage packageId title release fsLoader =
{ ZipPackage.Id = packageId
Title = title
Release = release
FsLoader = fsLoader }
let nugetPackage packageId release =
{ NuGetPackage.Id = packageId
Release = release }
let project assemblyName projectFile nuGetPackages =
{ Project.AssemblyName = assemblyName
ProjectFile = projectFile
OutputDir = (Path.GetDirectoryName projectFile) </> "bin" </> "Release"
NuGetPackages = nuGetPackages
Release = nuGetPackages |> List.map (fun p -> p.Release) |> List.distinct |> List.exactlyOne }
let solution key solutionFile projects =
{ Solution.Key = key
SolutionFile = solutionFile
Projects = projects
Release = projects |> List.map (fun p -> p.Release) |> List.distinct |> List.exactlyOne
OutputDir = "out" </> key
OutputLibDir = "out" </> key </> "Lib"
OutputLibStrongNameDir = "out" </> key </> "Lib-StrongName"
OutputZipDir = "out" </> key </> "Zip"
OutputNuGetDir = "out" </> key </> "NuGet" }
let traceHeader (releases:Release list) =
trace header
let titleLength = releases |> List.map (fun r -> r.Title.Length) |> List.max
@ -195,32 +237,32 @@ let patchVersionInResource path (release:Release) =
>> regex_replace @"\d+,\d+,\d+,\d+" (replace "." "," release.AssemblyVersion))
path
let patchVersionInProjectFile path (release:Release) =
let semverSplit = release.PackageVersion.IndexOf('-')
let prefix = if semverSplit <= 0 then release.PackageVersion else release.PackageVersion.Substring(0, semverSplit)
let suffix = if semverSplit <= 0 then "" else release.PackageVersion.Substring(semverSplit+1)
let patchVersionInProjectFile (project:Project) =
let semverSplit = project.Release.PackageVersion.IndexOf('-')
let prefix = if semverSplit <= 0 then project.Release.PackageVersion else project.Release.PackageVersion.Substring(0, semverSplit)
let suffix = if semverSplit <= 0 then "" else project.Release.PackageVersion.Substring(semverSplit+1)
ReplaceInFile
(regex_replace """\<PackageVersion\>.*\</PackageVersion\>""" (sprintf """<PackageVersion>%s</PackageVersion>""" release.PackageVersion)
>> regex_replace """\<Version\>.*\</Version\>""" (sprintf """<Version>%s</Version>""" release.PackageVersion)
>> regex_replace """\<AssemblyVersion\>.*\</AssemblyVersion\>""" (sprintf """<AssemblyVersion>%s</AssemblyVersion>""" release.AssemblyVersion)
>> regex_replace """\<FileVersion\>.*\</FileVersion\>""" (sprintf """<FileVersion>%s</FileVersion>""" release.AssemblyVersion)
(regex_replace """\<PackageVersion\>.*\</PackageVersion\>""" (sprintf """<PackageVersion>%s</PackageVersion>""" project.Release.PackageVersion)
>> regex_replace """\<Version\>.*\</Version\>""" (sprintf """<Version>%s</Version>""" project.Release.PackageVersion)
>> regex_replace """\<AssemblyVersion\>.*\</AssemblyVersion\>""" (sprintf """<AssemblyVersion>%s</AssemblyVersion>""" project.Release.AssemblyVersion)
>> regex_replace """\<FileVersion\>.*\</FileVersion\>""" (sprintf """<FileVersion>%s</FileVersion>""" project.Release.AssemblyVersion)
>> regex_replace """\<VersionPrefix\>.*\</VersionPrefix\>""" (sprintf """<VersionPrefix>%s</VersionPrefix>""" prefix)
>> regex_replace """\<VersionSuffix\>.*\</VersionSuffix\>""" (sprintf """<VersionSuffix>%s</VersionSuffix>""" suffix)
>> regex_replace_singleline """\<PackageReleaseNotes\>.*\</PackageReleaseNotes\>""" (sprintf """<PackageReleaseNotes>%s</PackageReleaseNotes>""" release.ReleaseNotes))
path
>> regex_replace_singleline """\<PackageReleaseNotes\>.*\</PackageReleaseNotes\>""" (sprintf """<PackageReleaseNotes>%s</PackageReleaseNotes>""" project.Release.ReleaseNotes))
project.ProjectFile
// --------------------------------------------------------------------------------------
// BUILD
// --------------------------------------------------------------------------------------
let clean project = msbuild [ "Clean" ] "Release" project
let clean (solution:Solution) = msbuild [ "Clean" ] "Release" solution.SolutionFile
let restore project = msbuild [ "Restore" ] "Release" project
let restoreSN project = msbuildSN [ "Restore" ] "Release" project
let restore (solution:Solution) = msbuild [ "Restore" ] "Release" solution.SolutionFile
let restoreSN (solution:Solution) = msbuildSN [ "Restore" ] "Release" solution.SolutionFile
let build project = msbuild [ (if hasBuildParam "incremental" then "Build" else "Rebuild") ] "Release" project
let buildSN project = msbuildSN [ (if hasBuildParam "incremental" then "Build" else "Rebuild") ] "Release" project
let build (solution:Solution) = msbuild [ (if hasBuildParam "incremental" then "Build" else "Rebuild") ] "Release" solution.SolutionFile
let buildSN (solution:Solution) = msbuildSN [ (if hasBuildParam "incremental" then "Build" else "Rebuild") ] "Release" solution.SolutionFile
let pack project = dotnet rootDir (sprintf "pack %s --configuration Release --no-restore --no-build" project)
let packSN project = dotnetSN rootDir (sprintf "pack %s --configuration Release --no-restore --no-build" project)
@ -236,11 +278,14 @@ let buildConfig64 config subject = MSBuild "" (if hasBuildParam "incremental" th
// COLLECT
// --------------------------------------------------------------------------------------
let collectBinaries (project:Project) targetDir =
CopyDir targetDir project.OutputDir (fun n -> n.Contains(project.AssemblyName + ".dll") || n.Contains(project.AssemblyName + ".pdb") || n.Contains(project.AssemblyName + ".xml"))
let collectBinaries (solution:Solution) =
solution.Projects |> List.iter (fun project -> CopyDir solution.OutputLibDir project.OutputDir (fun n -> n.Contains(project.AssemblyName + ".dll") || n.Contains(project.AssemblyName + ".pdb") || n.Contains(project.AssemblyName + ".xml")))
let collectBinariesSN (solution:Solution) =
solution.Projects |> List.iter (fun project -> CopyDir solution.OutputLibStrongNameDir project.OutputDir (fun n -> n.Contains(project.AssemblyName + ".dll") || n.Contains(project.AssemblyName + ".pdb") || n.Contains(project.AssemblyName + ".xml")))
let collectNuGetPackages (project:Project) targetDir =
CopyDir targetDir project.OutputDir (fun n -> n.EndsWith(".nupkg"))
let collectNuGetPackages (solution:Solution) =
solution.Projects |> List.iter (fun project -> CopyDir solution.OutputNuGetDir project.OutputDir (fun n -> n.EndsWith(".nupkg")))
// --------------------------------------------------------------------------------------
@ -301,7 +346,8 @@ let provideNuGetExtraFiles path (bundle:Bundle) (pack:Package) =
// SIGN
let sign fingerprint timeserver files =
let sign fingerprint timeserver (solution: Solution) =
let files = solution.Projects |> Seq.collect (fun p -> !! (p.OutputDir + "/**/" + p.AssemblyName + ".dll"))
let fileArgs = files |> Seq.map (sprintf "\"%s\"") |> String.concat " "
let optionsArgs = sprintf """/v /fd sha256 /sha1 "%s" /tr "%s" /td sha256""" fingerprint timeserver
let arguments = sprintf """sign %s %s""" optionsArgs fileArgs
@ -312,15 +358,17 @@ let sign fingerprint timeserver files =
if result <> 0 then
failwithf "Error during SignTool call "
let signNuGet fingerprint timeserver file =
let signNuGet fingerprint timeserver (solution: Solution) =
CleanDir "obj/NuGet"
let args = sprintf """sign "%s" -HashAlgorithm SHA256 -TimestampHashAlgorithm SHA256 -CertificateFingerprint "%s" -Timestamper "%s""" (FullName file) fingerprint timeserver
let result =
ExecProcess (fun info ->
info.FileName <- "packages/build/NuGet.CommandLine/tools/NuGet.exe"
info.WorkingDirectory <- FullName "obj/NuGet"
info.Arguments <- args) (TimeSpan.FromMinutes 10.)
if result <> 0 then failwith "Error during NuGet sign."
!! (solution.OutputNuGetDir </> "*.nupkg")
|> Seq.iter (fun file ->
let args = sprintf """sign "%s" -HashAlgorithm SHA256 -TimestampHashAlgorithm SHA256 -CertificateFingerprint "%s" -Timestamper "%s""" (FullName file) fingerprint timeserver
let result =
ExecProcess (fun info ->
info.FileName <- "packages/build/NuGet.CommandLine/tools/NuGet.exe"
info.WorkingDirectory <- FullName "obj/NuGet"
info.Arguments <- args) (TimeSpan.FromMinutes 10.)
if result <> 0 then failwith "Error during NuGet sign.")
DeleteDir "obj/NuGet"

Loading…
Cancel
Save