Skip to content

Commit 491a7d0

Browse files
Modernize repository to match other ImmediatePlatform products
1 parent 7cd4f68 commit 491a7d0

8 files changed

Lines changed: 71 additions & 70 deletions

File tree

.github/workflows/build.yml

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,21 +16,22 @@ jobs:
1616
runs-on: ubuntu-latest
1717

1818
steps:
19-
- uses: actions/checkout@v4
19+
- uses: actions/checkout@v6
2020

2121
- name: Setup .NET
22-
uses: actions/setup-dotnet@v4
22+
uses: actions/setup-dotnet@v5
2323
with:
2424
dotnet-version: |
2525
8.0.x
2626
9.0.x
27+
10.0.x
2728
2829
- name: Restore dependencies
2930
run: dotnet restore
3031
- name: Build
3132
run: dotnet build -c Release --no-restore
3233
- name: Test
33-
run: dotnet test -c Release --no-build --logger GitHubActions
34+
run: dotnet test -c Release --no-build
3435

3536
- name: Upload coverage reports to Codecov with GitHub Action
3637
uses: codecov/codecov-action@v5

.github/workflows/release.yml

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,23 +6,24 @@ on:
66
tags:
77
- '**'
88

9-
permissions:
10-
contents: write
11-
129
jobs:
1310
release:
11+
permissions:
12+
id-token: write # enable GitHub OIDC token issuance for this job
13+
contents: write # enable github releases
1414

1515
runs-on: ubuntu-latest
1616

1717
steps:
18-
- uses: actions/checkout@v4
18+
- uses: actions/checkout@v6
1919

2020
- name: Setup .NET
21-
uses: actions/setup-dotnet@v4
21+
uses: actions/setup-dotnet@v5
2222
with:
2323
dotnet-version: |
2424
8.0.x
2525
9.0.x
26+
10.0.x
2627
2728
- name: Restore dependencies
2829
run: dotnet restore
@@ -31,8 +32,15 @@ jobs:
3132

3233
- name: Package
3334
run: dotnet pack -c Release --no-build --property:PackageOutputPath=../../nupkgs
35+
36+
- name: NuGet login (OIDC → temp API key)
37+
uses: NuGet/login@v1
38+
id: login
39+
with:
40+
user: viceroypenguin
41+
3442
- name: Push to Nuget
35-
run: dotnet nuget push "./nupkgs/*.nupkg" --source "https://api.nuget.org/v3/index.json" --api-key ${{ secrets.NUGETPUBLISHKEY }}
43+
run: dotnet nuget push "./nupkgs/*.nupkg" --source "https://api.nuget.org/v3/index.json" --api-key ${{ steps.login.outputs.NUGET_API_KEY }}
3644

3745
- name: Create Release
3846
uses: ncipollo/release-action@v1

Directory.Build.props

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
<Project>
22
<PropertyGroup>
3-
<LangVersion>latest</LangVersion>
3+
<TargetFrameworks>net8.0;net9.0;net10.0</TargetFrameworks>
4+
<LangVersion>14</LangVersion>
45

56
<Nullable>enable</Nullable>
67
<WarningsAsErrors>$(WarningsAsErrors);nullable;</WarningsAsErrors>
@@ -11,12 +12,12 @@
1112
<EnforceCodeStyleInBuild>true</EnforceCodeStyleInBuild>
1213

1314
<GenerateDocumentationFile>true</GenerateDocumentationFile>
14-
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
1515

1616
<IsPackable>false</IsPackable>
1717
</PropertyGroup>
1818

1919
<PropertyGroup Condition="'$(GITHUB_ACTIONS)' == 'true'">
20+
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
2021
<ContinuousIntegrationBuild>true</ContinuousIntegrationBuild>
2122
<EmbedUntrackedSources>true</EmbedUntrackedSources>
2223
<CollectCoverage>true</CollectCoverage>

Directory.Packages.props

Lines changed: 17 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,10 @@
66
<ItemGroup>
77
<PackageVersion Include="coverlet.collector" Version="6.0.4" />
88
<PackageVersion Include="coverlet.msbuild" Version="6.0.4" />
9-
<PackageVersion Include="DotNet.ReproducibleBuilds" Version="1.2.25" />
10-
<PackageVersion Include="GitHubActionsTestLogger" Version="2.4.1" />
11-
<PackageVersion Include="Immediate.Handlers" Version="2.1.0" />
12-
<PackageVersion Include="MinVer" Version="6.0.0" />
13-
<PackageVersion Include="TUnit.Engine" Version="0.19.86" />
14-
<PackageVersion Include="xunit.v3.assert" Version="2.0.1" />
9+
<PackageVersion Include="DotNet.ReproducibleBuilds" Version="2.0.2" />
10+
<PackageVersion Include="Immediate.Handlers" Version="3.1.0" />
11+
<PackageVersion Include="MinVer" Version="7.0.0" />
12+
<PackageVersion Include="xunit.v3.mtp-v2" Version="3.2.2" />
1513
</ItemGroup>
1614

