Skip to content

Commit

Permalink
Add .Net 8 target (#112)
Browse files Browse the repository at this point in the history
* Add .net8 SDK

* Refactor how DateTimeOffsetConverter is updated

* Add .Net8 target

* Fix DaktelaJsonSerializerContext for .NET8
  • Loading branch information
trejjam authored Nov 15, 2023
1 parent 6831452 commit a6b7de3
Show file tree
Hide file tree
Showing 8 changed files with 70 additions and 33 deletions.
10 changes: 6 additions & 4 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,10 +14,12 @@ jobs:
env:
DOTNET_CLI_TELEMETRY_OPTOUT: 'true'
steps:
- name: Setup .Net 7.0.x
- name: Setup .Net
uses: actions/setup-dotnet@v3
with:
dotnet-version: '7.0.x'
dotnet-version: |
7.0.x
8.0.x
- uses: actions/checkout@v4
- name: Restore
run: dotnet restore --nologo src
Expand All @@ -36,10 +38,10 @@ jobs:
DOTNET_CLI_TELEMETRY_OPTOUT: 'true'
steps:
- uses: actions/checkout@v4
- name: Setup .Net 7.0.x
- name: Setup .Net 8.0.x
uses: actions/setup-dotnet@v3
with:
dotnet-version: '7.0.x'
dotnet-version: '8.0.x'
- name: Restore
run: dotnet restore --nologo src
- name: .Net Format
Expand Down
6 changes: 4 additions & 2 deletions .github/workflows/nightly-release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,12 @@ jobs:
env:
DOTNET_CLI_TELEMETRY_OPTOUT: 'true'
steps:
- name: Setup .Net 7.0.x
- name: Setup .Net
uses: actions/setup-dotnet@v3
with:
dotnet-version: '7.0.x'
dotnet-version: |
7.0.x
8.0.x
- uses: actions/checkout@v4
- name: Fetch all history for all tags and branches
run: git fetch --prune --unshallow
Expand Down
10 changes: 6 additions & 4 deletions .github/workflows/pr-build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,10 +14,12 @@ jobs:
env:
DOTNET_CLI_TELEMETRY_OPTOUT: 'true'
steps:
- name: Setup .Net 7.0.x
- name: Setup .Net
uses: actions/setup-dotnet@v3
with:
dotnet-version: '7.0.x'
dotnet-version: |
7.0.x
8.0.x
- uses: actions/checkout@v4
- name: Restore
run: dotnet restore --nologo src
Expand All @@ -30,10 +32,10 @@ jobs:
DOTNET_CLI_TELEMETRY_OPTOUT: 'true'
steps:
- uses: actions/checkout@v4
- name: Setup .Net 7.0.x
- name: Setup .Net 8.0.x
uses: actions/setup-dotnet@v3
with:
dotnet-version: '7.0.x'
dotnet-version: '8.0.x'
- name: Restore
run: dotnet restore --nologo src
- name: .Net Format
Expand Down
7 changes: 4 additions & 3 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,12 @@ jobs:
env:
DOTNET_CLI_TELEMETRY_OPTOUT: 'true'
steps:
- name: Setup .Net 7.0.x
- name: Setup .Net
uses: actions/setup-dotnet@v3
with:
dotnet-version: '7.0.x'
dotnet-version: |
7.0.x
8.0.x
- uses: actions/checkout@v4
- name: Fetch all history for all tags and branches
run: git fetch --prune --unshallow
Expand Down Expand Up @@ -43,4 +45,3 @@ jobs:
run: dotnet nuget push 'nuget-packages/*.nupkg' --api-key ${{ secrets.GITHUB_TOKEN }} --source github
- name: Push package to Nuget
run: dotnet nuget push 'nuget-packages/*.nupkg' --api-key ${{ secrets.NUGET_API_KEY }} --source https://api.nuget.org/v3/index.json

30 changes: 17 additions & 13 deletions src/Daktela.HttpClient/Api/DaktelaJsonSerializerContext.cs
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
using Daktela.HttpClient.Implementations.JsonConverters;
using System;
using System.Collections.Generic;
using System.Text.Json;
using System.Text.Json.Serialization;

namespace Daktela.HttpClient.Api;
Expand Down Expand Up @@ -61,26 +62,29 @@ public static TimeSpan SerializationDateTimeOffset
set
{
_serializationDateTimeOffset = value;
s_defaultContext = null;
SetConverters();
DateTimeOffsetConverter.SetDateTimeOffset(_serializationDateTimeOffset);
}
}

private static readonly DateTimeOffsetConverter DateTimeOffsetConverter = new(SerializationDateTimeOffset);

static DaktelaJsonSerializerContext()
{
SetConverters();
SetConverters(s_defaultOptions.Converters);
#if NET8_0_OR_GREATER
Default = new DaktelaJsonSerializerContext(new JsonSerializerOptions(s_defaultOptions));
#endif
}

