diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 00000000..d5860940 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,44 @@ +# ------------------------------------------------------------------------------ +# +# +# This code was generated. +# +# - To turn off auto-generation set: +# +# [GitHubActions (AutoGenerate = false)] +# +# - To trigger manual generation invoke: +# +# nuke --generate-configuration GitHubActions_ci --host GitHubActions +# +# +# ------------------------------------------------------------------------------ + +name: ci + +on: + push: + paths: + - 'Src/**' + - 'Build/**' + pull_request: + branches: + - main + +jobs: + ubuntu-latest: + name: ubuntu-latest + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - name: 'Cache: .nuke/temp, ~/.nuget/packages' + uses: actions/cache@v3 + with: + path: | + .nuke/temp + ~/.nuget/packages + key: ${{ runner.os }}-${{ hashFiles('**/global.json', '**/*.csproj', '**/Directory.Packages.props') }} + - name: 'Run: Compile, Pack, Push' + run: ./build.cmd Compile Pack Push + env: + NUGETAPIKEY: ${{ secrets.NUGETAPIKEY }} diff --git a/.nuke/build.schema.json b/.nuke/build.schema.json new file mode 100644 index 00000000..32821b42 --- /dev/null +++ b/.nuke/build.schema.json @@ -0,0 +1,128 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "$ref": "#/definitions/build", + "title": "Build Schema", + "definitions": { + "build": { + "type": "object", + "properties": { + "CI": { + "type": "boolean" + }, + "Configuration": { + "type": "string", + "description": "Configuration to build - Default is 'Debug' (local) or 'Release' (server)", + "enum": [ + "Debug", + "Release" + ] + }, + "Continue": { + "type": "boolean", + "description": "Indicates to continue a previously failed build attempt" + }, + "Help": { + "type": "boolean", + "description": "Shows the help text for this build assembly" + }, + "Host": { + "type": "string", + "description": "Host for execution. Default is 'automatic'", + "enum": [ + "AppVeyor", + "AzurePipelines", + "Bamboo", + "Bitbucket", + "Bitrise", + "GitHubActions", + "GitLab", + "Jenkins", + "Rider", + "SpaceAutomation", + "TeamCity", + "Terminal", + "TravisCI", + "VisualStudio", + "VSCode" + ] + }, + "NoLogo": { + "type": "boolean", + "description": "Disables displaying the NUKE logo" + }, + "NUGETAPIKEY": { + "type": "string", + "default": "Secrets must be entered via 'nuke :secrets [profile]'" + }, + "NuGetApiUrl": { + "type": "string" + }, + "Partition": { + "type": "string", + "description": "Partition to use on CI" + }, + "Plan": { + "type": "boolean", + "description": "Shows the execution plan (HTML)" + }, + "Profile": { + "type": "array", + "description": "Defines the profiles to load", + "items": { + "type": "string" + } + }, + "Root": { + "type": "string", + "description": "Root directory during build execution" + }, + "Skip": { + "type": "array", + "description": "List of targets to be skipped. Empty list skips all dependencies", + "items": { + "type": "string", + "enum": [ + "Clean", + "Compile", + "Pack", + "Print", + "Print_Net_SDK", + "Push", + "Restore" + ] + } + }, + "Solution": { + "type": "string", + "description": "Path to a solution file that is automatically loaded" + }, + "Target": { + "type": "array", + "description": "List of targets to be invoked. Default is '{default_target}'", + "items": { + "type": "string", + "enum": [ + "Clean", + "Compile", + "Pack", + "Print", + "Print_Net_SDK", + "Push", + "Restore" + ] + } + }, + "Verbosity": { + "type": "string", + "description": "Logging verbosity during build execution. Default is 'Normal'", + "enum": [ + "Minimal", + "Normal", + "Quiet", + "Verbose" + ] + } + } + } + } +} diff --git a/.nuke/parameters.json b/.nuke/parameters.json new file mode 100644 index 00000000..970ccaee --- /dev/null +++ b/.nuke/parameters.json @@ -0,0 +1,5 @@ +{ + "$schema": "./build.schema.json", + "Solution": "Src/RCommon.sln", + "Configuration": "Release" +} diff --git a/Build/.editorconfig b/Build/.editorconfig new file mode 100644 index 00000000..31e43dcd --- /dev/null +++ b/Build/.editorconfig @@ -0,0 +1,11 @@ +[*.cs] +dotnet_style_qualification_for_field = false:warning +dotnet_style_qualification_for_property = false:warning +dotnet_style_qualification_for_method = false:warning +dotnet_style_qualification_for_event = false:warning +dotnet_style_require_accessibility_modifiers = never:warning + +csharp_style_expression_bodied_methods = true:silent +csharp_style_expression_bodied_properties = true:warning +csharp_style_expression_bodied_indexers = true:warning +csharp_style_expression_bodied_accessors = true:warning diff --git a/Build/Build.cs b/Build/Build.cs new file mode 100644 index 00000000..389a67c0 --- /dev/null +++ b/Build/Build.cs @@ -0,0 +1,542 @@ +using System; +using System.IO; +using System.Linq; +using GlobExpressions; +using Microsoft.Build.Evaluation; +using Nuke.Common; +using Nuke.Common.CI; +using Nuke.Common.CI.GitHubActions; +using Nuke.Common.Execution; +using Nuke.Common.Git; +using Nuke.Common.IO; +using Nuke.Common.ProjectModel; +using Nuke.Common.Tooling; +using Nuke.Common.Tools.DotNet; +using Nuke.Common.Tools.GitHub; +using Nuke.Common.Tools.GitVersion; +using Nuke.Common.Utilities.Collections; +using Octokit; +using Serilog; +using static Nuke.Common.EnvironmentInfo; +using static Nuke.Common.IO.FileSystemTasks; +using static Nuke.Common.IO.PathConstruction; + +[GitHubActions("ci", + GitHubActionsImage.UbuntuLatest, + InvokedTargets = new[] { nameof(Compile), nameof(Pack), nameof(Push) }, + OnPushIncludePaths = new[] { + "Src/**", + "Build/**" + }, + OnPullRequestBranches = new[] { "main" }, + AutoGenerate = true, + ImportSecrets = new[] {"NUGETAPIKEY"})] +[ShutdownDotNetAfterServerBuild] +class Build : NukeBuild +{ + /// Support plugins are available for: + /// - JetBrains ReSharper https://nuke.build/resharper + /// - JetBrains Rider https://nuke.build/rider + /// - Microsoft VisualStudio https://nuke.build/visualstudio + /// - Microsoft VSCode https://nuke.build/vscode + + public static int Main () => Execute(build => build.Compile, build => build.Pack, build => build.Push); + + [Parameter("Configuration to build - Default is 'Debug' (local) or 'Release' (server)")] + readonly Configuration Configuration = IsLocalBuild ? Configuration.Debug : Configuration.Release; + + [Parameter] readonly bool CI = false; + + [Solution] readonly Solution Solution; + + [GitVersion] readonly GitVersion GitVersion; + + [GitRepository] readonly GitRepository GitRepository; + + GitHubActions GitHubActions => GitHubActions.Instance; + + AbsolutePath Directory_Src => RootDirectory / "Src"; + + AbsolutePath Directory_Build => RootDirectory / "Build"; + + AbsolutePath Directory_NuGet => RootDirectory / "NuGet"; + + [Parameter] string NuGetApiUrl = "https://api.nuget.org/v3/index.json"; + [Parameter][Secret] string NUGETAPIKEY; + + string Copyright = $"Copyright © Jason Webb {DateTime.Now.Year}"; + + protected override void OnBuildInitialized() + { + Log.Information("🚀 Build process started"); + + base.OnBuildInitialized(); + } + + Target Print => _ => _ + .Executes(() => + { + if (GitHubActions != null) + { + Log.Information("Branch = {Branch}", GitHubActions.Ref); + Log.Information("Commit = {Commit}", GitHubActions.Sha); + } + var projects = Solution.GetAllProjects("RCommon*"); + foreach (var project in projects) + { + Log.Information("Project: {0}", project.Path.ToString()); + } + }); + + Target Print_Net_SDK => _ => _ + .DependsOn(Print) + .Executes(() => + { + DotNetTasks.DotNet("--list-sdks"); + }); + + + Target Clean => _ => _ + .DependsOn(Print_Net_SDK) + .Executes(() => + { + Log.Information("Cleaning solution"); + Directory_Src.GlobDirectories("**/bin", "**/obj") + .ForEach(x => x.DeleteDirectory()); + }); + + Target Restore => _ => _ + .DependsOn(Clean) + .Executes(() => + { + Log.Information("Restoring solution"); + DotNetTasks + .DotNetRestore(_ => _ + .SetProjectFile(Solution)); + }); + + Target Compile => _ => _ + .DependsOn(Restore) + .Executes(() => + { + Log.Information("Compiling solution"); + DotNetTasks + .DotNetBuild(_ => _ + .SetProjectFile(Solution) + .SetConfiguration(Configuration) + .EnableNoRestore() + .SetCopyright(Copyright)); + }); + + Target Pack => _ => _ + .DependsOn(Compile) + .Executes(() => + { + Log.Information("Generating NuGet packages for projects in solution"); + int commitNum = 0; + string NuGetVersionCustom = "2.0.0.8"; + + + //if it's not a tagged release - append the commit number to the package version + //tagged commits on main have versions + // - v0.3.0-beta + //other commits have + // - v0.3.0-beta1 + + if (GitVersion != null && Int32.TryParse(GitVersion.CommitsSinceVersionSource, out commitNum)) + { + Log.Information("Setting version....."); + NuGetVersionCustom = commitNum > 0 ? NuGetVersionCustom + $"{commitNum}" : NuGetVersionCustom; + Log.Information("Version #: {0}", NuGetVersionCustom); + } + + Log.Information("Configuration: {0}", Configuration); + Log.Information("Solution: {0}", Solution.FileName); + var projects = Solution.GetAllProjects("RCommon*"); + foreach (var project in projects) + { + Log.Information("Project: {0}", project.Name); + } + //Log.Information("Project: {0}", Solution.GetProject("RCommon.Emailing")); + //var path = projects.FirstOrDefault(x => x.Name == "RCommon.Emailing").Path.ToString(); + DotNetTasks + .DotNetPack(_ => _ + .SetPackageId("RCommon.Emailing") + .SetProject(projects.FirstOrDefault(x => x.Name == "RCommon.Emailing").Path.ToString()) + .SetPackageTags("RCommon emailing email abstractions smtp") + .SetDescription("A cohesive set of infrastructure libraries for dotnet that utilizes abstractions for event handling persistence unit of work mediator distributed messaging event bus CQRS email and more") + .SetConfiguration(Configuration) + .SetCopyright(Copyright) + .SetAuthors("Jason Webb") + .SetPackageIconUrl("https://avatars.githubusercontent.com/u/96881178?s=200&v=4") + .SetRepositoryUrl("https://github.com/RCommon-Team/RCommon") + .SetPackageProjectUrl("https://rcommon.com") + .SetPackageLicenseUrl("https://licenses.nuget.org/Apache-2.0") + .SetVersion(NuGetVersionCustom) + .SetNoDependencies(true) + .SetOutputDirectory(Directory_NuGet) + .EnableNoBuild() + .EnableNoRestore()); + DotNetTasks + .DotNetPack(_ => _ + .SetPackageId("RCommon.SendGrid") + .SetProject(projects.FirstOrDefault(x => x.Name == "RCommon.SendGrid").Path.ToString()) + .SetPackageTags("RCommon email emailing sendgrid") + .SetDescription("A cohesive set of infrastructure libraries for dotnet that utilizes abstractions for event handling persistence unit of work mediator distributed messaging event bus CQRS email and more") + .SetConfiguration(Configuration) + .SetCopyright(Copyright) + .SetAuthors("Jason Webb") + .SetPackageIconUrl("https://avatars.githubusercontent.com/u/96881178?s=200&v=4") + .SetRepositoryUrl("https://github.com/RCommon-Team/RCommon") + .SetPackageProjectUrl("https://rcommon.com") + .SetPackageLicenseUrl("https://licenses.nuget.org/Apache-2.0") + .SetVersion(NuGetVersionCustom) + .SetNoDependencies(true) + .SetOutputDirectory(Directory_NuGet) + .EnableNoBuild() + .EnableNoRestore()); + DotNetTasks + .DotNetPack(_ => _ + .SetPackageId("RCommon.MassTransit") + .SetProject(projects.FirstOrDefault(x => x.Name == "RCommon.MassTransit").Path.ToString()) + .SetPackageTags("RCommon masstransit message bus event bus messaging") + .SetDescription("A cohesive set of infrastructure libraries for dotnet that utilizes abstractions for event handling persistence unit of work mediator distributed messaging event bus CQRS email and more") + .SetConfiguration(Configuration) + .SetCopyright(Copyright) + .SetAuthors("Jason Webb") + .SetPackageIconUrl("https://avatars.githubusercontent.com/u/96881178?s=200&v=4") + .SetRepositoryUrl("https://github.com/RCommon-Team/RCommon") + .SetPackageProjectUrl("https://rcommon.com") + .SetPackageLicenseUrl("https://licenses.nuget.org/Apache-2.0") + .SetVersion(NuGetVersionCustom) + .SetNoDependencies(true) + .SetOutputDirectory(Directory_NuGet) + .EnableNoBuild() + .EnableNoRestore()); + DotNetTasks + .DotNetPack(_ => _ + .SetPackageId("RCommon.Wolverine") + .SetProject(projects.FirstOrDefault(x => x.Name == "RCommon.Wolverine").Path.ToString()) + .SetPackageTags("RCommon Wolverine messaging message bus event bus") + .SetDescription("A cohesive set of infrastructure libraries for dotnet that utilizes abstractions for event handling persistence unit of work mediator distributed messaging event bus CQRS email and more") + .SetConfiguration(Configuration) + .SetCopyright(Copyright) + .SetAuthors("Jason Webb") + .SetPackageIconUrl("https://avatars.githubusercontent.com/u/96881178?s=200&v=4") + .SetRepositoryUrl("https://github.com/RCommon-Team/RCommon") + .SetPackageProjectUrl("https://rcommon.com") + .SetPackageLicenseUrl("https://licenses.nuget.org/Apache-2.0") + .SetVersion(NuGetVersionCustom) + .SetNoDependencies(true) + .SetOutputDirectory(Directory_NuGet) + .EnableNoBuild() + .EnableNoRestore()); + DotNetTasks + .DotNetPack(_ => _ + .SetPackageId("RCommon.Mediator") + .SetProject(projects.FirstOrDefault(x => x.Name == "RCommon.Mediator").Path.ToString()) + .SetPackageTags("RCommon mediator abstraction pubsub mediator pattern") + .SetDescription("A cohesive set of infrastructure libraries for dotnet that utilizes abstractions for event handling persistence unit of work mediator distributed messaging event bus CQRS email and more") + .SetConfiguration(Configuration) + .SetCopyright(Copyright) + .SetAuthors("Jason Webb") + .SetPackageIconUrl("https://avatars.githubusercontent.com/u/96881178?s=200&v=4") + .SetRepositoryUrl("https://github.com/RCommon-Team/RCommon") + .SetPackageProjectUrl("https://rcommon.com") + .SetPackageLicenseUrl("https://licenses.nuget.org/Apache-2.0") + .SetVersion(NuGetVersionCustom) + .SetNoDependencies(true) + .SetOutputDirectory(Directory_NuGet) + .EnableNoBuild() + .EnableNoRestore()); + DotNetTasks + .DotNetPack(_ => _ + .SetPackageId("RCommon.MediatR") + .SetProject(projects.FirstOrDefault(x => x.Name == "RCommon.MediatR").Path.ToString()) + .SetPackageTags("RCommon MediatR mediator implementation pubsub mediator pattern") + .SetDescription("A cohesive set of infrastructure libraries for dotnet that utilizes abstractions for event handling persistence unit of work mediator distributed messaging event bus CQRS email and more") + .SetConfiguration(Configuration) + .SetCopyright(Copyright) + .SetAuthors("Jason Webb") + .SetPackageIconUrl("https://avatars.githubusercontent.com/u/96881178?s=200&v=4") + .SetRepositoryUrl("https://github.com/RCommon-Team/RCommon") + .SetPackageProjectUrl("https://rcommon.com") + .SetPackageLicenseUrl("https://licenses.nuget.org/Apache-2.0") + .SetVersion(NuGetVersionCustom) + .SetNoDependencies(true) + .SetOutputDirectory(Directory_NuGet) + .EnableNoBuild() + .EnableNoRestore()); + DotNetTasks + .DotNetPack(_ => _ + .SetPackageId("RCommon.Dapper") + .SetProject(projects.FirstOrDefault(x => x.Name == "RCommon.Dapper").Path.ToString()) + .SetPackageTags("RCommon dapper dapper repository repository pattern crud dapper extensions") + .SetDescription("A cohesive set of infrastructure libraries for dotnet that utilizes abstractions for event handling persistence unit of work mediator distributed messaging event bus CQRS email and more") + .SetConfiguration(Configuration) + .SetCopyright(Copyright) + .SetAuthors("Jason Webb") + .SetPackageIconUrl("https://avatars.githubusercontent.com/u/96881178?s=200&v=4") + .SetRepositoryUrl("https://github.com/RCommon-Team/RCommon") + .SetPackageProjectUrl("https://rcommon.com") + .SetPackageLicenseUrl("https://licenses.nuget.org/Apache-2.0") + .SetVersion(NuGetVersionCustom) + .SetNoDependencies(true) + .SetOutputDirectory(Directory_NuGet) + .EnableNoBuild() + .EnableNoRestore()); + DotNetTasks + .DotNetPack(_ => _ + .SetPackageId("RCommon.EFCore") + .SetProject(projects.FirstOrDefault(x => x.Name == "RCommon.EFCore").Path.ToString()) + .SetPackageTags("RCommon entity framework efcore repository crud repository pattern") + .SetDescription("A cohesive set of infrastructure libraries for dotnet that utilizes abstractions for event handling persistence unit of work mediator distributed messaging event bus CQRS email and more") + .SetConfiguration(Configuration) + .SetCopyright(Copyright) + .SetAuthors("Jason Webb") + .SetPackageIconUrl("https://avatars.githubusercontent.com/u/96881178?s=200&v=4") + .SetRepositoryUrl("https://github.com/RCommon-Team/RCommon") + .SetPackageProjectUrl("https://rcommon.com") + .SetPackageLicenseUrl("https://licenses.nuget.org/Apache-2.0") + .SetVersion(NuGetVersionCustom) + .SetNoDependencies(true) + .SetOutputDirectory(Directory_NuGet) + .EnableNoBuild() + .EnableNoRestore()); + DotNetTasks + .DotNetPack(_ => _ + .SetPackageId("RCommon.Linq2Db") + .SetProject(projects.FirstOrDefault(x => x.Name == "RCommon.Linq2Db").Path.ToString()) + .SetPackageTags("RCommon linq2db linqtosql linqtodb repository pattern linq2db repository") + .SetDescription("A cohesive set of infrastructure libraries for dotnet that utilizes abstractions for event handling persistence unit of work mediator distributed messaging event bus CQRS email and more") + .SetConfiguration(Configuration) + .SetCopyright(Copyright) + .SetAuthors("Jason Webb") + .SetPackageIconUrl("https://avatars.githubusercontent.com/u/96881178?s=200&v=4") + .SetRepositoryUrl("https://github.com/RCommon-Team/RCommon") + .SetPackageProjectUrl("https://rcommon.com") + .SetPackageLicenseUrl("https://licenses.nuget.org/Apache-2.0") + .SetVersion(NuGetVersionCustom) + .SetNoDependencies(true) + .SetOutputDirectory(Directory_NuGet) + .EnableNoBuild() + .EnableNoRestore()); + DotNetTasks + .DotNetPack(_ => _ + .SetPackageId("RCommon.Persistence") + .SetProject(projects.FirstOrDefault(x => x.Name == "RCommon.Persistence").Path.ToString()) + .SetPackageTags("RCommon persistence abstractions repository pattern crud") + .SetDescription("A cohesive set of infrastructure libraries for dotnet that utilizes abstractions for event handling persistence unit of work mediator distributed messaging event bus CQRS email and more") + .SetConfiguration(Configuration) + .SetCopyright(Copyright) + .SetAuthors("Jason Webb") + .SetPackageIconUrl("https://avatars.githubusercontent.com/u/96881178?s=200&v=4") + .SetRepositoryUrl("https://github.com/RCommon-Team/RCommon") + .SetPackageProjectUrl("https://rcommon.com") + .SetPackageLicenseUrl("https://licenses.nuget.org/Apache-2.0") + .SetVersion(NuGetVersionCustom) + .SetNoDependencies(true) + .SetOutputDirectory(Directory_NuGet) + .EnableNoBuild() + .EnableNoRestore()); + DotNetTasks + .DotNetPack(_ => _ + .SetPackageId("RCommon.ApplicationServices") + .SetProject(projects.FirstOrDefault(x => x.Name == "RCommon.ApplicationServices").Path.ToString()) + .SetPackageTags("RCommon application services CQRS auto web api commands command handlers queries query handlers command bus query bus") + .SetDescription("A cohesive set of infrastructure libraries for dotnet that utilizes abstractions for event handling persistence unit of work mediator distributed messaging event bus CQRS email and more") + .SetConfiguration(Configuration) + .SetCopyright(Copyright) + .SetAuthors("Jason Webb") + .SetPackageIconUrl("https://avatars.githubusercontent.com/u/96881178?s=200&v=4") + .SetRepositoryUrl("https://github.com/RCommon-Team/RCommon") + .SetPackageProjectUrl("https://rcommon.com") + .SetPackageLicenseUrl("https://licenses.nuget.org/Apache-2.0") + .SetVersion(NuGetVersionCustom) + .SetNoDependencies(true) + .SetOutputDirectory(Directory_NuGet) + .EnableNoBuild() + .EnableNoRestore()); + DotNetTasks + .DotNetPack(_ => _ + .SetPackageId("RCommon.Authorization.Web") + .SetProject(projects.FirstOrDefault(x => x.Name == "RCommon.Authorization.Web").Path.ToString()) + .SetPackageTags("RCommon web authorization web security web identity bearer tokens") + .SetDescription("A cohesive set of infrastructure libraries for dotnet that utilizes abstractions for event handling persistence unit of work mediator distributed messaging event bus CQRS email and more") + .SetConfiguration(Configuration) + .SetCopyright(Copyright) + .SetAuthors("Jason Webb") + .SetPackageIconUrl("https://avatars.githubusercontent.com/u/96881178?s=200&v=4") + .SetRepositoryUrl("https://github.com/RCommon-Team/RCommon") + .SetPackageProjectUrl("https://rcommon.com") + .SetPackageLicenseUrl("https://licenses.nuget.org/Apache-2.0") + .SetVersion(NuGetVersionCustom) + .SetNoDependencies(true) + .SetOutputDirectory(Directory_NuGet) + .EnableNoBuild() + .EnableNoRestore()); + DotNetTasks + .DotNetPack(_ => _ + .SetPackageId("RCommon.Core") + .SetProject(projects.FirstOrDefault(x => x.Name == "RCommon.Core").Path.ToString()) + .SetPackageTags("RCommon infrastructure code design patterns design pattern abstractions cloud pattern abstractions persistence event handling") + .SetDescription("A cohesive set of infrastructure libraries for dotnet that utilizes abstractions for event handling persistence unit of work mediator distributed messaging event bus CQRS email and more") + .SetConfiguration(Configuration) + .SetCopyright(Copyright) + .SetAuthors("Jason Webb") + .SetPackageIconUrl("https://avatars.githubusercontent.com/u/96881178?s=200&v=4") + .SetRepositoryUrl("https://github.com/RCommon-Team/RCommon") + .SetPackageProjectUrl("https://rcommon.com") + .SetPackageLicenseUrl("https://licenses.nuget.org/Apache-2.0") + .SetVersion(NuGetVersionCustom) + .SetNoDependencies(true) + .SetOutputDirectory(Directory_NuGet) + .EnableNoBuild() + .EnableNoRestore()); + DotNetTasks + .DotNetPack(_ => _ + .SetPackageId("RCommon.Entities") + .SetProject(projects.FirstOrDefault(x => x.Name == "RCommon.Entities").Path.ToString()) + .SetPackageTags("RCommon business entities domain objects domain model ddd domain events event aware entities entity helpers") + .SetDescription("A cohesive set of infrastructure libraries for dotnet that utilizes abstractions for event handling persistence unit of work mediator distributed messaging event bus CQRS email and more") + .SetConfiguration(Configuration) + .SetCopyright(Copyright) + .SetAuthors("Jason Webb") + .SetPackageIconUrl("https://avatars.githubusercontent.com/u/96881178?s=200&v=4") + .SetRepositoryUrl("https://github.com/RCommon-Team/RCommon") + .SetPackageProjectUrl("https://rcommon.com") + .SetPackageLicenseUrl("https://licenses.nuget.org/Apache-2.0") + .SetVersion(NuGetVersionCustom) + .SetNoDependencies(true) + .SetOutputDirectory(Directory_NuGet) + .EnableNoBuild() + .EnableNoRestore()); + DotNetTasks + .DotNetPack(_ => _ + .SetPackageId("RCommon.Models") + .SetProject(projects.FirstOrDefault(x => x.Name == "RCommon.Models").Path.ToString()) + .SetPackageTags("RCommon model helpers dto dto conversion") + .SetDescription("A cohesive set of infrastructure libraries for dotnet that utilizes abstractions for event handling persistence unit of work mediator distributed messaging event bus CQRS email and more") + .SetConfiguration(Configuration) + .SetCopyright(Copyright) + .SetAuthors("Jason Webb") + .SetPackageIconUrl("https://avatars.githubusercontent.com/u/96881178?s=200&v=4") + .SetRepositoryUrl("https://github.com/RCommon-Team/RCommon") + .SetPackageProjectUrl("https://rcommon.com") + .SetPackageLicenseUrl("https://licenses.nuget.org/Apache-2.0") + .SetVersion(NuGetVersionCustom) + .SetNoDependencies(true) + .SetOutputDirectory(Directory_NuGet) + .EnableNoBuild() + .EnableNoRestore()); + DotNetTasks + .DotNetPack(_ => _ + .SetPackageId("RCommon.Security") + .SetProject(projects.FirstOrDefault(x => x.Name == "RCommon.Security").Path.ToString()) + .SetPackageTags("RCommon security extensions claims identity authorization") + .SetDescription("A cohesive set of infrastructure libraries for dotnet that utilizes abstractions for event handling persistence unit of work mediator distributed messaging event bus CQRS email and more") + .SetConfiguration(Configuration) + .SetCopyright(Copyright) + .SetAuthors("Jason Webb") + .SetPackageIconUrl("https://avatars.githubusercontent.com/u/96881178?s=200&v=4") + .SetRepositoryUrl("https://github.com/RCommon-Team/RCommon") + .SetPackageProjectUrl("https://rcommon.com") + .SetPackageLicenseUrl("https://licenses.nuget.org/Apache-2.0") + .SetVersion(NuGetVersionCustom) + .SetNoDependencies(true) + .SetOutputDirectory(Directory_NuGet) + .EnableNoBuild() + .EnableNoRestore()); + DotNetTasks + .DotNetPack(_ => _ + .SetPackageId("RCommon.Web") + .SetProject(projects.FirstOrDefault(x => x.Name == "RCommon.Web").Path.ToString()) + .SetPackageTags("RCommon web extensions aspnet core") + .SetDescription("A cohesive set of infrastructure libraries for dotnet that utilizes abstractions for event handling persistence unit of work mediator distributed messaging event bus CQRS email and more") + .SetConfiguration(Configuration) + .SetCopyright(Copyright) + .SetAuthors("Jason Webb") + .SetPackageIconUrl("https://avatars.githubusercontent.com/u/96881178?s=200&v=4") + .SetRepositoryUrl("https://github.com/RCommon-Team/RCommon") + .SetPackageProjectUrl("https://rcommon.com") + .SetPackageLicenseUrl("https://licenses.nuget.org/Apache-2.0") + .SetVersion(NuGetVersionCustom) + .SetNoDependencies(true) + .SetOutputDirectory(Directory_NuGet) + .EnableNoBuild() + .EnableNoRestore()); + }); + + + Target Push => _ => _ + .DependsOn(Pack) + .Requires(() => NuGetApiUrl) + .Requires(() => NUGETAPIKEY) + .Requires(() => Configuration.Equals(Configuration.Release)) + .Executes(() => + { + Assert.NotNull(Glob.Files(Directory_NuGet, "*.nupkg", GlobOptions.MatchFullPath)) + .Where(x => !x.EndsWith("symbols.nupkg")) + .ForEach(file => + { + Log.Information("Pushing nuget from path: {0}", Directory_NuGet/file); + DotNetTasks + .DotNetNuGetPush(s => s + .SetTargetPath(Directory_NuGet/file) + .SetSource(NuGetApiUrl) + .SetApiKey(NUGETAPIKEY) + ); + }); + }); + + //Target CreateRelease => _ => _ + // .DependsOn(Pack) + // .Executes(() => + // { + // Logger.Info("Started creating the release"); + // GitHubTasks.GitHubClient = new GitHubClient(new ProductHeaderValue(nameof(NukeBuild))) + // { + // Credentials = new Credentials(GithubRepositoryAuthToken) + // }; + + // var newRelease = new NewRelease(GitVersion.NuGetVersionV2) + // { + // TargetCommitish = GitVersion.Sha, + // Draft = true, + // Name = $"Release version {GitVersion.SemVer}", + // Prerelease = false, + // Body = + // @$"See release notes in [docs](https://[YourSite]/{GitVersion.Major}.{GitVersion.Minor}/)" + // }; + + // var createdRelease = GitHubTasks.GitHubClient.Repository.Release.Create(GitRepository.GetGitHubOwner(), GitRepository.GetGitHubName(), newRelease).Result; + // if (ArtifactsDirectory.GlobDirectories("*").Count > 0) + // { + // Logger.Warn( + // $"Only files on the root of {ArtifactsDirectory} directory will be uploaded as release assets."); + // } + + // ArtifactsDirectory.GlobFiles("*").ForEach(p => UploadReleaseAssetToGithub(createdRelease, p)); + // var _ = GitHubTasks.GitHubClient.Repository.Release + // .Edit(GitRepository.GetGitHubOwner(), GitRepository.GetGitHubName(), createdRelease.Id, new ReleaseUpdate { Draft = false }) + // .Result; + // }); + + //private void UploadReleaseAssetToGithub(Release release, AbsolutePath asset) + //{ + // if (!FileExists(asset)) + // { + // return; + // } + + // Logger.Info($"Started Uploading {Path.GetFileName(asset)} to the release."); + // var releaseAssetUpload = new ReleaseAssetUpload + // { + // ContentType = "application/x-binary", + // FileName = Path.GetFileName(asset), + // RawData = File.OpenRead(asset) + // }; + // var _ = GitHubTasks.GitHubClient.Repository.Release.UploadAsset(release, releaseAssetUpload).Result; + // Logger.Success($"Done Uploading {Path.GetFileName(asset)} to the release."); + //} +} diff --git a/Build/Build.csproj b/Build/Build.csproj new file mode 100644 index 00000000..1bd56474 --- /dev/null +++ b/Build/Build.csproj @@ -0,0 +1,49 @@ + + + + Exe + net8.0 + + CS0649;CS0169;CA1050;CA1822;CA2211;IDE1006 + .. + .. + 1 + false + 16854301-8bc7-4d72-a537-a9491bfca591 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Build/Build.csproj.DotSettings b/Build/Build.csproj.DotSettings new file mode 100644 index 00000000..a778f33d --- /dev/null +++ b/Build/Build.csproj.DotSettings @@ -0,0 +1,27 @@ + + DO_NOT_SHOW + DO_NOT_SHOW + DO_NOT_SHOW + DO_NOT_SHOW + DO_NOT_SHOW + Implicit + Implicit + ExpressionBody + 0 + NEXT_LINE + True + False + 120 + IF_OWNER_IS_SINGLE_LINE + WRAP_IF_LONG + False + <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /> + True + True + True + True + True + True + True + True diff --git a/Build/Configuration.cs b/Build/Configuration.cs new file mode 100644 index 00000000..9c08b1ae --- /dev/null +++ b/Build/Configuration.cs @@ -0,0 +1,16 @@ +using System; +using System.ComponentModel; +using System.Linq; +using Nuke.Common.Tooling; + +[TypeConverter(typeof(TypeConverter))] +public class Configuration : Enumeration +{ + public static Configuration Debug = new Configuration { Value = nameof(Debug) }; + public static Configuration Release = new Configuration { Value = nameof(Release) }; + + public static implicit operator string(Configuration configuration) + { + return configuration.Value; + } +} diff --git a/Build/Directory.Build.props b/Build/Directory.Build.props new file mode 100644 index 00000000..e147d635 --- /dev/null +++ b/Build/Directory.Build.props @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/Build/Directory.Build.targets b/Build/Directory.Build.targets new file mode 100644 index 00000000..25326095 --- /dev/null +++ b/Build/Directory.Build.targets @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/Src/RCommon.ApplicationServices/RCommon.ApplicationServices.csproj b/Src/RCommon.ApplicationServices/RCommon.ApplicationServices.csproj index 017b1211..958c3c3c 100644 --- a/Src/RCommon.ApplicationServices/RCommon.ApplicationServices.csproj +++ b/Src/RCommon.ApplicationServices/RCommon.ApplicationServices.csproj @@ -2,18 +2,6 @@ net6.0;net7.0;net8.0; - true - rcommon-icon.png - - https://github.com/Reactor2Team/RCommon - https://github.com/Reactor2Team/RCommon - A cohesive set of infrastructure libraries for .NET 6, .NET 7, and .NET 8 that utilizes abstractions for persistence, unit of work/transactions, distributed events, distributed transactions, and more. - Jason Webb - RCommon - 2.0.0.8 - GitHub - RCommon, application services, CQRS, auto web api, commands, command handlers, queries, query handlers, command bus, query bus, c#, .NET - Apache-2.0 @@ -21,13 +9,6 @@ - - - True - - - - diff --git a/Src/RCommon.Authorization.Web/RCommon.Authorization.Web.csproj b/Src/RCommon.Authorization.Web/RCommon.Authorization.Web.csproj index ad688630..6a19fbba 100644 --- a/Src/RCommon.Authorization.Web/RCommon.Authorization.Web.csproj +++ b/Src/RCommon.Authorization.Web/RCommon.Authorization.Web.csproj @@ -2,29 +2,8 @@ net6.0;net7.0;net8.0; - 2.0.0.8 - Jason Webb - RCommon - A cohesive set of infrastructure libraries for .NET 6, .NET 7, and .NET 8 that utilizes abstractions for persistence, unit of work/transactions, distributed events, distributed transactions, and more. - - https://github.com/Reactor2Team/RCommon - https://github.com/Reactor2Team/RCommon - rcommon-icon.png - RCommon, web authorization, web security, web identity, bearer tokens, c#, .NET - true - 2.0.0.0 - 2.0.0.0 - - Apache-2.0 - - - True - \ - - - diff --git a/Src/RCommon.Core/RCommon.Core.csproj b/Src/RCommon.Core/RCommon.Core.csproj index 2fbe4965..78ba8c7c 100644 --- a/Src/RCommon.Core/RCommon.Core.csproj +++ b/Src/RCommon.Core/RCommon.Core.csproj @@ -2,20 +2,6 @@ net6.0;net7.0;net8.0; - 2.0.0.8 - Jason Webb - RCommon - A cohesive set of infrastructure libraries for .NET 6, .NET 7, and .NET 8 that utilizes abstractions for persistence, unit of work/transactions, distributed events, distributed transactions, and more. - - https://github.com/Reactor2Team/RCommon - https://github.com/Reactor2Team/RCommon - rcommon-icon.png - RCommon, language extensions, generic factories, abstractions, c#, .NET - true - 2.0.0.0 - 2.0.0.0 - - Apache-2.0 $(MSBuildProjectName.Replace(" ", "_").Replace(".Core", "")) @@ -44,12 +30,5 @@ - - - - True - - - diff --git a/Src/RCommon.Core/rcommon-icon.png b/Src/RCommon.Core/rcommon-icon.png deleted file mode 100644 index a68805cc..00000000 Binary files a/Src/RCommon.Core/rcommon-icon.png and /dev/null differ diff --git a/Src/RCommon.Dapper/RCommon.Dapper.csproj b/Src/RCommon.Dapper/RCommon.Dapper.csproj index f3df0455..da80940f 100644 --- a/Src/RCommon.Dapper/RCommon.Dapper.csproj +++ b/Src/RCommon.Dapper/RCommon.Dapper.csproj @@ -2,20 +2,6 @@ net6.0;net7.0;net8.0; - 2.0.0.8 - Jason Webb - RCommon - A cohesive set of infrastructure libraries for .NET 6, .NET 7, and .NET 8 that utilizes abstractions for persistence, unit of work/transactions, distributed events, distributed transactions, and more. - - https://github.com/Reactor2Team/RCommon - https://github.com/Reactor2Team/RCommon - rcommon-icon.png - RCommon, dapper, dapper repository, repository pattern, crud, dapper extensions, c#, .NET - true - 2.0.0.0 - 2.0.0.0 - - Apache-2.0 @@ -45,13 +31,6 @@ - - - True - - - - diff --git a/Src/RCommon.EfCore/RCommon.EFCore.csproj b/Src/RCommon.EfCore/RCommon.EFCore.csproj index 022aa86b..0098010b 100644 --- a/Src/RCommon.EfCore/RCommon.EFCore.csproj +++ b/Src/RCommon.EfCore/RCommon.EFCore.csproj @@ -3,20 +3,6 @@ enable net6.0;net7.0;net8.0; - 2.0.0.8 - Jason Webb - RCommon - A cohesive set of infrastructure libraries for .NET 6, .NET 7, and .NET 8 that utilizes abstractions for persistence, unit of work/transactions, distributed events, distributed transactions, and more. - - https://github.com/Reactor2Team/RCommon - https://github.com/Reactor2Team/RCommon - rcommon-icon.png - RCommon, entity framework, efcore, repository, crud, repository pattern, c#, .NET - true - 2.0.0.0 - 2.0.0.0 - - Apache-2.0 @@ -45,13 +31,6 @@ - - - True - - - - diff --git a/Src/RCommon.Emailing/RCommon.Emailing.csproj b/Src/RCommon.Emailing/RCommon.Emailing.csproj index 59f50743..8445a5e3 100644 --- a/Src/RCommon.Emailing/RCommon.Emailing.csproj +++ b/Src/RCommon.Emailing/RCommon.Emailing.csproj @@ -3,32 +3,12 @@ net6.0;net7.0;net8.0; enable - Jason Webb - RCommon - A cohesive set of infrastructure libraries for .NET 6, .NET 7, and .NET 8 that utilizes abstractions for persistence, unit of work/transactions, distributed events, distributed transactions, and more. - - https://github.com/Reactor2Team/RCommon - rcommon-icon.png - https://github.com/Reactor2Team/RCommon - RCommon, emailing, email abstractions, smtp - true - GitHub - 2.0.0.8 - - Apache-2.0 - - - True - - - - diff --git a/Src/RCommon.Entities/RCommon.Entities.csproj b/Src/RCommon.Entities/RCommon.Entities.csproj index fb2833a2..cc78e268 100644 --- a/Src/RCommon.Entities/RCommon.Entities.csproj +++ b/Src/RCommon.Entities/RCommon.Entities.csproj @@ -2,34 +2,11 @@ net6.0;net7.0;net8.0; - 2.0.0.8 - Jason Webb - RCommon - A cohesive set of infrastructure libraries for .NET 6, .NET 7, and .NET 8 that utilizes abstractions for persistence, unit of work/transactions, distributed events, distributed transactions, and more. - - https://github.com/Reactor2Team/RCommon - https://github.com/Reactor2Team/RCommon - rcommon-icon.png - RCommon, business entities, domain objects, domain model, ddd, domain events, event aware entities, entity helpers, c#, .NET - true - 2.0.0.0 - 2.0.0.0 - - Apache-2.0 - - - - - True - - - - - + diff --git a/Src/RCommon.Linq2Db/RCommon.Linq2Db.csproj b/Src/RCommon.Linq2Db/RCommon.Linq2Db.csproj index 35445652..c1882fca 100644 --- a/Src/RCommon.Linq2Db/RCommon.Linq2Db.csproj +++ b/Src/RCommon.Linq2Db/RCommon.Linq2Db.csproj @@ -2,31 +2,10 @@ net6.0;net7.0;net8.0; - 2.0.0.8 - Jason Webb - RCommon - A cohesive set of infrastructure libraries for .NET 6, .NET 7, and .NET 8 that utilizes abstractions for persistence, unit of work/transactions, distributed events, distributed transactions, and more. - - https://github.com/Reactor2Team/RCommon - https://github.com/Reactor2Team/RCommon - rcommon-icon.png - RCommon, linq2db, linqtosql, linqtodb, repository pattern, linq2db repository, c#, .NET - true - 2.0.0.0 - 2.0.0.0 - - Apache-2.0 enable enable - - - - True - - - diff --git a/Src/RCommon.MassTransit/RCommon.MassTransit.csproj b/Src/RCommon.MassTransit/RCommon.MassTransit.csproj index dd4a9b2f..14779471 100644 --- a/Src/RCommon.MassTransit/RCommon.MassTransit.csproj +++ b/Src/RCommon.MassTransit/RCommon.MassTransit.csproj @@ -2,31 +2,10 @@ net6.0;net7.0;net8.0; - 2.0.0.8 - Jason Webb - RCommon - A cohesive set of infrastructure libraries for .NET 6, .NET 7, and .NET 8 that utilizes abstractions for persistence, unit of work/transactions, distributed events, distributed transactions, and more. - - https://github.com/Reactor2Team/RCommon - https://github.com/Reactor2Team/RCommon - rcommon-icon.png - RCommon, masstransit, message bus, event bus, messaging, c#, .NET - true - 2.0.0.0 - 2.0.0.0 - - Apache-2.0 enable enable - - - - True - - - diff --git a/Src/RCommon.Mediator/RCommon.Mediator.csproj b/Src/RCommon.Mediator/RCommon.Mediator.csproj index a94dd7e3..f23078aa 100644 --- a/Src/RCommon.Mediator/RCommon.Mediator.csproj +++ b/Src/RCommon.Mediator/RCommon.Mediator.csproj @@ -2,31 +2,10 @@ net6.0;net7.0;net8.0; - 2.0.0.8 - Jason Webb - RCommon - A cohesive set of infrastructure libraries for .NET 6, .NET 7, and .NET 8 that utilizes abstractions for persistence, unit of work/transactions, distributed events, distributed transactions, and more. - - https://github.com/Reactor2Team/RCommon - https://github.com/Reactor2Team/RCommon - rcommon-icon.png - RCommon, language extensions, generic factories, abstractions, c#, .NET - true - 2.0.0.0 - 2.0.0.0 - - Apache-2.0 enable enable - - - - True - - - diff --git a/Src/RCommon.Mediatr/RCommon.MediatR.csproj b/Src/RCommon.Mediatr/RCommon.MediatR.csproj index 1c4257a1..f19e6374 100644 --- a/Src/RCommon.Mediatr/RCommon.MediatR.csproj +++ b/Src/RCommon.Mediatr/RCommon.MediatR.csproj @@ -2,31 +2,10 @@ net6.0;net7.0;net8.0; - 2.0.0.8 - Jason Webb - RCommon - A cohesive set of infrastructure libraries for .NET 6, .NET 7, and .NET 8 that utilizes abstractions for persistence, unit of work/transactions, distributed events, distributed transactions, and more. - - https://github.com/Reactor2Team/RCommon - https://github.com/Reactor2Team/RCommon - rcommon-icon.png - RCommon, language extensions, generic factories, abstractions, c#, .NET - true - 2.0.0.0 - 2.0.0.0 - - Apache-2.0 enable enable - - - - True - - - diff --git a/Src/RCommon.Models/RCommon.Models.csproj b/Src/RCommon.Models/RCommon.Models.csproj index a1088881..3e146d47 100644 --- a/Src/RCommon.Models/RCommon.Models.csproj +++ b/Src/RCommon.Models/RCommon.Models.csproj @@ -2,31 +2,8 @@ net6.0;net7.0;net8.0; - 2.0.0.8 - Jason Webb - RCommon - A cohesive set of infrastructure libraries for .NET 6, .NET 7, and .NET 8 that utilizes abstractions for persistence, unit of work/transactions, distributed events, distributed transactions, and more. - - https://github.com/Reactor2Team/RCommon - https://github.com/Reactor2Team/RCommon - rcommon-icon.png - RCommon, model helpers, dto, dto conversion, c#, .NET - true - 2.0.0.0 - 2.0.0.0 - - Apache-2.0 - - - - - True - - - - - + diff --git a/Src/RCommon.Persistence/RCommon.Persistence.csproj b/Src/RCommon.Persistence/RCommon.Persistence.csproj index 8dfa4b78..1744ad5d 100644 --- a/Src/RCommon.Persistence/RCommon.Persistence.csproj +++ b/Src/RCommon.Persistence/RCommon.Persistence.csproj @@ -2,20 +2,6 @@ net6.0;net7.0;net8.0; - 2.0.0.8 - Jason Webb - RCommon - A cohesive set of infrastructure libraries for .NET 6, .NET 7, and .NET 8 that utilizes abstractions for persistence, unit of work/transactions, distributed events, distributed transactions, and more. - - https://github.com/Reactor2Team/RCommon - https://github.com/Reactor2Team/RCommon - rcommon-icon.png - RCommon, persistence abstractions, repository pattern, crud, c#, .NET - true - 2.0.0.0 - 2.0.0.0 - - Apache-2.0 @@ -23,13 +9,6 @@ - - - True - - - - diff --git a/Src/RCommon.Security/RCommon.Security.csproj b/Src/RCommon.Security/RCommon.Security.csproj index 9c1c7607..f77be10d 100644 --- a/Src/RCommon.Security/RCommon.Security.csproj +++ b/Src/RCommon.Security/RCommon.Security.csproj @@ -2,34 +2,11 @@ net6.0;net7.0;net8.0; - 2.0.0.8 - Jason Webb - RCommon - A cohesive set of infrastructure libraries for .NET 6, .NET 7, and .NET 8 that utilizes abstractions for persistence, unit of work/transactions, distributed events, distributed transactions, and more. - - https://github.com/Reactor2Team/RCommon - https://github.com/Reactor2Team/RCommon - rcommon-icon.png - RCommon, security extensions, claims, identity, authorization, c#, .NET - true - 2.0.0.0 - 2.0.0.0 - - Apache-2.0 - - - - - True - - - - - + diff --git a/Src/RCommon.SendGrid/RCommon.SendGrid.csproj b/Src/RCommon.SendGrid/RCommon.SendGrid.csproj index 2f9fef49..53b8315b 100644 --- a/Src/RCommon.SendGrid/RCommon.SendGrid.csproj +++ b/Src/RCommon.SendGrid/RCommon.SendGrid.csproj @@ -4,19 +4,6 @@ net6.0;net7.0;net8.0; enable enable - Jason Webb - RCommon - A cohesive set of infrastructure libraries for .NET 6, .NET 7, and .NET 8 that utilizes abstractions for persistence, unit of work/transactions, distributed events, distributed transactions, and more. - - https://github.com/Reactor2Team/RCommon - rcommon-icon.png - https://github.com/Reactor2Team/RCommon - RCommon, emailing, sendgrid - true - GitHub - 2.0.0.8 - - Apache-2.0 @@ -28,11 +15,4 @@ - - - True - - - - diff --git a/Src/RCommon.SendGrid/reactor2-icon-darkbg-small.jpg b/Src/RCommon.SendGrid/reactor2-icon-darkbg-small.jpg deleted file mode 100644 index 81f7fe07..00000000 Binary files a/Src/RCommon.SendGrid/reactor2-icon-darkbg-small.jpg and /dev/null differ diff --git a/Src/RCommon.Web/RCommon.Web.csproj b/Src/RCommon.Web/RCommon.Web.csproj index 7fe23404..74b42579 100644 --- a/Src/RCommon.Web/RCommon.Web.csproj +++ b/Src/RCommon.Web/RCommon.Web.csproj @@ -2,30 +2,7 @@ net6.0;net7.0;net8.0; - 2.0.0.8 - Jason Webb - RCommon - A cohesive set of infrastructure libraries for .NET 6, .NET 7, and .NET 8 that utilizes abstractions for persistence, unit of work/transactions, distributed events, distributed transactions, and more. - - https://github.com/Reactor2Team/RCommon - https://github.com/Reactor2Team/RCommon - rcommon-icon.png - RCommon, web extensions, c#, .NET - true - 2.0.0.0 - 2.0.0.0 - - Apache-2.0 - - - - - True - - - - - + diff --git a/Src/RCommon.Wolverine/RCommon.Wolverine.csproj b/Src/RCommon.Wolverine/RCommon.Wolverine.csproj index e01887aa..cb171cec 100644 --- a/Src/RCommon.Wolverine/RCommon.Wolverine.csproj +++ b/Src/RCommon.Wolverine/RCommon.Wolverine.csproj @@ -2,31 +2,10 @@ net6.0;net7.0;net8.0; - 2.0.0.8 - Jason Webb - RCommon - A cohesive set of infrastructure libraries for .NET 6, .NET 7, and .NET 8 that utilizes abstractions for persistence, unit of work/transactions, distributed events, distributed transactions, and more. - - https://github.com/Reactor2Team/RCommon - https://github.com/Reactor2Team/RCommon - rcommon-icon.png - RCommon, Wolverine wrapper, messaging, message bus, event bus, c#, .NET - true - 2.0.0.0 - 2.0.0.0 - - Apache-2.0 enable enable - - - - True - - - diff --git a/Src/RCommon.sln b/Src/RCommon.sln index 7352d80f..aca6eeff 100644 --- a/Src/RCommon.sln +++ b/Src/RCommon.sln @@ -71,6 +71,10 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RCommon.Wolverine", "RCommo EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Event Handling", "Event Handling", "{6D73446A-6E32-4324-B524-E054334B394B}" EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Build", "..\Build\Build.csproj", "{A83FB80E-2B41-403E-9529-FF0FA8E74045}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "_Build", "_Build", "{206A03B9-635F-4811-8519-8B02170B8CB3}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -177,6 +181,8 @@ Global {397769BB-08F3-44DE-9BE6-90A73E0ABB76}.Debug|Any CPU.Build.0 = Debug|Any CPU {397769BB-08F3-44DE-9BE6-90A73E0ABB76}.Release|Any CPU.ActiveCfg = Release|Any CPU {397769BB-08F3-44DE-9BE6-90A73E0ABB76}.Release|Any CPU.Build.0 = Release|Any CPU + {A83FB80E-2B41-403E-9529-FF0FA8E74045}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A83FB80E-2B41-403E-9529-FF0FA8E74045}.Release|Any CPU.ActiveCfg = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -204,6 +210,7 @@ Global {CEDE1A60-3F6C-4F16-AC75-4477A646AD0D} = {EF78B8EE-80FF-45DE-9B82-352953B361A8} {FC484848-D719-4AAD-91B0-EDDC434F946E} = {EF78B8EE-80FF-45DE-9B82-352953B361A8} {397769BB-08F3-44DE-9BE6-90A73E0ABB76} = {6D73446A-6E32-4324-B524-E054334B394B} + {A83FB80E-2B41-403E-9529-FF0FA8E74045} = {206A03B9-635F-4811-8519-8B02170B8CB3} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {0B0CD26D-8067-4667-863E-6B0EE7EDAA42} diff --git a/build.cmd b/build.cmd new file mode 100755 index 00000000..b08cc590 --- /dev/null +++ b/build.cmd @@ -0,0 +1,7 @@ +:; set -eo pipefail +:; SCRIPT_DIR=$(cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd) +:; ${SCRIPT_DIR}/build.sh "$@" +:; exit $? + +@ECHO OFF +powershell -ExecutionPolicy ByPass -NoProfile -File "%~dp0build.ps1" %* diff --git a/build.ps1 b/build.ps1 new file mode 100644 index 00000000..c1d1bb70 --- /dev/null +++ b/build.ps1 @@ -0,0 +1,74 @@ +[CmdletBinding()] +Param( + [Parameter(Position=0,Mandatory=$false,ValueFromRemainingArguments=$true)] + [string[]]$BuildArguments +) + +Write-Output "PowerShell $($PSVersionTable.PSEdition) version $($PSVersionTable.PSVersion)" + +Set-StrictMode -Version 2.0; $ErrorActionPreference = "Stop"; $ConfirmPreference = "None"; trap { Write-Error $_ -ErrorAction Continue; exit 1 } +$PSScriptRoot = Split-Path $MyInvocation.MyCommand.Path -Parent + +########################################################################### +# CONFIGURATION +########################################################################### + +$BuildProjectFile = "$PSScriptRoot\Build\Build.csproj" +$TempDirectory = "$PSScriptRoot\\.nuke\temp" + +$DotNetGlobalFile = "$PSScriptRoot\\global.json" +$DotNetInstallUrl = "https://dot.net/v1/dotnet-install.ps1" +$DotNetChannel = "STS" + +$env:DOTNET_CLI_TELEMETRY_OPTOUT = 1 +$env:DOTNET_NOLOGO = 1 + +########################################################################### +# EXECUTION +########################################################################### + +function ExecSafe([scriptblock] $cmd) { + & $cmd + if ($LASTEXITCODE) { exit $LASTEXITCODE } +} + +# If dotnet CLI is installed globally and it matches requested version, use for execution +if ($null -ne (Get-Command "dotnet" -ErrorAction SilentlyContinue) -and ` + $(dotnet --version) -and $LASTEXITCODE -eq 0) { + $env:DOTNET_EXE = (Get-Command "dotnet").Path +} +else { + # Download install script + $DotNetInstallFile = "$TempDirectory\dotnet-install.ps1" + New-Item -ItemType Directory -Path $TempDirectory -Force | Out-Null + [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 + (New-Object System.Net.WebClient).DownloadFile($DotNetInstallUrl, $DotNetInstallFile) + + # If global.json exists, load expected version + if (Test-Path $DotNetGlobalFile) { + $DotNetGlobal = $(Get-Content $DotNetGlobalFile | Out-String | ConvertFrom-Json) + if ($DotNetGlobal.PSObject.Properties["sdk"] -and $DotNetGlobal.sdk.PSObject.Properties["version"]) { + $DotNetVersion = $DotNetGlobal.sdk.version + } + } + + # Install by channel or version + $DotNetDirectory = "$TempDirectory\dotnet-win" + if (!(Test-Path variable:DotNetVersion)) { + ExecSafe { & powershell $DotNetInstallFile -InstallDir $DotNetDirectory -Channel $DotNetChannel -NoPath } + } else { + ExecSafe { & powershell $DotNetInstallFile -InstallDir $DotNetDirectory -Version $DotNetVersion -NoPath } + } + $env:DOTNET_EXE = "$DotNetDirectory\dotnet.exe" + $env:PATH = "$DotNetDirectory;$env:PATH" +} + +Write-Output "Microsoft (R) .NET SDK version $(& $env:DOTNET_EXE --version)" + +if (Test-Path env:NUKE_ENTERPRISE_TOKEN) { + & $env:DOTNET_EXE nuget remove source "nuke-enterprise" > $null + & $env:DOTNET_EXE nuget add source "https://f.feedz.io/nuke/enterprise/nuget" --name "nuke-enterprise" --username "PAT" --password $env:NUKE_ENTERPRISE_TOKEN > $null +} + +ExecSafe { & $env:DOTNET_EXE build $BuildProjectFile /nodeReuse:false /p:UseSharedCompilation=false -nologo -clp:NoSummary --verbosity quiet } +ExecSafe { & $env:DOTNET_EXE run --project $BuildProjectFile --no-build -- $BuildArguments } diff --git a/build.sh b/build.sh new file mode 100755 index 00000000..259142b1 --- /dev/null +++ b/build.sh @@ -0,0 +1,67 @@ +#!/usr/bin/env bash + +bash --version 2>&1 | head -n 1 + +set -eo pipefail +SCRIPT_DIR=$(cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd) + +########################################################################### +# CONFIGURATION +########################################################################### + +BUILD_PROJECT_FILE="$SCRIPT_DIR/Build/Build.csproj" +TEMP_DIRECTORY="$SCRIPT_DIR//.nuke/temp" + +DOTNET_GLOBAL_FILE="$SCRIPT_DIR//global.json" +DOTNET_INSTALL_URL="https://dot.net/v1/dotnet-install.sh" +DOTNET_CHANNEL="STS" + +export DOTNET_CLI_TELEMETRY_OPTOUT=1 +export DOTNET_NOLOGO=1 + +########################################################################### +# EXECUTION +########################################################################### + +function FirstJsonValue { + perl -nle 'print $1 if m{"'"$1"'": "([^"]+)",?}' <<< "${@:2}" +} + +# If dotnet CLI is installed globally and it matches requested version, use for execution +if [ -x "$(command -v dotnet)" ] && dotnet --version &>/dev/null; then + export DOTNET_EXE="$(command -v dotnet)" +else + # Download install script + DOTNET_INSTALL_FILE="$TEMP_DIRECTORY/dotnet-install.sh" + mkdir -p "$TEMP_DIRECTORY" + curl -Lsfo "$DOTNET_INSTALL_FILE" "$DOTNET_INSTALL_URL" + chmod +x "$DOTNET_INSTALL_FILE" + + # If global.json exists, load expected version + if [[ -f "$DOTNET_GLOBAL_FILE" ]]; then + DOTNET_VERSION=$(FirstJsonValue "version" "$(cat "$DOTNET_GLOBAL_FILE")") + if [[ "$DOTNET_VERSION" == "" ]]; then + unset DOTNET_VERSION + fi + fi + + # Install by channel or version + DOTNET_DIRECTORY="$TEMP_DIRECTORY/dotnet-unix" + if [[ -z ${DOTNET_VERSION+x} ]]; then + "$DOTNET_INSTALL_FILE" --install-dir "$DOTNET_DIRECTORY" --channel "$DOTNET_CHANNEL" --no-path + else + "$DOTNET_INSTALL_FILE" --install-dir "$DOTNET_DIRECTORY" --version "$DOTNET_VERSION" --no-path + fi + export DOTNET_EXE="$DOTNET_DIRECTORY/dotnet" + export PATH="$DOTNET_DIRECTORY:$PATH" +fi + +echo "Microsoft (R) .NET SDK version $("$DOTNET_EXE" --version)" + +if [[ ! -z ${NUKE_ENTERPRISE_TOKEN+x} && "$NUKE_ENTERPRISE_TOKEN" != "" ]]; then + "$DOTNET_EXE" nuget remove source "nuke-enterprise" &>/dev/null || true + "$DOTNET_EXE" nuget add source "https://f.feedz.io/nuke/enterprise/nuget" --name "nuke-enterprise" --username "PAT" --password "$NUKE_ENTERPRISE_TOKEN" --store-password-in-clear-text &>/dev/null || true +fi + +"$DOTNET_EXE" build "$BUILD_PROJECT_FILE" /nodeReuse:false /p:UseSharedCompilation=false -nologo -clp:NoSummary --verbosity quiet +"$DOTNET_EXE" run --project "$BUILD_PROJECT_FILE" --no-build -- "$@"