1715
<ItemGroup Condition="$(TargetFramework) == 'net8.0'">
@@ -22,14 +20,21 @@
2220
</ItemGroup>
2321

2422
<ItemGroup Condition="$(TargetFramework) == 'net9.0'">
25-
<PackageVersion Include="Microsoft.Extensions.Caching.Abstractions" Version="9.0.4" />
26-
<PackageVersion Include="Microsoft.Extensions.Caching.Memory" Version="9.0.4" />
27-
<PackageVersion Include="Microsoft.Extensions.DependencyInjection" Version="9.0.4" />
28-
<PackageVersion Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="9.0.4" />
23+
<PackageVersion Include="Microsoft.Extensions.Caching.Abstractions" Version="9.0.12" />
24+
<PackageVersion Include="Microsoft.Extensions.Caching.Memory" Version="9.0.12" />
25+
<PackageVersion Include="Microsoft.Extensions.DependencyInjection" Version="9.0.12" />
26+
<PackageVersion Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="9.0.12" />
27+
</ItemGroup>
28+
29+
<ItemGroup Condition="$(TargetFramework) == 'net10.0'">
30+
<PackageVersion Include="Microsoft.Extensions.Caching.Abstractions" Version="10.0.2" />
31+
<PackageVersion Include="Microsoft.Extensions.Caching.Memory" Version="10.0.2" />
32+
<PackageVersion Include="Microsoft.Extensions.DependencyInjection" Version="10.0.2" />
33+
<PackageVersion Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="10.0.2" />
2934
</ItemGroup>
3035

3136
<ItemGroup>
32-
<GlobalPackageReference Include="PolySharp" Version="1.15.0" PrivateAssets="All" />
33-
<GlobalPackageReference Include="Meziantou.Analyzer" Version="2.0.197" PrivateAssets="All" />
37+
<GlobalPackageReference Include="Meziantou.Analyzer" Version="2.0.298" PrivateAssets="All" />
38+
<GlobalPackageReference Include="Meziantou.Polyfill" Version="1.0.101" PrivateAssets="All" />
3439
</ItemGroup>
3540
</Project>
Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
<Project Sdk="Microsoft.NET.Sdk">
22

33
<PropertyGroup>
4-
<TargetFrameworks>net8.0;net9.0</TargetFrameworks>
54
<RootNamespace>Immediate.Cache</RootNamespace>
65
</PropertyGroup>
76

@@ -12,8 +11,4 @@
1211
<PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" />
1312
</ItemGroup>
1413

15-
<ItemGroup>
16-
<Using Condition="!$([MSBuild]::IsTargetFrameworkCompatible('$(TargetFramework)', 'net9.0'))" Alias="Lock" Include="System.Object" />
17-
</ItemGroup>
18-
1914
</Project>

src/Immediate.Cache/Immediate.Cache.csproj

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
<Project Sdk="Microsoft.NET.Sdk">
22

33
<PropertyGroup>
4-
<TargetFrameworks>net8.0;net9.0</TargetFrameworks>
54
<IsPackable>true</IsPackable>
65
<IncludeBuildOutput>false</IncludeBuildOutput>
76
</PropertyGroup>

tests/Immediate.Cache.FunctionalTests/ApplicationCacheTests.cs

Lines changed: 28 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,12 @@ public ApplicationCacheTests()
2020
_serviceProvider = services.BuildServiceProvider();
2121
}
2222

23-
[Test]
23+
[Fact]
2424
public async Task GetValueCachesValue()
2525
{
2626
var request = new GetValue.Query(Value: 1);
2727
var cache = _serviceProvider.GetRequiredService<GetValueCache>();
28-
var response = await cache.GetValue(request);
28+
var response = await cache.GetValue(request, TestContext.Current.CancellationToken);
2929

3030
Assert.Equal(1, response.Value);
3131
Assert.True(response.ExecutedHandler);
@@ -34,7 +34,7 @@ public async Task GetValueCachesValue()
3434
Assert.True(memoryCache.TryGetValue($"GetValue(query: {request.Value})", out var _));
3535
}
3636