static void SetConverters()
public static void SetConverters(ICollection<JsonConverter> jsonConverters)
{
s_defaultOptions.Converters.Clear();
s_defaultOptions.Converters.Add(new DateTimeOffsetConverter(SerializationDateTimeOffset));
s_defaultOptions.Converters.Add(new TimeSpanConverter());
s_defaultOptions.Converters.Add(new ReadActivityConverter());
s_defaultOptions.Converters.Add(new CustomFieldsConverter());
s_defaultOptions.Converters.Add(new EnumsConverterFactory());
s_defaultOptions.Converters.Add(new EmailActivityOptionsHeadersAddressConverter());
s_defaultOptions.Converters.Add(new ErrorResponseConverter());
s_defaultOptions.Converters.Add(new ErrorFormConverter());
jsonConverters.Add(DateTimeOffsetConverter);
jsonConverters.Add(new TimeSpanConverter());
jsonConverters.Add(new ReadActivityConverter());
jsonConverters.Add(new CustomFieldsConverter());
jsonConverters.Add(new EnumsConverterFactory());
jsonConverters.Add(new EmailActivityOptionsHeadersAddressConverter());
jsonConverters.Add(new ErrorResponseConverter());
jsonConverters.Add(new ErrorFormConverter());
}
}
18 changes: 14 additions & 4 deletions src/Daktela.HttpClient/Daktela.HttpClient.csproj
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFramework>net7.0</TargetFramework>
<LangVersion>11.0</LangVersion>
<TargetFrameworks>net7.0;net8.0</TargetFrameworks>
<LangVersion>12.0</LangVersion>
<Nullable>enable</Nullable>
<PackageLicense>MIT</PackageLicense>
<ProjectName>HttpClient</ProjectName>
Expand All @@ -18,15 +18,25 @@
</PropertyGroup>

<ItemGroup>
<None Include="..\..\README.md" Pack="true" PackagePath="\"/>
<None Include="..\..\README.md" Pack="true" PackagePath="\" />
</ItemGroup>

<ItemGroup>
<PackageReference Include="Microsoft.SourceLink.GitHub" Version="1.1.1" PrivateAssets="All" />
</ItemGroup>

<ItemGroup Condition=" '$(TargetFramework)' == 'net7.0' ">
<PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="7.0.0" />
<PackageReference Include="Microsoft.Extensions.Http" Version="7.0.0" />
<PackageReference Include="Microsoft.Extensions.Options" Version="7.0.1" />
<PackageReference Include="Microsoft.Extensions.Options.DataAnnotations" Version="7.0.0" />
<PackageReference Include="Microsoft.SourceLink.GitHub" Version="1.1.1" PrivateAssets="All"/>
</ItemGroup>

<ItemGroup Condition=" '$(TargetFramework)' == 'net8.0' ">
<PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="8.0.0" />
<PackageReference Include="Microsoft.Extensions.Http" Version="8.0.0" />
<PackageReference Include="Microsoft.Extensions.Options" Version="8.0.0" />
<PackageReference Include="Microsoft.Extensions.Options.DataAnnotations" Version="8.0.0" />
</ItemGroup>

</Project>
Original file line number Diff line number Diff line change
Expand Up @@ -10,13 +10,18 @@ namespace Daktela.HttpClient.Implementations.JsonConverters;

public class DateTimeOffsetConverter : JsonConverter<DateTimeOffset>, IDateTimeOffsetConverter
{
private readonly TimeSpan _dateTimeOffset;
private TimeSpan _dateTimeOffset;

public DateTimeOffsetConverter(TimeSpan dateTimeOffset)
{
_dateTimeOffset = dateTimeOffset;
}

internal void SetDateTimeOffset(TimeSpan dateTimeOffset)
{
_dateTimeOffset = dateTimeOffset;
}

public override DateTimeOffset Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
{
Debug.Assert(typeToConvert == typeof(DateTimeOffset));
Expand Down
15 changes: 13 additions & 2 deletions tests/Daktela.HttpClient.Tests/Daktela.HttpClient.Tests.csproj
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFramework>net7.0</TargetFramework>
<LangVersion>11.0</LangVersion>
<TargetFrameworks>net7.0;net8.0</TargetFrameworks>
<LangVersion>12.0</LangVersion>
<Nullable>enable</Nullable>

<IsPackable>false</IsPackable>
Expand Down Expand Up @@ -41,6 +41,17 @@
<PackageReference Include="Microsoft.Extensions.Logging.Debug" Version="7.0.0" />
</ItemGroup>

<ItemGroup Condition=" '$(TargetFramework)' == 'net8.0' ">
<PackageReference Include="Microsoft.Extensions.Configuration" Version="8.0.0" />
<PackageReference Include="Microsoft.Extensions.Configuration.Binder" Version="8.0.0" />
<PackageReference Include="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="8.0.0" />
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="8.0.0" />
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="8.0.0" />
<PackageReference Include="Microsoft.Extensions.Logging" Version="8.0.0" />
<PackageReference Include="Microsoft.Extensions.Logging.Console" Version="8.0.0" />
<PackageReference Include="Microsoft.Extensions.Logging.Debug" Version="8.0.0" />
</ItemGroup>

<ItemGroup>
<None Update="appsettings.json5" CopyToPublishDirectory="Always" CopyToOutputDirectory="Always" />
<None Update="*.appsettings.json5" CopyToPublishDirectory="Always" CopyToOutputDirectory="Always" />
Expand Down

0 comments on commit a6b7de3

Please sign in to comment.