From 6560990794c479c317b591da4c92da61f27b3fbe Mon Sep 17 00:00:00 2001 From: Kevin Schneider Date: Thu, 4 Jan 2024 14:37:17 +0100 Subject: [PATCH] Target netstandard 2.0 with lib, update project to .net 8 --- build/BasicTasks.fs | 23 +++- build/Build.fs | 10 +- build/DocumentationTasks.fs | 8 +- build/PackageTasks.fs | 35 ++--- build/ReleaseTasks.fs | 8 +- build/TestTasks.fs | 26 +--- build/build.fsproj | 2 +- global.json | 2 +- .../AnyBadge.NET.Tool.fsproj | 2 +- src/AnyBadge.NET/AnyBadge.NET.fsproj | 2 +- src/AnyBadge.NET/Badge.fs | 4 +- src/AnyBadge.NET/Helpers.fs | 2 +- src/AnyBadge.NET/playground.ipynb | 123 +++++++++++------- .../AnyBadge.NET.Tests.fsproj | 2 +- 14 files changed, 138 insertions(+), 111 deletions(-) diff --git a/build/BasicTasks.fs b/build/BasicTasks.fs index d7f28ad..36c00b0 100644 --- a/build/BasicTasks.fs +++ b/build/BasicTasks.fs @@ -24,7 +24,22 @@ let clean = BuildTask.create "Clean" [] { |> Shell.cleanDirs } -let build = BuildTask.create "Build" [clean] { - solutionFile - |> DotNet.build id -} \ No newline at end of file +let buildSolution = + BuildTask.create "BuildSolution" [ clean ] { + solutionFile + |> DotNet.build (fun p -> + let msBuildParams = + {p.MSBuildParams with + Properties = ([ + "warnon", "3390" + ]) + DisableInternalBinLog = true + } + { + p with + MSBuildParams = msBuildParams + + } + |> DotNet.Options.withCustomParams (Some "-tl") + ) + } \ No newline at end of file diff --git a/build/Build.fs b/build/Build.fs index 91b64ee..c10ddcb 100644 --- a/build/Build.fs +++ b/build/Build.fs @@ -21,28 +21,28 @@ open ReleaseTasks let _release = BuildTask.createEmpty "Release" - [clean; build; runTests; pack; buildDocs; createTag; publishNuget; releaseDocs] + [clean; buildSolution; runTests; pack; buildDocs; createTag; publishNuget; releaseDocs] /// Full release of nuget package, git tag, and documentation for the prerelease version. let _preRelease = BuildTask.createEmpty "PreRelease" - [setPrereleaseTag; clean; build; runTests; packPrerelease; buildDocsPrerelease; createPrereleaseTag; publishNugetPrerelease; prereleaseDocs] + [setPrereleaseTag; clean; buildSolution; runTests; packPrerelease; buildDocsPrerelease; createPrereleaseTag; publishNugetPrerelease; prereleaseDocs] /// Full release of nuget package for the prerelease version. let _releaseNoDocs = BuildTask.createEmpty "ReleaseNoDocs" - [clean; build; runTests; pack; createTag; publishNuget;] + [clean; buildSolution; runTests; pack; createTag; publishNuget;] /// Full release of nuget package for the prerelease version. let _preReleaseNoDocs = BuildTask.createEmpty "PreReleaseNoDocs" - [setPrereleaseTag; clean; build; runTests; packPrerelease; createPrereleaseTag; publishNugetPrerelease] + [setPrereleaseTag; clean; buildSolution; runTests; packPrerelease; createPrereleaseTag; publishNugetPrerelease] ReleaseNotesTasks.updateReleaseNotes |> ignore [] let main args = - runOrDefault build args + runOrDefault buildSolution args diff --git a/build/DocumentationTasks.fs b/build/DocumentationTasks.fs index b3e5f48..17134e2 100644 --- a/build/DocumentationTasks.fs +++ b/build/DocumentationTasks.fs @@ -6,28 +6,28 @@ open BasicTasks open BlackFox.Fake -let buildDocs = BuildTask.create "BuildDocs" [build] { +let buildDocs = BuildTask.create "BuildDocs" [buildSolution] { printfn "building docs with stable version %s" stableVersionTag runDotNet (sprintf "fsdocs build --eval --clean --properties Configuration=Release --parameters fsdocs-package-version %s" stableVersionTag) "./" } -let buildDocsPrerelease = BuildTask.create "BuildDocsPrerelease" [setPrereleaseTag; build] { +let buildDocsPrerelease = BuildTask.create "BuildDocsPrerelease" [setPrereleaseTag; buildSolution] { printfn "building docs with prerelease version %s" prereleaseTag runDotNet (sprintf "fsdocs build --eval --clean --properties Configuration=Release --parameters fsdocs-package-version %s" prereleaseTag) "./" } -let watchDocs = BuildTask.create "WatchDocs" [build] { +let watchDocs = BuildTask.create "WatchDocs" [buildSolution] { printfn "watching docs with stable version %s" stableVersionTag runDotNet (sprintf "fsdocs watch --eval --clean --properties Configuration=Release --parameters fsdocs-package-version %s" stableVersionTag) "./" } -let watchDocsPrerelease = BuildTask.create "WatchDocsPrerelease" [setPrereleaseTag; build] { +let watchDocsPrerelease = BuildTask.create "WatchDocsPrerelease" [setPrereleaseTag; buildSolution] { printfn "watching docs with prerelease version %s" prereleaseTag runDotNet (sprintf "fsdocs watch --eval --clean --properties Configuration=Release --parameters fsdocs-package-version %s" prereleaseTag) diff --git a/build/PackageTasks.fs b/build/PackageTasks.fs index e77d4c4..3eeedfa 100644 --- a/build/PackageTasks.fs +++ b/build/PackageTasks.fs @@ -8,6 +8,7 @@ open TestTasks open BlackFox.Fake open Fake.Core +open Fake.DotNet open Fake.IO.Globbing.Operators open System.Text.RegularExpressions @@ -17,7 +18,7 @@ let private replaceCommitLink input = let commitLinkPattern = @"\[\[#[a-z0-9]*\]\(.*\)\] " Regex.Replace(input,commitLinkPattern,"") -let pack = BuildTask.create "Pack" [clean; build; runTests] { +let pack = BuildTask.create "Pack" [clean; buildSolution; runTests] { if promptYesNo (sprintf "creating stable package with version %s OK?" stableVersionTag ) then !! "src/**/*.*proj" @@ -29,35 +30,39 @@ let pack = BuildTask.create "Pack" [clean; build; runTests] { "Version",stableVersionTag "PackageReleaseNotes", (release.Notes |> List.map replaceCommitLink |> String.concat "\r\n" ) ] @ p.MSBuildParams.Properties) + DisableInternalBinLog = true } { p with MSBuildParams = msBuildParams OutputPath = Some pkgDir } + |> DotNet.Options.withCustomParams (Some "-tl") )) else failwith "aborted" } -let packPrerelease = BuildTask.create "PackPrerelease" [setPrereleaseTag; clean; build; runTests] { +let packPrerelease = BuildTask.create "PackPrerelease" [setPrereleaseTag; clean; buildSolution; 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 |> List.map replaceCommitLink |> String.toLines ) - ] @ p.MSBuildParams.Properties) - } - { - p with - VersionSuffix = Some prereleaseSuffix - OutputPath = Some pkgDir - MSBuildParams = msBuildParams - } + let msBuildParams = + {p.MSBuildParams with + Properties = ([ + "Version", prereleaseTag + "PackageReleaseNotes", (release.Notes |> List.map replaceCommitLink |> String.toLines ) + ] @ p.MSBuildParams.Properties) + DisableInternalBinLog = true + } + { + p with + VersionSuffix = Some prereleaseSuffix + OutputPath = Some pkgDir + MSBuildParams = msBuildParams + } + |> DotNet.Options.withCustomParams (Some "-tl") )) else failwith "aborted" diff --git a/build/ReleaseTasks.fs b/build/ReleaseTasks.fs index 8748ab7..4a8bdae 100644 --- a/build/ReleaseTasks.fs +++ b/build/ReleaseTasks.fs @@ -15,7 +15,7 @@ open Fake.Tools open Fake.IO open Fake.IO.Globbing.Operators -let createTag = BuildTask.create "CreateTag" [clean; build; runTests; pack] { +let createTag = BuildTask.create "CreateTag" [clean; buildSolution; runTests; pack] { if promptYesNo (sprintf "tagging branch with %s OK?" stableVersionTag ) then Git.Branches.tag "" stableVersionTag Git.Branches.pushTag "" projectRepo stableVersionTag @@ -23,7 +23,7 @@ let createTag = BuildTask.create "CreateTag" [clean; build; runTests; pack] { failwith "aborted" } -let createPrereleaseTag = BuildTask.create "CreatePrereleaseTag" [setPrereleaseTag; clean; build; runTests; packPrerelease] { +let createPrereleaseTag = BuildTask.create "CreatePrereleaseTag" [setPrereleaseTag; clean; buildSolution; runTests; packPrerelease] { if promptYesNo (sprintf "tagging branch with %s OK?" prereleaseTag ) then Git.Branches.tag "" prereleaseTag Git.Branches.pushTag "" projectRepo prereleaseTag @@ -32,7 +32,7 @@ let createPrereleaseTag = BuildTask.create "CreatePrereleaseTag" [setPrereleaseT } -let publishNuget = BuildTask.create "PublishNuget" [clean; build; runTests; pack] { +let publishNuget = BuildTask.create "PublishNuget" [clean; buildSolution; 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 @@ -45,7 +45,7 @@ let publishNuget = BuildTask.create "PublishNuget" [clean; build; runTests; pack else failwith "aborted" } -let publishNugetPrerelease = BuildTask.create "PublishNugetPrerelease" [clean; build; runTests; packPrerelease] { +let publishNugetPrerelease = BuildTask.create "PublishNugetPrerelease" [clean; buildSolution; 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 diff --git a/build/TestTasks.fs b/build/TestTasks.fs index 113f964..87d36aa 100644 --- a/build/TestTasks.fs +++ b/build/TestTasks.fs @@ -6,7 +6,7 @@ open Fake.DotNet open ProjectInfo open BasicTasks -let runTests = BuildTask.create "RunTests" [clean; build] { +let runTests = BuildTask.create "RunTests" [clean; buildSolution] { testProjects |> Seq.iter (fun testProject -> Fake.DotNet.DotNet.test(fun testParams -> @@ -15,29 +15,9 @@ let runTests = BuildTask.create "RunTests" [clean; build] { Logger = Some "console;verbosity=detailed" Configuration = DotNet.BuildConfiguration.fromString configuration NoBuild = true + MSBuildParams = { testParams.MSBuildParams with DisableInternalBinLog = true} } - ) testProject - ) -} - -// to do: use this once we have actual tests -let runTestsWithCodeCov = BuildTask.create "RunTestsWithCodeCov" [clean; build] { - let standardParams = Fake.DotNet.MSBuild.CliArguments.Create () - testProjects - |> Seq.iter(fun testProject -> - Fake.DotNet.DotNet.test(fun testParams -> - { - testParams with - MSBuildParams = { - standardParams with - Properties = [ - "AltCover","true" - "AltCoverCobertura","../../codeCov.xml" - "AltCoverForce","true" - ] - }; - Logger = Some "console;verbosity=detailed" - } + |> DotNet.Options.withCustomParams (Some "-tl") ) testProject ) } \ No newline at end of file diff --git a/build/build.fsproj b/build/build.fsproj index 8c83a51..f7ed9a6 100644 --- a/build/build.fsproj +++ b/build/build.fsproj @@ -1,7 +1,7 @@  - net6.0 + net8.0 Exe diff --git a/global.json b/global.json index 08fc58c..989a69c 100644 --- a/global.json +++ b/global.json @@ -1,6 +1,6 @@ { "sdk": { - "version": "6.0.100", + "version": "8.0.100", "rollForward": "latestMinor" } } \ No newline at end of file diff --git a/src/AnyBadge.NET.Tool/AnyBadge.NET.Tool.fsproj b/src/AnyBadge.NET.Tool/AnyBadge.NET.Tool.fsproj index 24b7d58..9c22dfe 100644 --- a/src/AnyBadge.NET.Tool/AnyBadge.NET.Tool.fsproj +++ b/src/AnyBadge.NET.Tool/AnyBadge.NET.Tool.fsproj @@ -2,7 +2,7 @@ Exe - net6.0 + net8.0 diff --git a/src/AnyBadge.NET/AnyBadge.NET.fsproj b/src/AnyBadge.NET/AnyBadge.NET.fsproj index 4a8ee70..779b555 100644 --- a/src/AnyBadge.NET/AnyBadge.NET.fsproj +++ b/src/AnyBadge.NET/AnyBadge.NET.fsproj @@ -1,7 +1,7 @@  - net6.0 + netstandard2.0 Library true diff --git a/src/AnyBadge.NET/Badge.fs b/src/AnyBadge.NET/Badge.fs index c0891a5..40b6d4f 100644 --- a/src/AnyBadge.NET/Badge.fs +++ b/src/AnyBadge.NET/Badge.fs @@ -65,7 +65,7 @@ type Badge( | None -> value // text_color can be passed as a single value or a pair of comma delimited values - let textColors = textColor.Split(",") + let textColors = textColor.Split(',') let labelTextColor = textColors.[0] let valueTextColor = if textColors.Length > 1 then @@ -355,7 +355,7 @@ type Badge( Globals.GITLAB_SCOPED_TEMPLATE else // Identify whether template is a file or the actual template text - if this.Template.Split("\n").Length = 1 then + if this.Template.Split('\n').Length = 1 then try File.ReadAllText(this.Template) with _ -> diff --git a/src/AnyBadge.NET/Helpers.fs b/src/AnyBadge.NET/Helpers.fs index 6f343fc..d19c1c4 100644 --- a/src/AnyBadge.NET/Helpers.fs +++ b/src/AnyBadge.NET/Helpers.fs @@ -59,7 +59,7 @@ module Helpers = for c in text do for k in char_width_percentages.Keys do - if k.Contains(c) then + if Array.contains c (k.ToCharArray()) then size <- size + (char_width_percentages[k] * float(fontWidth)) int(size) \ No newline at end of file diff --git a/src/AnyBadge.NET/playground.ipynb b/src/AnyBadge.NET/playground.ipynb index 7c287df..00411a3 100644 --- a/src/AnyBadge.NET/playground.ipynb +++ b/src/AnyBadge.NET/playground.ipynb @@ -15,7 +15,7 @@ { "data": { "text/html": [ - "
Installed Packages
  • Semver, 2.3.0
