Skip to content

Commit b8cddec

Browse files
Release 8.1 (#131)
* bugfix: don't publish transaction if it wasn't committed to the database * fix: allow assembly version to be ignored * fix: pass options to tests * chore: switch to vars for NUGET_SOURCE
1 parent 6094c8f commit b8cddec

File tree

6 files changed

+76
-13
lines changed

6 files changed

+76
-13
lines changed

.github/workflows/publish-beta.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ jobs:
4646
- name: Pack Projects into Nuget Packages
4747
run: dotnet pack EntityDb.sln --no-restore -c Release /p:Version='${{ needs.milestone.outputs.version }}-beta.${{ github.event.number }}.${{ github.run_number }}.${{ github.run_attempt }}'
4848
- name: Publish to Beta
49-
run: dotnet nuget push ./**/*.nupkg -s ${{ secrets.NUGET_SOURCE }} -k ${{ secrets.NUGET_API_KEY }}
49+
run: dotnet nuget push ./**/*.nupkg -s ${{ vars.NUGET_SOURCE }} -k ${{ secrets.NUGET_API_KEY }}
5050
- name: Packages & Symbols Artifact
5151
uses: actions/[email protected]
5252
with:

.github/workflows/publish-stable.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ jobs:
5454
- name: Pack Projects into Nuget Packages
5555
run: dotnet pack EntityDb.sln --no-restore -c Release /p:Version=${{ needs.tag.outputs.version }}
5656
- name: Publish to Stable
57-
run: dotnet nuget push ./**/*.nupkg -s ${{ secrets.NUGET_SOURCE }} -k ${{ secrets.NUGET_API_KEY }}
57+
run: dotnet nuget push ./**/*.nupkg -s ${{ vars.NUGET_SOURCE }} -k ${{ secrets.NUGET_API_KEY }}
5858
- name: Packages & Symbols Artifact
5959
uses: actions/[email protected]
6060
with:

src/EntityDb.Common/Entities/EntityRepository.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -57,14 +57,14 @@ public async Task<TEntity> GetSnapshot(Pointer entityPointer, CancellationToken
5757

5858
public async Task<bool> PutTransaction(ITransaction transaction, CancellationToken cancellationToken = default)
5959
{
60-
try
61-
{
62-
return await TransactionRepository.PutTransaction(transaction, cancellationToken);
63-
}
64-
finally
60+
var success = await TransactionRepository.PutTransaction(transaction, cancellationToken);
61+
62+
if (success)
6563
{
6664
Publish(transaction);
6765
}
66+
67+
return success;
6868
}
6969

7070
public override async ValueTask DisposeAsync()

src/EntityDb.Common/TypeResolvers/DefaultPartialTypeResolver.cs

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,29 @@
11
using EntityDb.Common.Envelopes;
2+
using Microsoft.Extensions.Options;
23
using System.Diagnostics.CodeAnalysis;
34
using System.Reflection;
45

56
namespace EntityDb.Common.TypeResolvers;
67

78
internal class DefaultPartialTypeResolver : IPartialTypeResolver
89
{
10+
private readonly IOptions<DefaultPartialTypeResolverOptions> _options;
11+
12+
public DefaultPartialTypeResolver(IOptions<DefaultPartialTypeResolverOptions> options)
13+
{
14+
_options = options;
15+
}
16+
17+
private Assembly AssemblyResolver(AssemblyName assemblyName)
18+
{
19+
if (_options.Value.IgnoreVersion)
20+
{
21+
assemblyName.Version = null;
22+
}
23+
24+
return Assembly.Load(assemblyName);
25+
}
26+
927
public bool TryResolveType(EnvelopeHeaders envelopeHeaders, [NotNullWhen(true)] out Type? resolvedType)
1028
{
1129
if (EnvelopeHelper.NotThisPlatform(envelopeHeaders) ||
@@ -19,7 +37,7 @@ public bool TryResolveType(EnvelopeHeaders envelopeHeaders, [NotNullWhen(true)]
1937
resolvedType = Type.GetType
2038
(
2139
Assembly.CreateQualifiedName(assemblyFullName, typeFullName),
22-
Assembly.Load,
40+
AssemblyResolver,
2341
(assembly, typeName, ignoreCase) => assembly!.GetType(typeName, true, ignoreCase),
2442
true,
2543
false
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
namespace EntityDb.Common.TypeResolvers;
2+
3+
/// <summary>
4+
/// Options for the default partial type resolver
5+
/// </summary>
6+
public class DefaultPartialTypeResolverOptions
7+
{
8+
/// <summary>
9+
/// If you version your assemblies, you may want to ignore the
10+
/// version of the assembly for type resolving purposes.
11+
/// </summary>
12+
public bool IgnoreVersion { get; set; }
13+
}

test/EntityDb.Common.Tests/TypeResolvers/DefaultTypeResolverTests.cs

Lines changed: 37 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
using EntityDb.Common.Envelopes;
22
using EntityDb.Common.TypeResolvers;
3+
using Microsoft.Extensions.Options;
4+
using Moq;
35
using Shouldly;
46
using Xunit;
57

@@ -14,7 +16,13 @@ public void GivenEmptyHeaders_WhenLoadingType_ThenReturnNull()
1416

1517
var headers = new EnvelopeHeaders(new Dictionary<string, string>());
1618

17-
var typeResolver = new DefaultPartialTypeResolver();
19+
var optionsMock = new Mock<IOptions<DefaultPartialTypeResolverOptions>>();
20+
21+
optionsMock
22+
.SetupGet(x => x.Value)
23+
.Returns(new DefaultPartialTypeResolverOptions());
24+
25+
var typeResolver = new DefaultPartialTypeResolver(optionsMock.Object);
1826

1927
// ACT
2028

@@ -37,7 +45,13 @@ public void GivenFullNames_WhenLoadingType_ThenReturnType()
3745

3846
var headers = EnvelopeHelper.GetEnvelopeHeaders(expectedType, true, false);
3947

40-
var typeResolver = new DefaultPartialTypeResolver();
48+
var optionsMock = new Mock<IOptions<DefaultPartialTypeResolverOptions>>();
49+
50+
optionsMock
51+
.SetupGet(x => x.Value)
52+
.Returns(new DefaultPartialTypeResolverOptions());
53+
54+
var typeResolver = new DefaultPartialTypeResolver(optionsMock.Object);
4155

4256
// ACT
4357

@@ -56,7 +70,13 @@ public void GivenMemberInfoName_WhenLoadingType_ThenReturnNull()
5670

5771
var headers = EnvelopeHelper.GetEnvelopeHeaders(typeof(object), false);
5872

59-
var typeResolver = new DefaultPartialTypeResolver();
73+
var optionsMock = new Mock<IOptions<DefaultPartialTypeResolverOptions>>();
74+
75+
optionsMock
76+
.SetupGet(x => x.Value)
77+
.Returns(new DefaultPartialTypeResolverOptions());
78+
79+
var typeResolver = new DefaultPartialTypeResolver(optionsMock.Object);
6080

6181
// ACT
6282

@@ -73,7 +93,13 @@ public void GivenNoTypeInformation_WhenLoadingType_ThenReturnNull()
7393
{
7494
// ARRANGE
7595

76-
var typeResolver = new DefaultPartialTypeResolver();
96+
var optionsMock = new Mock<IOptions<DefaultPartialTypeResolverOptions>>();
97+
98+
optionsMock
99+
.SetupGet(x => x.Value)
100+
.Returns(new DefaultPartialTypeResolverOptions());
101+
102+
var typeResolver = new DefaultPartialTypeResolver(optionsMock.Object);
77103

78104
var envelopeHeaders = new EnvelopeHeaders(new Dictionary<string, string>
79105
{
@@ -95,7 +121,13 @@ public void GivenGarbageTypeInformation_WhenLoadingType_ThenThrow()
95121
{
96122
// ARRANGE
97123

98-
var typeResolver = new DefaultPartialTypeResolver();
124+
var optionsMock = new Mock<IOptions<DefaultPartialTypeResolverOptions>>();
125+
126+
optionsMock
127+
.SetupGet(x => x.Value)
128+
.Returns(new DefaultPartialTypeResolverOptions());
129+
130+
var typeResolver = new DefaultPartialTypeResolver(optionsMock.Object);
99131

100132
var envelopeHeaders = new EnvelopeHeaders(new Dictionary<string, string>
101133
{

0 commit comments

Comments
 (0)