Skip to content
This repository has been archived by the owner on Oct 21, 2024. It is now read-only.

Commit

Permalink
Add build project ✨
Browse files Browse the repository at this point in the history
  • Loading branch information
Freymaurer committed Jun 13, 2022
1 parent 9d7e4a1 commit 9132222
Show file tree
Hide file tree
Showing 15 changed files with 587 additions and 161 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -350,3 +350,4 @@ MigrationBackup/
.ionide/
src/_public
.vscode/settings.json
.vscode/
52 changes: 52 additions & 0 deletions Nfdi4Plants.Fornax.sln
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.2.32505.173
MinimumVisualStudioVersion = 10.0.40219.1
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{2B672946-D10B-4804-93DE-B11DE6B85259}"
EndProject
Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "Fornax.Nfdi4Plants", "src\Fornax.Nfdi4Plants\Fornax.Nfdi4Plants.fsproj", "{CFC6EB06-696A-4542-94CF-4D607A2E1225}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tests", "tests", "{569B21DD-E434-48EF-9D28-FC864B6A7EC3}"
EndProject
Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "Fornax.Nfdi4Plants.Tests", "tests\Fornax.Nfdi4Plants.Tests\Fornax.Nfdi4Plants.Tests.fsproj", "{1FA65D34-DF8B-4B24-8A11-084219DDC133}"
EndProject
Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "build", "build\build.fsproj", "{C125CB69-05E3-4D86-B099-55B213B624DB}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{698B3036-4F3E-451C-AEFA-6BE8117B322E}"
ProjectSection(SolutionItems) = preProject
README.md = README.md
RELEASE_NOTES.md = RELEASE_NOTES.md
rollup.config.js = rollup.config.js
EndProjectSection
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{CFC6EB06-696A-4542-94CF-4D607A2E1225}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{CFC6EB06-696A-4542-94CF-4D607A2E1225}.Debug|Any CPU.Build.0 = Debug|Any CPU
{CFC6EB06-696A-4542-94CF-4D607A2E1225}.Release|Any CPU.ActiveCfg = Release|Any CPU
{CFC6EB06-696A-4542-94CF-4D607A2E1225}.Release|Any CPU.Build.0 = Release|Any CPU
{1FA65D34-DF8B-4B24-8A11-084219DDC133}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{1FA65D34-DF8B-4B24-8A11-084219DDC133}.Debug|Any CPU.Build.0 = Debug|Any CPU
{1FA65D34-DF8B-4B24-8A11-084219DDC133}.Release|Any CPU.ActiveCfg = Release|Any CPU
{1FA65D34-DF8B-4B24-8A11-084219DDC133}.Release|Any CPU.Build.0 = Release|Any CPU
{C125CB69-05E3-4D86-B099-55B213B624DB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{C125CB69-05E3-4D86-B099-55B213B624DB}.Debug|Any CPU.Build.0 = Debug|Any CPU
{C125CB69-05E3-4D86-B099-55B213B624DB}.Release|Any CPU.ActiveCfg = Release|Any CPU
{C125CB69-05E3-4D86-B099-55B213B624DB}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
{CFC6EB06-696A-4542-94CF-4D607A2E1225} = {2B672946-D10B-4804-93DE-B11DE6B85259}
{1FA65D34-DF8B-4B24-8A11-084219DDC133} = {569B21DD-E434-48EF-9D28-FC864B6A7EC3}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {9591E7EB-8243-4661-BA6B-3DD822EB60EB}
EndGlobalSection
EndGlobal
3 changes: 3 additions & 0 deletions RELEASE_NOTES.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
### 0.0.0 (Released 2022-6-13)
* Additions:
* Initial set up for RELEASE_Notes.md
4 changes: 4 additions & 0 deletions build.cmd
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
@echo off
cls

dotnet run --project ./build/build.fsproj %*
30 changes: 30 additions & 0 deletions build/BasicTasks.fs
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
module BasicTasks

open BlackFox.Fake
open Fake.IO
open Fake.DotNet
open Fake.IO.Globbing.Operators

open ProjectInfo

let setPrereleaseTag = BuildTask.create "SetPrereleaseTag" [] {
printfn "Please enter pre-release package suffix"
let suffix = System.Console.ReadLine()
prereleaseSuffix <- suffix
prereleaseTag <- (sprintf "%s-%s" release.NugetVersion suffix)
isPrerelease <- true
}

let clean = BuildTask.create "Clean" [] {
!! "src/**/bin"
++ "src/**/obj"
++ "tests/**/bin"
++ "tests/**/obj"
++ "pkg"
|> Shell.cleanDirs
}

let build = BuildTask.create "Build" [clean] {
solutionFile
|> DotNet.build id
}
33 changes: 33 additions & 0 deletions build/Build.fs
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
open BlackFox.Fake
open System.IO
open Fake.Core
open Fake.DotNet
open Fake.IO
open Fake.IO.FileSystemOperators
open Fake.IO.Globbing.Operators
open Fake.Tools

open Helpers

initializeContext()

open BasicTasks
open TestTasks
open PackageTasks
open ReleaseTasks

/// Full release of nuget package for the prerelease version.
let _release =
BuildTask.createEmpty
"ReleaseNoDocs"
[clean; build; runTests; pack; createTag; publishNuget;]

/// Full release of nuget package for the prerelease version.
let _preRelease =
BuildTask.createEmpty
"PreReleaseNoDocs"
[setPrereleaseTag; clean; build; runTests; packPrerelease; createPrereleaseTag; publishNugetPrerelease]

[<EntryPoint>]
let main args =
runOrDefault build args
28 changes: 28 additions & 0 deletions build/Helpers.fs
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
module Helpers

open BlackFox.Fake
open Fake.Core
open Fake.DotNet

let initializeContext () =
let execContext = Context.FakeExecutionContext.Create false "build.fsx" [ ]
Context.setExecutionContext (Context.RuntimeContext.Fake execContext)

/// Executes a dotnet command in the given working directory
let runDotNet cmd workingDir =
let result =
DotNet.exec (DotNet.Options.withWorkingDirectory workingDir) cmd ""
if result.ExitCode <> 0 then failwithf "'dotnet %s' failed in %s" cmd workingDir

let runOrDefault defaultTarget args =
Trace.trace (sprintf "%A" args)
try
match args with
| [| target |] -> Target.runOrDefault target
| arr when args.Length > 1 ->
Target.run 0 (Array.head arr) ( Array.tail arr |> List.ofArray )
| _ -> BuildTask.runOrDefault defaultTarget
0
with e ->
printfn "%A" e
1
18 changes: 18 additions & 0 deletions build/MessagePrompts.fs
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
module MessagePrompts

let prompt (msg:string) =
System.Console.Write(msg)
System.Console.ReadLine().Trim()
|> function | "" -> None | s -> Some s
|> Option.map (fun s -> s.Replace ("\"","\\\""))

let rec promptYesNo msg =
match prompt (sprintf "%s [Yn]: " msg) with
| Some "Y" | Some "y" -> true
| Some "N" | Some "n" -> false
| _ -> System.Console.WriteLine("Sorry, invalid answer"); promptYesNo msg

let releaseMsg = """This will stage all uncommitted changes, push them to the origin and bump the release version to the latest number in the RELEASE_NOTES.md file.
Do you want to continue?"""

let releaseDocsMsg = """This will push the docs to gh-pages. Remember building the docs prior to this. Do you want to continue?"""
57 changes: 57 additions & 0 deletions build/PackageTasks.fs
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
module PackageTasks

open ProjectInfo

open MessagePrompts
open BasicTasks
open TestTasks

open BlackFox.Fake
open Fake.Core
open Fake.IO.Globbing.Operators

let pack = BuildTask.create "Pack" [clean; build; runTests] {
if promptYesNo (sprintf "creating stable package with version %s OK?" stableVersionTag )
then
!! "src/**/*.*proj"
-- "src/bin/*"
|> Seq.iter (Fake.DotNet.DotNet.pack (fun p ->
let msBuildParams =
{p.MSBuildParams with
Properties = ([
"Version",stableVersionTag
"PackageReleaseNotes", (release.Notes |> String.concat "\r\n")
] @ p.MSBuildParams.Properties)
}
{
p with
MSBuildParams = msBuildParams
OutputPath = Some pkgDir
}
))
else failwith "aborted"
}

let packPrerelease = BuildTask.create "PackPrerelease" [setPrereleaseTag; clean; build; runTests] {
if promptYesNo (sprintf "package tag will be %s OK?" prereleaseTag )
then
!! "src/**/*.*proj"
-- "src/bin/*"
|> Seq.iter (Fake.DotNet.DotNet.pack (fun p ->
let msBuildParams =
{p.MSBuildParams with
Properties = ([
"Version", prereleaseTag
"PackageReleaseNotes", (release.Notes |> String.toLines )
] @ p.MSBuildParams.Properties)
}
{
p with
VersionSuffix = Some prereleaseSuffix
OutputPath = Some pkgDir
MSBuildParams = msBuildParams
}
))
else
failwith "aborted"
}
38 changes: 38 additions & 0 deletions build/ProjectInfo.fs
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
module ProjectInfo

open Fake.Core
open Fake.Extensions.Release

Release.exists()

let project = "Nfdi4Plants.Fornax"

let testProjects =
[
// add relative paths (from project root) to your testprojects here
@"tests\Fornax.Nfdi4Plants.Tests\Fornax.Nfdi4Plants.Tests.fsproj"
]

let solutionFile = $"{project}.sln"

let configuration = "Release"

let gitOwner = "Freymaurer"

let gitHome = $"https://github.com/{gitOwner}"

let projectRepo = $"https://github.com/{gitOwner}/{project}"

let pkgDir = "pkg"

let release = ReleaseNotes.load "RELEASE_NOTES.md"

let stableVersion = SemVer.parse release.NugetVersion

let stableVersionTag = (sprintf "%i.%i.%i" stableVersion.Major stableVersion.Minor stableVersion.Patch )

let mutable prereleaseSuffix = ""

let mutable prereleaseTag = ""

let mutable isPrerelease = false
27 changes: 27 additions & 0 deletions build/ReleaseNotesTasks.fs
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
module ReleaseNotesTasks

open Fake.Extensions.Release
open BlackFox.Fake

let createAssemblyVersion = BuildTask.create "createvfs" [] {
AssemblyVersion.create ProjectInfo.project
}

let updateReleaseNotes = BuildTask.createFn "ReleaseNotes" [] (fun config ->
Release.exists()

Release.update(ProjectInfo.gitOwner, ProjectInfo.project, config)
)

let githubDraft = BuildTask.createFn "GithubDraft" [] (fun config ->

let body = "We are ready to go for the first release!"

Github.draft(
ProjectInfo.gitOwner,
ProjectInfo.project,
(Some body),
None,
config
)
)
58 changes: 58 additions & 0 deletions build/ReleaseTasks.fs
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
module ReleaseTasks

open MessagePrompts
open ProjectInfo
open BasicTasks
open TestTasks
open PackageTasks

open BlackFox.Fake
open Fake.Core
open Fake.DotNet
open Fake.Api
open Fake.Tools
open Fake.IO
open Fake.IO.Globbing.Operators

let createTag = BuildTask.create "CreateTag" [clean; build; runTests; pack] {
if promptYesNo (sprintf "tagging branch with %s OK?" stableVersionTag ) then
Git.Branches.tag "" stableVersionTag
Git.Branches.pushTag "" projectRepo stableVersionTag
else
failwith "aborted"
}

let createPrereleaseTag = BuildTask.create "CreatePrereleaseTag" [setPrereleaseTag; clean; build; runTests; packPrerelease] {
if promptYesNo (sprintf "tagging branch with %s OK?" prereleaseTag ) then
Git.Branches.tag "" prereleaseTag
Git.Branches.pushTag "" projectRepo prereleaseTag
else
failwith "aborted"
}


let publishNuget = BuildTask.create "PublishNuget" [clean; build; runTests; pack] {
let targets = (!! (sprintf "%s/*.*pkg" pkgDir ))
for target in targets do printfn "%A" target
let msg = sprintf "release package with version %s?" stableVersionTag
if promptYesNo msg then
let source = "https://api.nuget.org/v3/index.json"
let apikey = Environment.environVar "NUGET_KEY_CSB"
for artifact in targets do
let result = DotNet.exec id "nuget" (sprintf "push -s %s -k %s %s --skip-duplicate" source apikey artifact)
if not result.OK then failwith "failed to push packages"
else failwith "aborted"
}

let publishNugetPrerelease = BuildTask.create "PublishNugetPrerelease" [clean; build; runTests; packPrerelease] {
let targets = (!! (sprintf "%s/*.*pkg" pkgDir ))
for target in targets do printfn "%A" target
let msg = sprintf "release package with version %s?" prereleaseTag
if promptYesNo msg then
let source = "https://api.nuget.org/v3/index.json"
let apikey = Environment.environVar "NUGET_KEY_CSB"
for artifact in targets do
let result = DotNet.exec id "nuget" (sprintf "push -s %s -k %s %s --skip-duplicate" source apikey artifact)
if not result.OK then failwith "failed to push packages"
else failwith "aborted"
}
Loading

0 comments on commit 9132222

Please sign in to comment.