37-
[Test]
37+
[Fact]
3838
public async Task SetValueCachesValue()
3939
{
4040
var request = new GetValue.Query(Value: 2);
@@ -44,13 +44,13 @@ public async Task SetValueCachesValue()
4444
var memoryCache = _serviceProvider.GetRequiredService<IMemoryCache>();
4545
Assert.True(memoryCache.TryGetValue($"GetValue(query: {request.Value})", out var _));
4646

47-
var response = await cache.GetValue(request);
47+
var response = await cache.GetValue(request, TestContext.Current.CancellationToken);
4848

4949
Assert.Equal(4, response.Value);
5050
Assert.False(response.ExecutedHandler);
5151
}
5252

53-
[Test]
53+
[Fact]
5454
public async Task RemoveValueRemovesValue()
5555
{
5656
var request = new GetValue.Query(Value: 3);
@@ -60,20 +60,20 @@ public async Task RemoveValueRemovesValue()
6060
var memoryCache = _serviceProvider.GetRequiredService<IMemoryCache>();
6161
Assert.True(memoryCache.TryGetValue($"GetValue(query: {request.Value})", out var _));
6262

63-
var response = await cache.GetValue(request);
63+
var response = await cache.GetValue(request, TestContext.Current.CancellationToken);
6464

6565
Assert.Equal(4, response.Value);
6666
Assert.False(response.ExecutedHandler);
6767

6868
cache.RemoveValue(request);
6969

70-
response = await cache.GetValue(request);
70+
response = await cache.GetValue(request, TestContext.Current.CancellationToken);
7171

7272
Assert.Equal(3, response.Value);
7373
Assert.True(response.ExecutedHandler);
7474
}
7575

76-
[Test]
76+
[Fact]
7777
public async Task SimultaneousAccessIsSerialized()
7878
{
7979
var request1 = new DelayGetValue.Query()
@@ -89,8 +89,8 @@ public async Task SimultaneousAccessIsSerialized()
8989
};
9090

9191
var cache = _serviceProvider.GetRequiredService<DelayGetValueCache>();
92-
var response1Task = cache.GetValue(request1);
93-
var response2Task = cache.GetValue(request2);
92+
var response1Task = cache.GetValue(request1, TestContext.Current.CancellationToken);
93+
var response2Task = cache.GetValue(request2, TestContext.Current.CancellationToken);
9494

9595
// both waiting until tcs triggered
9696
Assert.False(response1Task.IsCompleted);
@@ -121,7 +121,7 @@ public async Task SimultaneousAccessIsSerialized()
121121
Assert.Equal(response1.RandomValue, response2.RandomValue);
122122
}
123123

124-
[Test]
124+
[Fact]
125125
public async Task ProperlyUsesCancellationToken()
126126
{
127127
var request = new DelayGetValue.Query()
@@ -150,13 +150,13 @@ public async Task ProperlyUsesCancellationToken()
150150
Name = "Request2",
151151
};
152152

153-
var response = await cache.GetValue(request2);
153+
var response = await cache.GetValue(request2, TestContext.Current.CancellationToken);
154154

155155
Assert.Equal(1, request.TimesExecuted);
156156
Assert.Equal(0, request2.TimesExecuted);
157157
}
158158

159-
[Test]
159+
[Fact]
160160
public async Task CancellingFirstAccessOperatesCorrectly()
161161
{
162162
using var cts1 = new CancellationTokenSource();
@@ -196,7 +196,7 @@ public async Task CancellingFirstAccessOperatesCorrectly()
196196
Assert.True(response2Task.IsCanceled);
197197
}
198198

199-
[Test]
199+
[Fact]
200200
public async Task CancellingSecondAccessOperatesCorrectly()
201201
{
202202
using var cts1 = new CancellationTokenSource();
@@ -236,7 +236,7 @@ public async Task CancellingSecondAccessOperatesCorrectly()
236236
Assert.True(response2Task.IsCanceled);
237237
}
238238

239-
[Test]
239+
[Fact]
240240
public async Task RemovingValueCancelsExistingOperation()
241241
{
242242
var request = new DelayGetValue.Query()
@@ -265,7 +265,7 @@ public async Task RemovingValueCancelsExistingOperation()
265265
Assert.True(response.ExecutedHandler);
266266
}
267267

268-
[Test]
268+
[Fact]
269269
public async Task SettingValueCancelsExistingOperation()
270270
{
271271
var request = new DelayGetValue.Query()
@@ -275,7 +275,7 @@ public async Task SettingValueCancelsExistingOperation()
275275
};
276276

