Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Chore: Making the public API interface of grate more maintainable beore exposing as a nuget package #437

Merged
merged 2 commits into from
Feb 12, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 3 additions & 2 deletions Directory.Packages.props
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
<!--
.net sdk
-->
<PackageVersion Include="Microsoft.CodeAnalysis.NetAnalyzers" Version="8.0.0" />
<PackageVersion Include="Microsoft.Extensions.Logging.Console" Version="8.0.0" />
<PackageVersion Include="Microsoft.Extensions.DependencyInjection" Version="8.0.0" />
<PackageVersion Include="Microsoft.Extensions.Hosting" Version="8.0.0" />
Expand All @@ -29,6 +30,6 @@
<PackageVersion Include="Testcontainers.Oracle" Version="3.7.0" />
<PackageVersion Include="Testcontainers.MsSql" Version="3.7.0" />
<PackageVersion Include="Xunit.DependencyInjection" Version="8.9.1" />
<PackageVersion Include="Xunit.DependencyInjection.Logging" Version="8.1.0" />
<PackageVersion Include="Xunit.DependencyInjection.Logging" Version="8.1.0" />
</ItemGroup>
</Project>
</Project>
46 changes: 43 additions & 3 deletions src/grate.core/Configuration/ApplicationInfo.cs
Original file line number Diff line number Diff line change
@@ -1,7 +1,47 @@
namespace grate.Configuration;
using System.Globalization;
using System.Reflection;

public static class ApplicationInfo
namespace grate.Configuration;

internal static class ApplicationInfo
{
public static string Name => "grate";
public static string Version => typeof(ApplicationInfo).Assembly.GetName().Version?.ToString() ?? "0.0.0.1";
public static string Version => BuildInfo().version;
public static DateTime BuildDate => BuildInfo().buildDate;

private static (string version, DateTime buildDate) BuildInfo()
{
string version = "0.0.0.1";
DateTime buildDate = DateTime.MinValue;

var assembly = typeof(ApplicationInfo).Assembly;

// The version numbers can look a bit different if the SourceRevisionId is already set before building (e.g. in build servers)
const string buildVersionMetadataPrefix = "+build";
const string buildVersionMetadataPrefix2 = ".build";


var attribute = assembly.GetCustomAttribute<AssemblyInformationalVersionAttribute>();
if (attribute?.InformationalVersion != null)
{
var informationalVersion = attribute.InformationalVersion;

var index = informationalVersion.IndexOf(buildVersionMetadataPrefix);
if (index < 0)
{
index = informationalVersion.IndexOf(buildVersionMetadataPrefix2);
}

if (index > 0)
{
var dateString = informationalVersion[(index + buildVersionMetadataPrefix.Length)..];
DateTime.TryParseExact(dateString, "O", CultureInfo.InvariantCulture, DateTimeStyles.None, out buildDate);

version = informationalVersion[..index];
}
}

return (version, buildDate);
}

}
2 changes: 1 addition & 1 deletion src/grate.core/Configuration/FoldersConfiguration.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@

namespace grate.Configuration;

public class FoldersConfiguration : Dictionary<string, MigrationsFolder?>, IFoldersConfiguration
internal class FoldersConfiguration : Dictionary<string, MigrationsFolder?>, IFoldersConfiguration
{
public FoldersConfiguration(IEnumerable<MigrationsFolder> folders) :
base(folders.ToDictionary(folder => folder.Name, folder => (MigrationsFolder?)folder))
Expand Down
23 changes: 2 additions & 21 deletions src/grate.core/Configuration/GrateConfiguration.cs
Original file line number Diff line number Diff line change
Expand Up @@ -11,30 +11,11 @@ namespace grate.Configuration;
public record GrateConfiguration
{
/// <summary>
/// Service collection to use for dependency injection.
/// </summary>
public IServiceCollection? ServiceCollection { get; init; }

/// <summary>
/// Set of predefine folder name to use for the migration.
/// Set of predefined folder names to use for the migration.
/// </summary>

public IFoldersConfiguration? Folders { get; init; } = FoldersConfiguration.Default();

private string? _databaseType;

/// <summary>
/// Database type to use.
/// </summary>
public string? DatabaseType
{
get => _databaseType;
set
{
_databaseType = value?.ToLowerInvariant();
}
}


/// <summary>
/// The folder used by grate to find the scripts. The subfolders must follow the naming convention of grate. See grate default folder structure for more information.
/// </summary>
Expand Down
26 changes: 26 additions & 0 deletions src/grate.core/Configuration/GrateConfigurationBuilder.Factory.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
namespace grate.Configuration;

public partial class GrateConfigurationBuilder
{

/// <summary>
/// Create the grate configuration builder from an existing service collection and grate configuration.
/// </summary>
/// <param name="grateConfiguration">GrateConfiguration</param>
/// <returns>GrateConfigurationBuilder</returns>
public static GrateConfigurationBuilder Create(GrateConfiguration grateConfiguration)
{
return new GrateConfigurationBuilder(grateConfiguration);
}

/// <summary>
/// Create the default grate configuration builder with existing service collection.
/// </summary>
/// <returns>GrateConfigurationBuilder</returns>
public static GrateConfigurationBuilder Create()
{
return new GrateConfigurationBuilder(GrateConfiguration.Default with { NonInteractive = true });
}

}

Loading
Loading