" + "
Installed Packages
  • AnyBadge.NET, 1.0.0
" ] }, "metadata": {}, @@ -23,8 +23,9 @@ } ], "source": [ - "#r \"nuget: Semver\"\n", - "#r \"bin/Debug/net6.0/AnyBadge.NET.dll\"" + "#r \"nuget: AnyBadge.NET\"\n", + "// #r \"nuget: Semver\"\n", + "// #r \"bin/Debug/net6.0/AnyBadge.NET.dll\" for local development" ] }, { @@ -210,9 +211,16 @@ " |> DisplayFunctions.HTML " ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Set value format" + ] + }, { "cell_type": "code", - "execution_count": null, + "execution_count": 14, "metadata": { "dotnet_interactive": { "language": "fsharp" @@ -221,8 +229,49 @@ "kernelName": "fsharp" } }, - "outputs": [], - "source": [] + "outputs": [ + { + "data": { + "text/html": [ + "\r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " label\r\n", + " label\r\n", + " \r\n", + " \r\n", + " 'value' is the value\r\n", + " 'value' is the value\r\n", + " \r\n", + "\r\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "Badge(\n", + " label = \"label\",\n", + " value = \"value\",\n", + " defaultColor = ORANGE,\n", + " ValueFormat = (Printf.StringFormat<_>(\"'%s' is the value\"))\n", + ")\n", + " .BadgeSvgText\n", + " |> DisplayFunctions.HTML " + ] }, { "cell_type": "markdown", @@ -233,7 +282,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 5, "metadata": { "dotnet_interactive": { "language": "fsharp" @@ -259,10 +308,10 @@ " \r\n", " \r\n", " \r\n", - " \r\n", + " \r\n", " \r\n", " \r\n", - " \r\n", + " \r\n", " \r\n", " \r\n", " \r\n", @@ -303,7 +352,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 6, "metadata": { "dotnet_interactive": { "language": "fsharp" @@ -329,10 +378,10 @@ " \r\n", " \r\n", " \r\n", - " \r\n", + " \r\n", " \r\n", " \r\n", - " \r\n", + " \r\n", " \r\n", " \r\n", " \r\n", @@ -378,7 +427,7 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 15, "metadata": { "dotnet_interactive": { "language": "fsharp" @@ -389,42 +438,20 @@ }, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "FloatValue\n" + "ename": "Error", + "evalue": "System.Exception: toFormattedString: unreachable\r\n at Microsoft.FSharp.Core.PrintfImpl.FloatAndDecimal.toFormattedString(String fmt, Object v) in D:\\a\\_work\\1\\s\\src\\FSharp.Core\\printf.fs:line 860\r\n at Microsoft.FSharp.Core.PrintfImpl.FloatAndDecimal.withPadding@906-2.Invoke(String fmt, Object v)\r\n at Microsoft.FSharp.Core.PrintfImpl.OneStepWithArg@508-1.Invoke(A arg1) in D:\\a\\_work\\1\\s\\src\\FSharp.Core\\printf.fs:line 511\r\n at AnyBadge.NET.Badge..ctor(String label, String value, FSharpOption`1 FontName, FSharpOption`1 FontSize, FSharpOption`1 NumPaddingChars, FSharpOption`1 NumLabelPaddingChars, FSharpOption`1 NumValuePaddingChars, FSharpOption`1 Template, FSharpOption`1 Style, FSharpOption`1 ValuePrefix, FSharpOption`1 ValueSuffix, FSharpOption`1 Thresholds, FSharpOption`1 DefaultColor, FSharpOption`1 UseMaxWhenValueExceeds, FSharpOption`1 ValueFormat, FSharpOption`1 TextColor, FSharpOption`1 Semver) in C:\\Users\\schne\\Source\\repos\\kMutagene\\AnyBadge.NET\\src\\AnyBadge.NET\\Badge.fs:line 60\r\n at AnyBadge.NET.Badge..ctor(String label, Double value, FSharpOption`1 DefaultColor, FSharpOption`1 FontName, FSharpOption`1 FontSize, FSharpOption`1 NumPaddingChars, FSharpOption`1 NumLabelPaddingChars, FSharpOption`1 NumValuePaddingChars, FSharpOption`1 Template, FSharpOption`1 Style, FSharpOption`1 ValuePrefix, FSharpOption`1 ValueSuffix, FSharpOption`1 Thresholds, FSharpOption`1 UseMaxWhenValueExceeds, FSharpOption`1 ValueFormat, FSharpOption`1 TextColor, FSharpOption`1 Semver) in C:\\Users\\schne\\Source\\repos\\kMutagene\\AnyBadge.NET\\src\\AnyBadge.NET\\Badge.fs:line 602\r\n at .$FSI_0018.main@()\r\n at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor)\r\n at System.Reflection.MethodInvoker.Invoke(Object obj, IntPtr* args, BindingFlags invokeAttr)", + "output_type": "error", + "traceback": [ + "System.Exception: toFormattedString: unreachable\r\n", + " at Microsoft.FSharp.Core.PrintfImpl.FloatAndDecimal.toFormattedString(String fmt, Object v) in D:\\a\\_work\\1\\s\\src\\FSharp.Core\\printf.fs:line 860\r\n", + " at Microsoft.FSharp.Core.PrintfImpl.FloatAndDecimal.withPadding@906-2.Invoke(String fmt, Object v)\r\n", + " at Microsoft.FSharp.Core.PrintfImpl.OneStepWithArg@508-1.Invoke(A arg1) in D:\\a\\_work\\1\\s\\src\\FSharp.Core\\printf.fs:line 511\r\n", + " at AnyBadge.NET.Badge..ctor(String label, String value, FSharpOption`1 FontName, FSharpOption`1 FontSize, FSharpOption`1 NumPaddingChars, FSharpOption`1 NumLabelPaddingChars, FSharpOption`1 NumValuePaddingChars, FSharpOption`1 Template, FSharpOption`1 Style, FSharpOption`1 ValuePrefix, FSharpOption`1 ValueSuffix, FSharpOption`1 Thresholds, FSharpOption`1 DefaultColor, FSharpOption`1 UseMaxWhenValueExceeds, FSharpOption`1 ValueFormat, FSharpOption`1 TextColor, FSharpOption`1 Semver) in C:\\Users\\schne\\Source\\repos\\kMutagene\\AnyBadge.NET\\src\\AnyBadge.NET\\Badge.fs:line 60\r\n", + " at AnyBadge.NET.Badge..ctor(String label, Double value, FSharpOption`1 DefaultColor, FSharpOption`1 FontName, FSharpOption`1 FontSize, FSharpOption`1 NumPaddingChars, FSharpOption`1 NumLabelPaddingChars, FSharpOption`1 NumValuePaddingChars, FSharpOption`1 Template, FSharpOption`1 Style, FSharpOption`1 ValuePrefix, FSharpOption`1 ValueSuffix, FSharpOption`1 Thresholds, FSharpOption`1 UseMaxWhenValueExceeds, FSharpOption`1 ValueFormat, FSharpOption`1 TextColor, FSharpOption`1 Semver) in C:\\Users\\schne\\Source\\repos\\kMutagene\\AnyBadge.NET\\src\\AnyBadge.NET\\Badge.fs:line 602\r\n", + " at .$FSI_0018.main@()\r\n", + " at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor)\r\n", + " at System.Reflection.MethodInvoker.Invoke(Object obj, IntPtr* args, BindingFlags invokeAttr)" ] - }, - { - "data": { - "text/html": [ - "\r\n", - "\r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " \r\n", - " ARC quality\r\n", - " ARC quality\r\n", - " \r\n", - " \r\n", - " 16.5/20\r\n", - " 16.5/20\r\n", - " \r\n", - "\r\n" - ] - }, - "metadata": {}, - "output_type": "display_data" } ], "source": [ diff --git a/tests/AnyBadge.NET.Tests/AnyBadge.NET.Tests.fsproj b/tests/AnyBadge.NET.Tests/AnyBadge.NET.Tests.fsproj index 6a6ef42..855b02d 100644 --- a/tests/AnyBadge.NET.Tests/AnyBadge.NET.Tests.fsproj +++ b/tests/AnyBadge.NET.Tests/AnyBadge.NET.Tests.fsproj @@ -1,7 +1,7 @@ - net6.0 + net8.0 false false