Skip to content

Commit

Permalink
.NET 9 support (#19)
Browse files Browse the repository at this point in the history
- Add .NET 9 support to pipeline
- Upgrade tools project to .NET 9 and .slnx
- Upgrade main project to .slnx
- Add .NET 9 support. Upgrade to latest NUnit.
- Drop Hex class.
- Optimize CompareTo.
- Drop Uuid(byte* bytes) ctor
- Add ctor with separate bytes
- Add AllBitsSet static property
- Add Variant and Version properties
- Mark ToGuidByteLayout as obsolete (use ToGuidLittleEndian instead)
- Mark ToGuidStringLayout as obsolete (use ToGuidBigEndian instead)
- Mark NewTimeBased as obsolete (use CreateVersion7 instead)
- Mark NewMySqlOptimized as obsolete (use CreateVersion7 instead)
- Optimize comparison operators
- Fix typos in comments
- Fix path to compare version tool in github pipeline
- Add additional tests to full cover all code paths
  • Loading branch information
vanbukin authored Nov 14, 2024
1 parent bb22827 commit 32f91e9
Show file tree
Hide file tree
Showing 46 changed files with 1,030 additions and 1,270 deletions.
57 changes: 47 additions & 10 deletions .github/workflows/pull_request.yml
Original file line number Diff line number Diff line change
Expand Up @@ -54,10 +54,10 @@ jobs:
fi
echo "version_with_suffix_dst=${version_with_suffix}" >> $GITHUB_ENV
echo "has_suffix_dst=${has_suffix}" >> $GITHUB_ENV
- name: Setup .NET Core SDK 8.0.101
- name: Setup .NET Core SDK 9.0.100
uses: actions/setup-dotnet@v4
with:
dotnet-version: 8.0.101
dotnet-version: 9.0.100
- name: Checkout source branch back
uses: actions/checkout@v4
with:
Expand All @@ -69,7 +69,7 @@ jobs:
shell: bash
run: |
dotnet publish -c Release ./tools/Dodo.Primitives.Tools.CompareVersions/Dodo.Primitives.Tools.CompareVersions.csproj
source_more_than_target=$(dotnet ./tools/Dodo.Primitives.Tools.CompareVersions/bin/Release/net8.0/publish/Dodo.Primitives.Tools.CompareVersions.dll "${source_version}" "${target_version}")
source_more_than_target=$(dotnet ./tools/Dodo.Primitives.Tools.CompareVersions/bin/Release/net9.0/publish/Dodo.Primitives.Tools.CompareVersions.dll "${source_version}" "${target_version}")
last_exit_code=$(printf "%d" $?)
source_more_than_target=$(printf "%s" $source_more_than_target)
if [ "$last_exit_code" -ne 0 ]
Expand Down Expand Up @@ -107,14 +107,18 @@ jobs:
uses: actions/checkout@v4
with:
ref: ${{ github.sha }}
- name: Setup .NET Core SDK 6.0.418
- name: Setup .NET Core SDK 6.0.428
uses: actions/setup-dotnet@v4
with:
dotnet-version: 6.0.418
- name: Setup .NET Core SDK 8.0.101
dotnet-version: 6.0.428
- name: Setup .NET Core SDK 8.0.404
uses: actions/setup-dotnet@v4
with:
dotnet-version: 8.0.101
dotnet-version: 8.0.404
- name: Setup .NET Core SDK 9.0.100
uses: actions/setup-dotnet@v4
with:
dotnet-version: 9.0.100
- name: Create coverage directory and promote absolute paths to env
shell: bash
run: |
Expand All @@ -136,7 +140,15 @@ jobs:
PATH_NET8_HW="${PATH_TO_COVERAGE_DIRECTORY}/cover_net8hw"
echo "cover_net8_hw=${PATH_NET8_HW}" >> $GITHUB_ENV
echo "cover_net8_hw_merge=${PATH_NET8_HW}.net8.0.info" >> $GITHUB_ENV
echo "cover_net8_hw_merge=${PATH_NET8_HW}.net8.0.json" >> $GITHUB_ENV
PATH_NET9_NOHW="${PATH_TO_COVERAGE_DIRECTORY}/cover_net9nohw"
echo "cover_net9_nohw=${PATH_NET9_NOHW}" >> $GITHUB_ENV
echo "cover_net9_nohw_merge=${PATH_NET9_NOHW}.net9.0.json" >> $GITHUB_ENV
PATH_NET9_HW="${PATH_TO_COVERAGE_DIRECTORY}/cover_net9hw"
echo "cover_net9_hw=${PATH_NET9_HW}" >> $GITHUB_ENV
echo "cover_net9_hw_merge=${PATH_NET9_HW}.net9.0.info" >> $GITHUB_ENV
- name: Run .NET 6 tests without Hardware Intrinsics
shell: bash
run: |
Expand Down Expand Up @@ -184,9 +196,34 @@ jobs:
export CoverletOutput=${{ env.cover_net8_hw }}
export MergeWith=${{ env.cover_net8_nohw_merge }}
dotnet test -c Release ./src/Dodo.Primitives.Tests/Dodo.Primitives.Tests.csproj -f net8.0
- name: Run .NET 9 tests without Hardware Intrinsics
shell: bash
run: |
export COMPlus_EnableHWIntrinsic=0
export DOTNET_EnableHWIntrinsic=0
export COMPlus_ReadyToRun=0
export DOTNET_ReadyToRun=0
export CollectCoverage=true
export CoverletOutputFormat=json
export CoverletOutput=${{ env.cover_net9_nohw }}
export MergeWith=${{ env.cover_net8_hw_merge }}
dotnet test -c Release ./src/Dodo.Primitives.Tests/Dodo.Primitives.Tests.csproj -f net9.0
- name: Run .NET 9 tests with Hardware Intrinsics
shell: bash
run: |
export COMPlus_EnableHWIntrinsic=1
export DOTNET_EnableHWIntrinsic=1
unset COMPlus_ReadyToRun
unset DOTNET_ReadyToRun
export CollectCoverage=true
export CoverletOutputFormat=lcov
export CoverletOutput=${{ env.cover_net9_hw }}
export MergeWith=${{ env.cover_net9_nohw_merge }}
dotnet test -c Release ./src/Dodo.Primitives.Tests/Dodo.Primitives.Tests.csproj -f net9.0
- name: Upload coverage reports to Codecov
uses: codecov/codecov-action@v3
uses: codecov/codecov-action@v4
env:
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
with:
files: ${{ env.cover_net8_hw_merge }}
fail_ci_if_error: true
files: ${{ env.cover_net9_hw_merge }}
55 changes: 46 additions & 9 deletions .github/workflows/push_to_main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -44,14 +44,18 @@ jobs:
uses: actions/checkout@v4
with:
ref: ${{ github.sha }}
- name: Setup .NET Core SDK 6.0.418
- name: Setup .NET Core SDK 6.0.428
uses: actions/setup-dotnet@v4
with:
dotnet-version: 6.0.418
- name: Setup .NET Core SDK 8.0.101
dotnet-version: 6.0.428
- name: Setup .NET Core SDK 8.0.404
uses: actions/setup-dotnet@v4
with:
dotnet-version: 8.0.101
dotnet-version: 8.0.404
- name: Setup .NET Core SDK 9.0.100
uses: actions/setup-dotnet@v4
with:
dotnet-version: 9.0.100
- name: Create coverage directory and promote absolute paths to env
shell: bash
run: |
Expand All @@ -73,7 +77,15 @@ jobs:
PATH_NET8_HW="${PATH_TO_COVERAGE_DIRECTORY}/cover_net8hw"
echo "cover_net8_hw=${PATH_NET8_HW}" >> $GITHUB_ENV
echo "cover_net8_hw_merge=${PATH_NET8_HW}.net8.0.info" >> $GITHUB_ENV
echo "cover_net8_hw_merge=${PATH_NET8_HW}.net8.0.json" >> $GITHUB_ENV
PATH_NET9_NOHW="${PATH_TO_COVERAGE_DIRECTORY}/cover_net9nohw"
echo "cover_net9_nohw=${PATH_NET9_NOHW}" >> $GITHUB_ENV
echo "cover_net9_nohw_merge=${PATH_NET9_NOHW}.net9.0.json" >> $GITHUB_ENV
PATH_NET9_HW="${PATH_TO_COVERAGE_DIRECTORY}/cover_net9hw"
echo "cover_net9_hw=${PATH_NET9_HW}" >> $GITHUB_ENV
echo "cover_net9_hw_merge=${PATH_NET9_HW}.net9.0.info" >> $GITHUB_ENV
- name: Run .NET 6 tests without Hardware Intrinsics
shell: bash
run: |
Expand Down Expand Up @@ -121,12 +133,37 @@ jobs:
export CoverletOutput=${{ env.cover_net8_hw }}
export MergeWith=${{ env.cover_net8_nohw_merge }}
dotnet test -c Release ./src/Dodo.Primitives.Tests/Dodo.Primitives.Tests.csproj -f net8.0
- name: Run .NET 9 tests without Hardware Intrinsics
shell: bash
run: |
export COMPlus_EnableHWIntrinsic=0
export DOTNET_EnableHWIntrinsic=0
export COMPlus_ReadyToRun=0
export DOTNET_ReadyToRun=0
export CollectCoverage=true
export CoverletOutputFormat=json
export CoverletOutput=${{ env.cover_net9_nohw }}
export MergeWith=${{ env.cover_net8_hw_merge }}
dotnet test -c Release ./src/Dodo.Primitives.Tests/Dodo.Primitives.Tests.csproj -f net9.0
- name: Run .NET 9 tests with Hardware Intrinsics
shell: bash
run: |
export COMPlus_EnableHWIntrinsic=1
export DOTNET_EnableHWIntrinsic=1
unset COMPlus_ReadyToRun
unset DOTNET_ReadyToRun
export CollectCoverage=true
export CoverletOutputFormat=lcov
export CoverletOutput=${{ env.cover_net9_hw }}
export MergeWith=${{ env.cover_net9_nohw_merge }}
dotnet test -c Release ./src/Dodo.Primitives.Tests/Dodo.Primitives.Tests.csproj -f net9.0
- name: Upload coverage reports to Codecov
uses: codecov/codecov-action@v3
uses: codecov/codecov-action@v4
env:
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
with:
files: ${{ env.cover_net8_hw_merge }}
fail_ci_if_error: true
files: ${{ env.cover_net9_hw_merge }}
release:
name: Create release
runs-on: ubuntu-latest
Expand Down Expand Up @@ -155,12 +192,12 @@ jobs:
echo "release_version_with_suffix=${version_with_suffix}" >> $GITHUB_ENV
echo "release_has_suffix=${has_suffix}" >> $GITHUB_ENV
- name: Create release
uses: ncipollo/release-action@v1.13.0
uses: ncipollo/release-action@v1.14.0
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tag: ${{ env.release_version_with_suffix }}
release_name: Release ${{ env.release_version_with_suffix }}
name: Release ${{ env.release_version_with_suffix }}
draft: true
prerelease: ${{ env.release_has_suffix }}

81 changes: 46 additions & 35 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,14 +14,18 @@ jobs:
uses: actions/checkout@v4
with:
ref: ${{ github.sha }}
- name: Setup .NET Core SDK 6.0.418
- name: Setup .NET Core SDK 6.0.428
uses: actions/setup-dotnet@v4
with:
dotnet-version: 6.0.418
- name: Setup .NET Core SDK 8.0.101
dotnet-version: 6.0.428
- name: Setup .NET Core SDK 8.0.404
uses: actions/setup-dotnet@v4
with:
dotnet-version: 8.0.101
dotnet-version: 8.0.404
- name: Setup .NET Core SDK 9.0.100
uses: actions/setup-dotnet@v4
with:
dotnet-version: 9.0.100
- name: Create coverage directory and promote absolute paths to env
shell: bash
run: |
Expand All @@ -43,7 +47,15 @@ jobs:
PATH_NET8_HW="${PATH_TO_COVERAGE_DIRECTORY}/cover_net8hw"
echo "cover_net8_hw=${PATH_NET8_HW}" >> $GITHUB_ENV
echo "cover_net8_hw_merge=${PATH_NET8_HW}.net8.0.info" >> $GITHUB_ENV
echo "cover_net8_hw_merge=${PATH_NET8_HW}.net8.0.json" >> $GITHUB_ENV
PATH_NET9_NOHW="${PATH_TO_COVERAGE_DIRECTORY}/cover_net9nohw"
echo "cover_net9_nohw=${PATH_NET9_NOHW}" >> $GITHUB_ENV
echo "cover_net9_nohw_merge=${PATH_NET9_NOHW}.net9.0.json" >> $GITHUB_ENV
PATH_NET9_HW="${PATH_TO_COVERAGE_DIRECTORY}/cover_net9hw"
echo "cover_net9_hw=${PATH_NET9_HW}" >> $GITHUB_ENV
echo "cover_net9_hw_merge=${PATH_NET9_HW}.net9.0.info" >> $GITHUB_ENV
- name: Run .NET 6 tests without Hardware Intrinsics
shell: bash
run: |
Expand Down Expand Up @@ -91,46 +103,45 @@ jobs:
export CoverletOutput=${{ env.cover_net8_hw }}
export MergeWith=${{ env.cover_net8_nohw_merge }}
dotnet test -c Release ./src/Dodo.Primitives.Tests/Dodo.Primitives.Tests.csproj -f net8.0
- name: Run .NET 9 tests without Hardware Intrinsics
shell: bash
run: |
export COMPlus_EnableHWIntrinsic=0
export DOTNET_EnableHWIntrinsic=0
export COMPlus_ReadyToRun=0
export DOTNET_ReadyToRun=0
export CollectCoverage=true
export CoverletOutputFormat=json
export CoverletOutput=${{ env.cover_net9_nohw }}
export MergeWith=${{ env.cover_net8_hw_merge }}
dotnet test -c Release ./src/Dodo.Primitives.Tests/Dodo.Primitives.Tests.csproj -f net9.0
- name: Run .NET 9 tests with Hardware Intrinsics
shell: bash
run: |
export COMPlus_EnableHWIntrinsic=1
export DOTNET_EnableHWIntrinsic=1
unset COMPlus_ReadyToRun
unset DOTNET_ReadyToRun
export CollectCoverage=true
export CoverletOutputFormat=lcov
export CoverletOutput=${{ env.cover_net9_hw }}
export MergeWith=${{ env.cover_net9_nohw_merge }}
dotnet test -c Release ./src/Dodo.Primitives.Tests/Dodo.Primitives.Tests.csproj -f net9.0
- name: Upload coverage reports to Codecov
uses: codecov/codecov-action@v3
uses: codecov/codecov-action@v4
env:
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
with:
files: ${{ env.cover_net8_hw_merge }}
fail_ci_if_error: true
files: ${{ env.cover_net9_hw_merge }}
- name: Build and publish library to NuGet
shell: bash
run: |
dotnet publish ./src/Dodo.Primitives/Dodo.Primitives.csproj -c Release -f net6.0
dotnet publish ./src/Dodo.Primitives/Dodo.Primitives.csproj -c Release -f net8.0
dotnet pack -c Release --no-restore --no-build --output out ./src/Dodo.Primitives/Dodo.Primitives.csproj
dotnet publish ./src/Dodo.Primitives/Dodo.Primitives.csproj -c Release -f net9.0
dotnet pack -c Release --output out ./src/Dodo.Primitives/Dodo.Primitives.csproj
rm ./out/*.symbols.nupkg
PATH_TO_PACKAGE=$(readlink -f ./out/*.nupkg)
dotnet nuget push "$PATH_TO_PACKAGE" --source https://api.nuget.org/v3/index.json --api-key ${{ secrets.NUGET_API_KEY }}
- uses: actions/upload-artifact@v4
with:
name: NuGet package
path: out/
upload-release-assets:
name: Upload release assets
runs-on: ubuntu-latest
needs: build-test-and-publish
steps:
- uses: actions/download-artifact@v4
with:
name: NuGet package
path: out
- name: Get package
shell: bash
run: |
OUT_PACKAGE_NAME="$(ls out/)"
echo "out_package_name=$OUT_PACKAGE_NAME" >> $GITHUB_ENV
- name: Upload release assets
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ github.event.release.upload_url }}
asset_path: ./out/${{ env.out_package_name }}
asset_name: ${{ env.out_package_name }}
asset_content_type: application/zip
2 changes: 1 addition & 1 deletion global.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"sdk": {
"version": "8.0.101",
"version": "9.0.100",
"rollForward": "latestPatch"
}
}
4 changes: 2 additions & 2 deletions src/Directory.Build.props
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<Project>
<PropertyGroup>
<VersionPrefix>3.0.0</VersionPrefix>
<VersionSuffix></VersionSuffix>
<VersionPrefix>4.0.0</VersionPrefix>
<VersionSuffix>beta1</VersionSuffix>
</PropertyGroup>
</Project>
14 changes: 4 additions & 10 deletions src/Dodo.Primitives.Benchmarks/Benchmarks/GeneratorBenchmarks.cs
Original file line number Diff line number Diff line change
Expand Up @@ -13,20 +13,14 @@ namespace Dodo.Primitives.Benchmarks.Benchmarks;
public class GeneratorBenchmarks
{
[Benchmark]
public Guid guid_New()
public Guid guid_CreateVersion7()
{
return Guid.NewGuid();
return Guid.CreateVersion7();
}

[Benchmark]
public Uuid uuid_NewTimeBased()
public Uuid uuid_CreateVersion7()
{
return Uuid.NewTimeBased();
}

[Benchmark]
public Uuid uuid_NewMySqlOptimized()
{
return Uuid.NewMySqlOptimized();
return Uuid.CreateVersion7();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net8.0</TargetFramework>
<TargetFramework>net9.0</TargetFramework>
<ProjectGuid>288ccf26-65fb-4cc8-932b-01f0a458940a</ProjectGuid>
<Nullable>enable</Nullable>
<ImplicitUsings>disable</ImplicitUsings>
Expand All @@ -15,7 +15,7 @@
</ItemGroup>

<ItemGroup>
<PackageReference Include="BenchmarkDotNet" Version="0.13.12"/>
<PackageReference Include="BenchmarkDotNet" Version="0.14.0"/>
</ItemGroup>

</Project>
Loading

0 comments on commit 32f91e9

Please sign in to comment.