277277
var cache = _serviceProvider.GetRequiredService<DelayGetValueCache>();
278-
var responseTask = cache.GetValue(request, default);
278+
var responseTask = cache.GetValue(request, TestContext.Current.CancellationToken);
279279

280280
await request.WaitForTestToStartExecuting.Task;
281281

@@ -291,7 +291,7 @@ public async Task SettingValueCancelsExistingOperation()
291291
Assert.Equal(1, request.TimesCancelled);
292292
}
293293

294-
[Test]
294+
[Fact]
295295
public async Task ExceptionGetsPropagatedCorrectly()
296296
{
297297
var request = new DelayGetValue.Query()
@@ -302,13 +302,13 @@ public async Task ExceptionGetsPropagatedCorrectly()
302302
};
303303

304304
var cache = _serviceProvider.GetRequiredService<DelayGetValueCache>();
305-
var responseTask = cache.GetValue(request, default);
305+
var responseTask = cache.GetValue(request, TestContext.Current.CancellationToken);
306306

307307
var ex = await Assert.ThrowsAsync<InvalidOperationException>(async () => await responseTask);
308308
Assert.Equal("Test Exception 1", ex.Message);
309309
}
310310

311-
[Test]
311+
[Fact]
312312
public async Task TransformWorksWhenNoValueCachedInitially()
313313
{
314314
var request = new DelayGetValue.Query()
@@ -327,13 +327,13 @@ public async Task TransformWorksWhenNoValueCachedInitially()
327327
Assert.Equal(6, transformedResponse.Value);
328328
Assert.Equal(1, transformation.TimesExecuted);
329329

330-
var cachedResponse = await cache.GetValue(request);
330+
var cachedResponse = await cache.GetValue(request, TestContext.Current.CancellationToken);
331331
Assert.Equal(6, cachedResponse.Value);
332332

333333
Assert.True(cachedResponse.RandomValue == transformedResponse.RandomValue);
334334
}
335335

336-
[Test]
336+
[Fact]
337337
public async Task TransformWorksWhenValueCachedInitially()
338338
{
339339
var request = new DelayGetValue.Query()
@@ -345,7 +345,7 @@ public async Task TransformWorksWhenValueCachedInitially()
345345

346346
var cache = _serviceProvider.GetRequiredService<DelayGetValueCache>();
347347

348-
var cachedResponse = await cache.GetValue(request);
348+
var cachedResponse = await cache.GetValue(request, TestContext.Current.CancellationToken);
349349
Assert.Equal(1, cachedResponse.Value);
350350

351351
var transformation = new DelayGetValueCache.TransformParameters { Adder = 5 };
@@ -355,13 +355,13 @@ public async Task TransformWorksWhenValueCachedInitially()
355355
Assert.Equal(6, transformedResponse.Value);
356356
Assert.Equal(1, transformation.TimesExecuted);
357357

358-
cachedResponse = await cache.GetValue(request);
358+
cachedResponse = await cache.GetValue(request, TestContext.Current.CancellationToken);
359359
Assert.Equal(6, cachedResponse.Value);
360360

361361
Assert.True(cachedResponse.RandomValue == transformedResponse.RandomValue);
362362
}
363363

364-
[Test]
364+
[Fact]
365365
public async Task TransformWorksWhenValueChanges()
366366
{
367367
var request = new DelayGetValue.Query()
@@ -373,7 +373,7 @@ public async Task TransformWorksWhenValueChanges()
373373

374374
var cache = _serviceProvider.GetRequiredService<DelayGetValueCache>();
375375

376-
var cachedResponse = await cache.GetValue(request);
376+
var cachedResponse = await cache.GetValue(request, TestContext.Current.CancellationToken);
377377
Assert.Equal(1, cachedResponse.Value);
378378

379379
var transformation = new DelayGetValueCache.TransformParameters { Adder = 5 };
@@ -387,13 +387,13 @@ public async Task TransformWorksWhenValueChanges()
387387
Assert.Equal(9, transformedResponse.Value);
388388
Assert.Equal(2, transformation.TimesExecuted);
389389

390-
cachedResponse = await cache.GetValue(request);
390+
cachedResponse = await cache.GetValue(request, TestContext.Current.CancellationToken);
391391
Assert.Equal(9, cachedResponse.Value);
392392

393393
Assert.True(cachedResponse.RandomValue == transformedResponse.RandomValue);
394394
}
395395

396-
[Test]
396+
[Fact]
397397
public async Task TransformWorksWhenMultipleSimultaneous()
398398
{
399399
var request = new DelayGetValue.Query()

0 commit comments

Comments
 (0)