diff --git a/src/Fable.AST/Fable.AST.fsproj b/src/Fable.AST/Fable.AST.fsproj index 5c56859ade..6e5ac9afa9 100644 --- a/src/Fable.AST/Fable.AST.fsproj +++ b/src/Fable.AST/Fable.AST.fsproj @@ -4,12 +4,17 @@ true Fable AST netstandard2.0 - true - 4.5.0 + true + + + runtime; build; native; contentfiles; analyzers; buildtransitive + all + + diff --git a/src/Fable.Build/Fable.Build.fsproj b/src/Fable.Build/Fable.Build.fsproj index b7bd5294d8..ca01f74a1b 100644 --- a/src/Fable.Build/Fable.Build.fsproj +++ b/src/Fable.Build/Fable.Build.fsproj @@ -6,11 +6,6 @@ - - - - - @@ -44,6 +39,7 @@ + diff --git a/src/Fable.Build/Publish.fs b/src/Fable.Build/Publish.fs index a709d44c37..24e1ea23cd 100644 --- a/src/Fable.Build/Publish.fs +++ b/src/Fable.Build/Publish.fs @@ -6,6 +6,10 @@ open System.Text.RegularExpressions open Build.FableLibrary open System open Build.Workspace +open EasyBuild.Tools.DotNet +open EasyBuild.Tools.Changelog +open EasyBuild.Tools.PackageJson +open EasyBuild.Tools.Npm let updateLibraryVersionInFableTransforms (compilerVersion: string) @@ -52,67 +56,35 @@ let private publishNuget (fsprojDir: string) (noSymbols: bool) = if Array.length fsprojFiles <> 1 then failwithf $"Expected to find exactly one fsproj file in %s{fsprojDir}" - let fsprojPath = fsprojFiles[0] - let fsprojContent = File.ReadAllText fsprojPath - let changelogPath = Path.Combine(fsprojDir, "CHANGELOG.md") - let lastChangelogVersion = Changelog.getLastVersion changelogPath - let lastVersion = lastChangelogVersion |> fun v -> v.Version.ToString() - - let lastVersionBody = ChangelogParser.Version.bodyAsMarkdown lastChangelogVersion - - printfn $"Publishing: %s{fsprojDir}" - let nugetKey = Environment.GetEnvironmentVariable("FABLE_NUGET_KEY") if isNull nugetKey then failwithf $"Missing FABLE_NUGET_KEY environment variable" - if Fsproj.needPublishing fsprojContent lastVersion then - let updatedFsprojContent = - fsprojContent - |> Fsproj.replaceVersion lastVersion - |> Fsproj.replacePackageReleaseNotes lastVersionBody + printfn $"Publishing: %s{fsprojDir}" - File.WriteAllText(fsprojPath, updatedFsprojContent) - let nupkgPath = Dotnet.pack fsprojDir - Dotnet.Nuget.push (nupkgPath, nugetKey, noSymbols = noSymbols) - printfn $"Published!" - else - printfn $"Already up-to-date, skipping..." + let nupkgPath = DotNet.pack fsprojDir + + // We skip duplicates because we might have already published the same version + // This is because we make an optimistic release and delegate the version set to EasyBuild. + DotNet.nugetPush (nupkgPath, apiKey = nugetKey, noSymbols = noSymbols, skipDuplicate = true) let private publishNpm (projectDir: string) = - let packageJsonPath = Path.Combine(projectDir, "package.json") - let packageJsonContent = File.ReadAllText(packageJsonPath) - let changelogPath = Path.Combine(projectDir, "CHANGELOG.md") + let packageJsonFile = Path.Combine(projectDir, "package.json") |> FileInfo let lastChangelogVersion = - Changelog.getLastVersion changelogPath |> fun v -> v.Version.ToString() - - printfn $"Publishing: %s{projectDir}" + Path.Combine(projectDir, "CHANGELOG.md") + |> FileInfo + |> Changelog.findLastVersion - if Npm.needPublishing packageJsonContent lastChangelogVersion then - let updatedPackageJsonContent = - Npm.replaceVersion packageJsonContent lastChangelogVersion + PackageJson.replaceVersion (packageJsonFile, lastChangelogVersion) - File.WriteAllText(packageJsonPath, updatedPackageJsonContent) + if PackageJson.needPublishing packageJsonFile then Npm.publish projectDir printfn $"Published!" else printfn $"Already up-to-date, skipping..." -let private updateFableLibraryTsPackageJsonVersion () = - let packageJsonPath = Path.Combine(ProjectDir.fable_library_ts, "package.json") - let packageJsonContent = File.ReadAllText(packageJsonPath) - let changelogPath = Path.Combine(ProjectDir.fable_library_ts, "CHANGELOG.md") - - let lastChangelogVersion = - Changelog.getLastVersion changelogPath |> fun v -> v.Version.ToString() - - let updatedPackageJsonContent = - Npm.replaceVersion packageJsonContent lastChangelogVersion - - File.WriteAllText(packageJsonPath, updatedPackageJsonContent) - let handle (args: string list) = // Build all the fable-libraries BuildFableLibraryDart().Run() @@ -130,21 +102,21 @@ let handle (args: string list) = // We also want to update the original package.json if needed // This is to keep the versions consistent across the project - updateFableLibraryTsPackageJsonVersion () + PackageJson.replaceVersion (PackageJson.fableLibraryTs, Changelog.fableLibraryTs |> Changelog.findLastVersion) publishNpm ProjectDir.fable_metadata // Update embedded version (both compiler and libraries) - let changelogPath = Path.Combine(ProjectDir.fableCli, "CHANGELOG.md") - let compilerVersion = - Changelog.getLastVersion changelogPath |> fun v -> v.Version.ToString() + Path.Combine(ProjectDir.fableCli, "CHANGELOG.md") + |> FileInfo + |> Changelog.findLastVersion updateLibraryVersionInFableTransforms compilerVersion {| - JavaScript = Npm.getVersionFromProjectDir ProjectDir.temp_fable_library_js - TypeScript = Npm.getVersionFromProjectDir ProjectDir.temp_fable_library_ts + JavaScript = PackageJson.tempFableLibraryJs |> PackageJson.getVersion + TypeScript = PackageJson.tempFableLibraryTs |> PackageJson.getVersion |} publishNuget ProjectDir.fableAst false diff --git a/src/Fable.Build/Utils/Changelog.fs b/src/Fable.Build/Utils/Changelog.fs deleted file mode 100644 index 98cd5409d5..0000000000 --- a/src/Fable.Build/Utils/Changelog.fs +++ /dev/null @@ -1,23 +0,0 @@ -module Changelog - -open System.IO - -let getLastVersion (changelogPath: string) = - let content = File.ReadAllText changelogPath - - match ChangelogParser.parse content with - | Ok changelog -> - changelog.Versions - |> List.tryFind (fun v -> v.Title <> "Unreleased") - |> Option.defaultWith (fun () -> - failwithf - $"""Failed to find version in changelog: -File: %s{changelogPath}""" - ) - - | Error msg -> - failwithf - $"""Failed to parse changelog: -File: %s{changelogPath} -Error: -%s{msg}""" diff --git a/src/Fable.Build/Utils/ChangelogParser.fs b/src/Fable.Build/Utils/ChangelogParser.fs deleted file mode 100644 index b6e10c9c80..0000000000 --- a/src/Fable.Build/Utils/ChangelogParser.fs +++ /dev/null @@ -1,415 +0,0 @@ -[] -module ChangelogParser - -open Fable.Core -open System -open System.Text.RegularExpressions -open Semver - -[] -module Types = - - type CategoryBody = - | ListItem of string - | Text of string - | Section of string - - type OtherItem = - { - ListItem: string - TextBody: string option - } - - type Categories = - { - Added: CategoryBody list - Changed: CategoryBody list - Deprecated: CategoryBody list - Removed: CategoryBody list - Improved: CategoryBody list - Fixed: CategoryBody list - Security: CategoryBody list - Custom: Map - } - - type Version = - { - Version: SemVersion - Title: string - Date: DateTime option - Categories: Categories - OtherItems: OtherItem list - } - - type Changelog = - { - Title: string - Description: string - Versions: Version list - } - - static member Empty = - { - Title = "" - Description = "" - Versions = [] - } - - [] - type Symbols = - | Title of title: string - | RawText of body: string - | SectionHeader of title: string * version: string option * date: string option - | SubSection of tag: string - | SubSubSection of tag: string - | ListItem of content: string - - -[] -module Lexer = - - [] - let private (|Match|_|) pattern input = - let m = Regex.Match(input, pattern) - - if m.Success then - ValueSome m - else - ValueNone - - [] - let private (|Title|_|) (input: string) = - match input with - | Match "^# ?[^#]" _ -> input.Substring(1).Trim() |> ValueSome - | _ -> ValueNone - - [] - let private (|Semver|_|) (input: string) = - match input with - | Match "\\[?v?([\\w\\d.-]+\\.[\\w\\d.-]+[a-zA-Z0-9])\\]?" m -> ValueSome m.Groups.[1].Value - | _ -> ValueNone - - [] - let private (|Date|_|) (input: string) = - match input with - | Match "(\\d{4}-\\d{2}-\\d{2})" m -> ValueSome m.Groups.[0].Value - | _ -> ValueNone - - [] - let private (|Version|_|) (input: string) = - match input with - | Match "^##? ?[^#]" _ -> - let version = - match input with - | Semver version -> Some version - | _ -> None - - let date = - match input with - | Date date -> Some date - | _ -> None - - let title = input.Substring(2).Trim() - - ValueSome(title, version, date) - - | _ -> ValueNone - - [] - let private (|SubSection|_|) (input: string) = - match input with - | Match "^### ?[^#]" _ -> input.Substring(3).Trim() |> ValueSome - | _ -> ValueNone - - [] - let private (|SubSubSection|_|) (input: string) = - match input with - | Match "^#### ?[^#]" _ -> input.Substring(4).Trim() |> ValueSome - | _ -> ValueNone - - [] - let private (|ListItem|_|) (input: string) = - match input with - | Match "^[*-]" _ -> input.Substring(1).Trim() |> ValueSome - | _ -> ValueNone - - let toSymbols (lines: string list) = - lines - |> List.map ( - function - | Title title -> Symbols.Title title - | Version(title, version, date) -> Symbols.SectionHeader(title, version, date) - | SubSection tag -> Symbols.SubSection tag - | SubSubSection tag -> Symbols.SubSubSection tag - | ListItem content -> Symbols.ListItem content - | rawText -> Symbols.RawText(rawText.TrimEnd()) - ) - -[] -module Transform = - - let rec private parseCategoryBody (symbols: Symbols list) (sectionContent: CategoryBody list) = - match symbols with - | Symbols.ListItem item :: tail -> - - parseCategoryBody tail (sectionContent @ [ CategoryBody.ListItem item ]) - // If this is the beginning of a text block - | Symbols.RawText _ :: _ -> - // Capture all the lines of the text block - let textLines = - symbols - |> List.takeWhile ( - function - | Symbols.RawText _ -> true - | _ -> false - ) - - // Regroup everything into a single string - let content = - textLines - |> List.map ( - function - | Symbols.RawText text -> text - | _ -> failwith "Should not happen the list has been filtered" - ) - // Skip empty lines at the beginning - |> List.skipWhile String.IsNullOrEmpty - // Skip empty lines at the end - |> List.rev - |> List.skipWhile String.IsNullOrEmpty - |> List.rev - // Join the lines - |> String.concat "\n" - - // Remove already handle symbols - let rest = symbols |> List.skip textLines.Length - - // If details is an empty line don't store it - if String.IsNullOrEmpty content then - parseCategoryBody rest sectionContent - else - parseCategoryBody rest (sectionContent @ [ CategoryBody.Text content ]) - - | Symbols.SubSubSection tag :: tail -> parseCategoryBody tail (sectionContent @ [ CategoryBody.Section tag ]) - - // End of the Section, return the built content - | _ -> symbols, sectionContent - - let rec private tryEatRawText (symbols: Symbols list) = - match symbols with - // If this is the beginning of a text block - | Symbols.RawText _ :: _ -> - // Capture all the lines of the text block - let textLines = - symbols - |> List.takeWhile ( - function - | Symbols.RawText _ -> true - | _ -> false - ) - - // Regroup everything into a single string - let content = - textLines - |> List.map ( - function - | Symbols.RawText text -> text - | _ -> failwith "Should not happen the list has been filtered" - ) - // Skip empty lines at the beginning - |> List.skipWhile String.IsNullOrEmpty - // Skip empty lines at the end - |> List.rev - |> List.skipWhile String.IsNullOrEmpty - |> List.rev - // Join the lines - |> String.concat "\n" - - // Remove already handle symbols - let rest = symbols |> List.skip textLines.Length - - rest, Some content - // End of the Section, return the built content - | _ -> symbols, None - - let rec private parse (symbols: Symbols list) (changelog: Changelog) = - match symbols with - | Symbols.Title title :: tail -> - if String.IsNullOrEmpty changelog.Title then - { changelog with Title = title } - else - changelog - |> parse tail - - | Symbols.SubSubSection _ :: tail -> - // Should not happen here, it should be captured in the parseCategoryBody function - parse tail changelog - - | Symbols.SectionHeader(title, version, date) :: tail -> - let version = - { - Version = - match version with - | Some version -> SemVersion.Parse(version, SemVersionStyles.Strict) - | None -> - // If no version is provided, use a dummy version - // This happens when handling the unreleased section - SemVersion.Parse("0.0.0-Unreleased", SemVersionStyles.Strict) - Title = title - Date = date |> Option.map DateTime.Parse - Categories = - { - Added = [] - Changed = [] - Deprecated = [] - Removed = [] - Improved = [] - Fixed = [] - Security = [] - Custom = Map.empty - } - OtherItems = [] - } - - parse tail { changelog with Versions = version :: changelog.Versions } - - | Symbols.SubSection tag :: tail -> - let (unparsedSymbols, categoryBody) = parseCategoryBody tail [] - - match changelog.Versions with - | currentVersion :: otherVersions -> - let updatedCategories = - match tag.ToLower() with - | "added" -> - { currentVersion.Categories with Added = currentVersion.Categories.Added @ categoryBody } - | "changed" -> - { currentVersion.Categories with Changed = currentVersion.Categories.Changed @ categoryBody } - | "deprecated" -> - { currentVersion.Categories with - Deprecated = currentVersion.Categories.Deprecated @ categoryBody - } - | "removed" -> - { currentVersion.Categories with Removed = currentVersion.Categories.Removed @ categoryBody } - | "improved" -> - { currentVersion.Categories with Improved = currentVersion.Categories.Improved @ categoryBody } - | "fixed" -> - { currentVersion.Categories with Fixed = currentVersion.Categories.Fixed @ categoryBody } - | "security" -> - { currentVersion.Categories with Security = currentVersion.Categories.Security @ categoryBody } - | unknown -> - { currentVersion.Categories with - Custom = currentVersion.Categories.Custom.Add(unknown, categoryBody) - } - - let versions = - { currentVersion with Categories = updatedCategories } :: otherVersions - - parse unparsedSymbols { changelog with Versions = versions } - | _ -> Error "A category should always be under a version" - - | Symbols.RawText _ :: _ -> - // Capture all the lines of the text block - let textLines = - symbols - |> List.takeWhile ( - function - | Symbols.RawText _ -> true - | _ -> false - ) - - // Regroup everything into a single string - let content = - textLines - |> List.map ( - function - | Symbols.RawText text -> text - | _ -> failwith "Should not happen the list has been filtered" - ) - |> String.concat "\n" - - // Remove already handle symbols - let rest = symbols |> List.skip textLines.Length - - parse rest { changelog with Description = content } - - | Symbols.ListItem text :: tail -> - match changelog.Versions with - | currentVersion :: otherVersions -> - let (unparsedSymbols, textBody) = tryEatRawText tail - - let otherItemItem = - { - ListItem = text - TextBody = textBody - } - - let versions = - { currentVersion with OtherItems = currentVersion.OtherItems @ [ otherItemItem ] } - :: otherVersions - - parse unparsedSymbols { changelog with Versions = versions } - | _ -> - - sprintf - "A list item should always be under version. The following list item made the parser failed:\n\n%s\n" - text - |> Error - - | [] -> Ok { changelog with Versions = changelog.Versions |> List.rev } - - let fromSymbols (symbols: Symbols list) = parse symbols Changelog.Empty - -let parse (changelogContent: string) = - changelogContent.Split([| '\r'; '\n' |]) - |> Array.toList - |> Lexer.toSymbols - |> Transform.fromSymbols - -module Version = - - let bodyAsMarkdown (version: Types.Version) = - let renderCategoryBody (categoryLabel: string) (items: CategoryBody list) = - if items.IsEmpty then - "" - else - let categoryBody = - items - |> List.map ( - function - | ListItem item -> sprintf "- %s" item - | Text text -> text - | Section section -> sprintf "\n### %s\n" section - ) - |> String.concat "\n" - - $"## {categoryLabel}\n\n{categoryBody}\n\n" - - let mutable body = "" - - body <- body + renderCategoryBody "Added" version.Categories.Added - body <- body + renderCategoryBody "Changed" version.Categories.Changed - - body <- body + renderCategoryBody "Deprecated" version.Categories.Deprecated - - body <- body + renderCategoryBody "Removed" version.Categories.Removed - body <- body + renderCategoryBody "Improved" version.Categories.Improved - body <- body + renderCategoryBody "Fixed" version.Categories.Fixed - body <- body + renderCategoryBody "Security" version.Categories.Security - - for unkownCategory in version.Categories.Custom.Keys do - let items = version.Categories.Custom.[unkownCategory] - body <- body + renderCategoryBody unkownCategory items - - if not version.OtherItems.IsEmpty then - body <- body + "\n" - - for otherItems in version.OtherItems do - body <- body + sprintf "- %s" otherItems.ListItem - - match otherItems.TextBody with - | Some textBody -> body <- body + sprintf "\n%s" textBody - | None -> () - - body <- body + "\n" - - body diff --git a/src/Fable.Build/Utils/Fsproj.fs b/src/Fable.Build/Utils/Fsproj.fs deleted file mode 100644 index 8520c08986..0000000000 --- a/src/Fable.Build/Utils/Fsproj.fs +++ /dev/null @@ -1,38 +0,0 @@ -module Fsproj - -open System.IO -open SimpleExec -open System.Text.RegularExpressions - -module Regex = - - [] - let VERSION = "(?'version'.*?)" - -let tryGetVersion (fsprojContent: string) = - let m = Regex.Match(fsprojContent, Regex.VERSION) - - if m.Success then - Some m.Groups.["version"].Value - else - None - -let needPublishing (fsprojContent: string) (versionToCheck: string) = - match tryGetVersion fsprojContent with - | Some currentVersion -> currentVersion <> versionToCheck - | None -> failwith "Could not find ... in fsproj file" - -let replaceVersion (version: string) (fsprojContent: string) = - Regex.Replace(fsprojContent, Regex.VERSION, (fun (m: Match) -> $"{version}")) - -let replacePackageReleaseNotes (releaseNotes: string) (fsprojContent: string) = - Regex.Replace( - fsprojContent, - ".*?", - (fun (m: Match) -> - let releaseNotes = releaseNotes.Replace("<", "<").Replace(">", ">") - - $"{releaseNotes}" - ), - RegexOptions.Singleline - ) diff --git a/src/Fable.Build/Utils/Npm.fs b/src/Fable.Build/Utils/Npm.fs deleted file mode 100644 index c3bdad9791..0000000000 --- a/src/Fable.Build/Utils/Npm.fs +++ /dev/null @@ -1,50 +0,0 @@ -namespace Build.Utils - -open Thoth.Json.Net -open System.IO -open SimpleExec -open System.Text.RegularExpressions - -module Regex = - - [] - let VERSION = "\"version\":\s*\"(?'version'.*)\"" - -module Npm = - - let getVersion (packageJsonContent: string) = - let versionDecoder = Decode.field "version" Decode.string - - match Decode.fromString versionDecoder packageJsonContent with - | Ok version -> version - | Error msg -> - failwithf - $"""Failed to find version in package.json - -Error: -%s{msg}""" - - let getVersionFromProjectDir (projectDir: string) = - let packageJsonPath = Path.Combine(projectDir, "package.json") - let packageJsonContent = File.ReadAllText packageJsonPath - - getVersion packageJsonContent - - let tryGetVersion (packageJsonContent: string) (version: string) = - let m = Regex.Match(packageJsonContent, Regex.VERSION) - - if m.Success then - Some m.Groups.["version"].Value - else - None - - let needPublishing (packageJsonContent: string) (versionToCheck: string) = - let version = getVersion packageJsonContent - - version <> versionToCheck - - let publish (projectDir: string) = - Command.Run("npm", "publish --access public", workingDirectory = projectDir) - - let replaceVersion (packageJsonContent: string) (version: string) = - Regex.Replace(packageJsonContent, Regex.VERSION, (fun (m: Match) -> $"\"version\": \"{version}\"")) diff --git a/src/Fable.Build/Utils/Nuget.fs b/src/Fable.Build/Utils/Nuget.fs deleted file mode 100644 index c1b742ce6a..0000000000 --- a/src/Fable.Build/Utils/Nuget.fs +++ /dev/null @@ -1,41 +0,0 @@ -namespace Build.Utils - -open SimpleExec -open System.Text.RegularExpressions -open BlackFox.CommandLine - -module Dotnet = - - type Nuget = - - static member push(nupkgPath: string, nugetKey: string, ?noSymbols: bool) = - let noSymbols = defaultArg noSymbols false - - Command.Run( - "dotnet", - CmdLine.empty - |> CmdLine.appendRaw "nuget" - |> CmdLine.appendRaw "push" - |> CmdLine.appendRaw nupkgPath - |> CmdLine.appendPrefix "-s" "https://api.nuget.org/v3/index.json" - |> CmdLine.appendPrefix "-k" nugetKey - |> CmdLine.appendIf noSymbols "--no-symbols" - |> CmdLine.toString - ) - - let pack (projectDir: string) = - let struct (standardOutput, _) = - Command.ReadAsync("dotnet", "pack -c Release", workingDirectory = projectDir) - |> Async.AwaitTask - |> Async.RunSynchronously - - let m = - Regex.Match(standardOutput, "Successfully created package '(?'nupkgPath'.*\.nupkg)'") - - if m.Success then - m.Groups.["nupkgPath"].Value - else - failwithf - $"""Failed to find nupkg path in output: -Output: -{standardOutput}""" diff --git a/src/Fable.Build/Workspace.fs b/src/Fable.Build/Workspace.fs index eaa9eebed1..1fb9858a8c 100644 --- a/src/Fable.Build/Workspace.fs +++ b/src/Fable.Build/Workspace.fs @@ -27,8 +27,19 @@ module Fsproj = module Changelog = - let fableCLi = Path.Combine(ProjectDir.fableCli, "CHANGELOG.md") - let fableCore = Path.Combine(ProjectDir.fableCore, "CHANGELOG.md") + let fableLibraryTs = + Path.Combine(ProjectDir.fable_library_ts, "CHANGELOG.md") |> FileInfo + +module PackageJson = + + let fableLibraryTs = + Path.Combine(ProjectDir.fable_library_ts, "package.json") |> FileInfo + + let tempFableLibraryTs = + Path.Combine(ProjectDir.temp_fable_library_ts, "package.json") |> FileInfo + + let tempFableLibraryJs = + Path.Combine(ProjectDir.temp_fable_library_js, "package.json") |> FileInfo module FableLibrary = diff --git a/src/Fable.Cli/Fable.Cli.fsproj b/src/Fable.Cli/Fable.Cli.fsproj index 5b04674224..4af64b050c 100644 --- a/src/Fable.Cli/Fable.Cli.fsproj +++ b/src/Fable.Cli/Fable.Cli.fsproj @@ -4,12 +4,6 @@ true Exe net8.0 - 5.0.0-alpha.2 - ## Fixed - -- [All] Allow Fable 5 to be used with Fable 4 plugins (@ncave) - - Major false @@ -49,6 +43,10 @@ + + runtime; build; native; contentfiles; analyzers; buildtransitive + all + diff --git a/src/Fable.Compiler/Fable.Compiler.fsproj b/src/Fable.Compiler/Fable.Compiler.fsproj index 99b6e30c91..6740a18d41 100644 --- a/src/Fable.Compiler/Fable.Compiler.fsproj +++ b/src/Fable.Compiler/Fable.Compiler.fsproj @@ -6,12 +6,6 @@ true true Fable.Compiler - 5.0.0-alpha.2 - ## Fixed - -- [All] Allow Fable 5 to be used with Fable 4 plugins (@ncave) - - embedded @@ -24,8 +18,8 @@ - - + + @@ -40,6 +34,10 @@ + + runtime; build; native; contentfiles; analyzers; buildtransitive + all + diff --git a/src/Fable.Core/Fable.Core.fsproj b/src/Fable.Core/Fable.Core.fsproj index 6c68c417f4..2ac7407c39 100644 --- a/src/Fable.Core/Fable.Core.fsproj +++ b/src/Fable.Core/Fable.Core.fsproj @@ -5,7 +5,6 @@ Fable Core Library netstandard2.0 true - 4.3.0 true @@ -26,4 +25,10 @@ + + + runtime; build; native; contentfiles; analyzers; buildtransitive + all + + diff --git a/src/Fable.PublishUtils/Fable.PublishUtils.fsproj b/src/Fable.PublishUtils/Fable.PublishUtils.fsproj index 80c363771d..0651aba406 100644 --- a/src/Fable.PublishUtils/Fable.PublishUtils.fsproj +++ b/src/Fable.PublishUtils/Fable.PublishUtils.fsproj @@ -4,9 +4,14 @@ net8.0 Major true - 2.4.0 + + + runtime; build; native; contentfiles; analyzers; buildtransitive + all + +