Skip to content

Commit

Permalink
Epic: Upgrade to .NET 9
Browse files Browse the repository at this point in the history
  • Loading branch information
foxminchan committed Nov 24, 2024
1 parent a5606fa commit 8d071d1
Show file tree
Hide file tree
Showing 313 changed files with 4,631 additions and 8,177 deletions.
21 changes: 17 additions & 4 deletions .config/dotnet-tools.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,18 +4,31 @@
"tools": {
"aspirate": {
"version": "8.0.7",
"commands": ["aspirate"],
"commands": [
"aspirate"
],
"rollForward": false
},
"dotnet-reportgenerator-globaltool": {
"version": "5.3.9",
"commands": ["reportgenerator"],
"commands": [
"reportgenerator"
],
"rollForward": false
},
"husky": {
"version": "0.7.1",
"commands": ["husky"],
"commands": [
"husky"
],
"rollForward": false
},
"csharpier": {
"version": "0.30.2",
"commands": [
"dotnet-csharpier"
],
"rollForward": false
}
}
}
}
4 changes: 4 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,10 @@
##
## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore

# JetBrains Rider

.idea/

# Libs

dist/
Expand Down
28 changes: 0 additions & 28 deletions BookWorm.sln
Original file line number Diff line number Diff line change
Expand Up @@ -44,20 +44,12 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BookWorm.Core", "src\BookWo
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BookWorm.Basket.UnitTests", "tests\BookWorm.Basket.UnitTests\BookWorm.Basket.UnitTests.csproj", "{CC555BD5-F8F3-4D19-93D2-65CE571BCCA5}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BookWorm.Basket.IntegrationTests", "tests\BookWorm.Basket.IntegrationTests\BookWorm.Basket.IntegrationTests.csproj", "{AB036927-EF20-4FF1-AD27-5CF9FA00B99C}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BookWorm.Catalog.UnitTests", "tests\BookWorm.Catalog.UnitTests\BookWorm.Catalog.UnitTests.csproj", "{CDCCDF68-F4D5-43E2-9DCA-BBA51474253D}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BookWorm.Ordering.UnitTests", "tests\BookWorm.Ordering.UnitTests\BookWorm.Ordering.UnitTests.csproj", "{BCE1C1F7-7640-4DE0-B637-62F2D978D9ED}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BookWorm.Rating.UnitTests", "tests\BookWorm.Rating.UnitTests\BookWorm.Rating.UnitTests.csproj", "{7ED9C7E4-9EA2-4B94-82AD-FF23E35E3A57}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BookWorm.Catalog.IntegrationTests", "tests\BookWorm.Catalog.IntegrationTests\BookWorm.Catalog.IntegrationTests.csproj", "{1E2C8C9F-4527-4D3E-8485-3061C3CDF96C}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BookWorm.Ordering.IntegrationTests", "tests\BookWorm.Ordering.IntegrationTests\BookWorm.Ordering.IntegrationTests.csproj", "{0628F576-C5BC-4075-B4E4-A1550346B1FE}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BookWorm.Rating.IntegrationTests", "tests\BookWorm.Rating.IntegrationTests\BookWorm.Rating.IntegrationTests.csproj", "{30BF0E11-5721-4817-9DF6-A5FFC9829D27}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Notification", "Notification", "{8AFA71A3-11DC-42A3-B5C4-94B42E8EB4F8}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BookWorm.Notification", "src\BookWorm.Notification\BookWorm.Notification.csproj", "{CFDA50FF-1E1B-4E04-AEE6-02C8163992B2}"
Expand Down Expand Up @@ -116,10 +108,6 @@ Global
{CC555BD5-F8F3-4D19-93D2-65CE571BCCA5}.Debug|Any CPU.Build.0 = Debug|Any CPU
{CC555BD5-F8F3-4D19-93D2-65CE571BCCA5}.Release|Any CPU.ActiveCfg = Release|Any CPU
{CC555BD5-F8F3-4D19-93D2-65CE571BCCA5}.Release|Any CPU.Build.0 = Release|Any CPU
{AB036927-EF20-4FF1-AD27-5CF9FA00B99C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{AB036927-EF20-4FF1-AD27-5CF9FA00B99C}.Debug|Any CPU.Build.0 = Debug|Any CPU
{AB036927-EF20-4FF1-AD27-5CF9FA00B99C}.Release|Any CPU.ActiveCfg = Release|Any CPU
{AB036927-EF20-4FF1-AD27-5CF9FA00B99C}.Release|Any CPU.Build.0 = Release|Any CPU
{CDCCDF68-F4D5-43E2-9DCA-BBA51474253D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{CDCCDF68-F4D5-43E2-9DCA-BBA51474253D}.Debug|Any CPU.Build.0 = Debug|Any CPU
{CDCCDF68-F4D5-43E2-9DCA-BBA51474253D}.Release|Any CPU.ActiveCfg = Release|Any CPU
Expand All @@ -132,18 +120,6 @@ Global
{7ED9C7E4-9EA2-4B94-82AD-FF23E35E3A57}.Debug|Any CPU.Build.0 = Debug|Any CPU
{7ED9C7E4-9EA2-4B94-82AD-FF23E35E3A57}.Release|Any CPU.ActiveCfg = Release|Any CPU
{7ED9C7E4-9EA2-4B94-82AD-FF23E35E3A57}.Release|Any CPU.Build.0 = Release|Any CPU
{1E2C8C9F-4527-4D3E-8485-3061C3CDF96C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{1E2C8C9F-4527-4D3E-8485-3061C3CDF96C}.Debug|Any CPU.Build.0 = Debug|Any CPU
{1E2C8C9F-4527-4D3E-8485-3061C3CDF96C}.Release|Any CPU.ActiveCfg = Release|Any CPU
{1E2C8C9F-4527-4D3E-8485-3061C3CDF96C}.Release|Any CPU.Build.0 = Release|Any CPU
{0628F576-C5BC-4075-B4E4-A1550346B1FE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{0628F576-C5BC-4075-B4E4-A1550346B1FE}.Debug|Any CPU.Build.0 = Debug|Any CPU
{0628F576-C5BC-4075-B4E4-A1550346B1FE}.Release|Any CPU.ActiveCfg = Release|Any CPU
{0628F576-C5BC-4075-B4E4-A1550346B1FE}.Release|Any CPU.Build.0 = Release|Any CPU
{30BF0E11-5721-4817-9DF6-A5FFC9829D27}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{30BF0E11-5721-4817-9DF6-A5FFC9829D27}.Debug|Any CPU.Build.0 = Debug|Any CPU
{30BF0E11-5721-4817-9DF6-A5FFC9829D27}.Release|Any CPU.ActiveCfg = Release|Any CPU
{30BF0E11-5721-4817-9DF6-A5FFC9829D27}.Release|Any CPU.Build.0 = Release|Any CPU
{CFDA50FF-1E1B-4E04-AEE6-02C8163992B2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{CFDA50FF-1E1B-4E04-AEE6-02C8163992B2}.Debug|Any CPU.Build.0 = Debug|Any CPU
{CFDA50FF-1E1B-4E04-AEE6-02C8163992B2}.Release|Any CPU.ActiveCfg = Release|Any CPU
Expand Down Expand Up @@ -187,13 +163,9 @@ Global
{C108BCF7-3CFB-48F8-AB7E-5B4A0201C946} = {659FC2E9-B081-445A-8B49-3FDCE681BB8E}
{3C3989D7-C713-47CB-9CCC-E656E488DDBD} = {5E13A8D9-B0C4-4388-A99D-AEF14B63CA8C}
{CC555BD5-F8F3-4D19-93D2-65CE571BCCA5} = {84EF1604-03F3-4AE4-A216-71CE402C5C2E}
{AB036927-EF20-4FF1-AD27-5CF9FA00B99C} = {84EF1604-03F3-4AE4-A216-71CE402C5C2E}
{CDCCDF68-F4D5-43E2-9DCA-BBA51474253D} = {FB7C39D0-C46D-451D-AC93-E8D124695E1F}
{BCE1C1F7-7640-4DE0-B637-62F2D978D9ED} = {05D7159D-A792-410B-ABB3-F36B59B6E9E2}
{7ED9C7E4-9EA2-4B94-82AD-FF23E35E3A57} = {C108BCF7-3CFB-48F8-AB7E-5B4A0201C946}
{1E2C8C9F-4527-4D3E-8485-3061C3CDF96C} = {FB7C39D0-C46D-451D-AC93-E8D124695E1F}
{0628F576-C5BC-4075-B4E4-A1550346B1FE} = {05D7159D-A792-410B-ABB3-F36B59B6E9E2}
{30BF0E11-5721-4817-9DF6-A5FFC9829D27} = {C108BCF7-3CFB-48F8-AB7E-5B4A0201C946}
{8AFA71A3-11DC-42A3-B5C4-94B42E8EB4F8} = {659FC2E9-B081-445A-8B49-3FDCE681BB8E}
{CFDA50FF-1E1B-4E04-AEE6-02C8163992B2} = {8AFA71A3-11DC-42A3-B5C4-94B42E8EB4F8}
{3BFD59BB-A161-496C-9AD6-F2CC87047EFB} = {5E13A8D9-B0C4-4388-A99D-AEF14B63CA8C}
Expand Down
2 changes: 1 addition & 1 deletion Directory.Build.props
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<Project>
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<TargetFramework>net9.0</TargetFramework>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
<InvariantGlobalization>false</InvariantGlobalization>
Expand Down
52 changes: 21 additions & 31 deletions Directory.Packages.props
Original file line number Diff line number Diff line change
Expand Up @@ -2,17 +2,16 @@
<PropertyGroup>
<ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally>
<CentralPackageTransitivePinningEnabled>true</CentralPackageTransitivePinningEnabled>
<AspireVersion>8.2.0</AspireVersion>
<AspirantVersion>0.0.4</AspirantVersion>
<MicrosoftExtensionsVersion>8.9.1</MicrosoftExtensionsVersion>
<AspnetVersion>8.0.8</AspnetVersion>
<EfCoreVersion>8.0.8</EfCoreVersion>
<AspireVersion>9.0.0</AspireVersion>
<MicrosoftExtensionsVersion>9.0.0</MicrosoftExtensionsVersion>
<AspnetVersion>9.0.0</AspnetVersion>
<EfCoreVersion>9.0.0</EfCoreVersion>
<XabarilVersion>8.0.1</XabarilVersion>
<ApiVersioningVersion>8.1.0</ApiVersioningVersion>
<PollyVersion>8.4.1</PollyVersion>
<AspireUnstablePackagesVersion>8.2.0-preview.1.24428.5</AspireUnstablePackagesVersion>
<GrpcVersion>2.65.0</GrpcVersion>
<MassTransitVersion>8.2.5</MassTransitVersion>
<PollyVersion>8.5.0</PollyVersion>
<AspireUnstablePackagesVersion>9.0.0-preview.5.24551.3</AspireUnstablePackagesVersion>
<GrpcVersion>2.67.0</GrpcVersion>
<MassTransitVersion>8.3.2</MassTransitVersion>
</PropertyGroup>
<ItemGroup>
<!-- Aspire -->
Expand All @@ -30,10 +29,6 @@
<PackageVersion Include="Microsoft.Extensions.Http.Resilience" Version="$(MicrosoftExtensionsVersion)" />
<PackageVersion Include="Microsoft.Extensions.ServiceDiscovery" Version="$(AspireVersion)" />
<PackageVersion Include="Microsoft.Extensions.ServiceDiscovery.Yarp" Version="$(AspireVersion)" />
<!-- Aspirant -->
<PackageVersion Include="Aspirant.Hosting" Version="$(AspirantVersion)" />
<PackageVersion Include="Aspirant.Hosting.Testing" Version="$(AspirantVersion)" />
<PackageVersion Include="Aspirant.Hosting.Testing.xunit" Version="$(AspirantVersion)" />
<!-- ASP.NET Core -->
<PackageVersion Include="Asp.Versioning.Http.Client" Version="$(ApiVersioningVersion)" />
<PackageVersion Include="Asp.Versioning.Mvc" Version="$(ApiVersioningVersion)" />
Expand All @@ -49,41 +44,37 @@
<!-- Entity Framework Core -->
<PackageVersion Include="Pgvector.EntityFrameworkCore" Version="0.2.1" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.Tools" Version="$(EfCoreVersion)" />
<PackageVersion Include="EFCore.NamingConventions" Version="8.0.3" />
<PackageVersion Include="EntityFrameworkCore.Exceptions.Common" Version="8.1.3" />
<PackageVersion Include="EntityFrameworkCore.Exceptions.PostgreSQL" Version="8.1.3" />
<!-- Semantic Kernel -->
<PackageVersion Include="Microsoft.SemanticKernel" Version="1.20.0" />
<!-- Polly -->
<PackageVersion Include="Polly" Version="$(PollyVersion)" />
<PackageVersion Include="Polly.Extensions" Version="$(PollyVersion)" />
<!-- Ardalis -->
<PackageVersion Include="Ardalis.GuardClauses" Version="4.6.0" />
<PackageVersion Include="Ardalis.Result.AspNetCore" Version="10.0.0" />
<PackageVersion Include="Ardalis.GuardClauses" Version="5.0.0" />
<PackageVersion Include="Ardalis.Result.AspNetCore" Version="10.1.0" />
<PackageVersion Include="Ardalis.Specification" Version="8.0.0" />
<PackageVersion Include="Ardalis.Specification.EntityFrameworkCore" Version="8.0.0" />
<!-- OpenTelemetry -->
<PackageVersion Include="OpenTelemetry.Exporter.OpenTelemetryProtocol" Version="1.9.0" />
<PackageVersion Include="OpenTelemetry.Extensions.Hosting" Version="1.9.0" />
<PackageVersion Include="OpenTelemetry.Exporter.OpenTelemetryProtocol" Version="1.10.0" />
<PackageVersion Include="OpenTelemetry.Extensions.Hosting" Version="1.10.0" />
<PackageVersion Include="OpenTelemetry.Instrumentation.AspNetCore" Version="1.9.0" />
<PackageVersion Include="OpenTelemetry.Instrumentation.Http" Version="1.9.0" />
<PackageVersion Include="OpenTelemetry.Instrumentation.Runtime" Version="1.9.0" />
<PackageVersion Include="OpenTelemetry.Instrumentation.GrpcNetClient" Version="1.9.0-beta.1" />
<!-- Dunde -->
<PackageVersion Include="Duende.BFF.Yarp" Version="2.2.0" />
<PackageVersion Include="Duende.IdentityServer.AspNetIdentity" Version="7.0.6" />
<PackageVersion Include="Duende.IdentityServer.AspNetIdentity" Version="7.0.8" />
<!-- Xabaril -->
<PackageVersion Include="AspNetCore.HealthChecks.UI.Client" Version="$(XabarilVersion)" />
<!-- Testing -->
<PackageVersion Include="xunit" Version="2.9.0" />
<PackageVersion Include="xunit" Version="2.9.2" />
<PackageVersion Include="xunit.runner.visualstudio" Version="2.8.2" />
<PackageVersion Include="Xunit.Combinatorial" Version="1.6.24" />
<PackageVersion Include="coverlet.collector" Version="6.0.2" />
<PackageVersion Include="Microsoft.NET.Test.Sdk" Version="17.11.1" />
<PackageVersion Include="Microsoft.NET.Test.Sdk" Version="17.12.0" />
<PackageVersion Include="Moq" Version="4.20.72" />
<PackageVersion Include="FluentAssertions" Version="7.0.0-alpha.4" />
<PackageVersion Include="ReportGenerator" Version="5.3.9" />
<PackageVersion Include="WireMock.Net.Aspire" Version="1.6.3" />
<PackageVersion Include="ReportGenerator" Version="5.4.1" />
<!-- Grpc -->
<PackageVersion Include="Grpc.AspNetCore" Version="$(GrpcVersion)" />
<PackageVersion Include="Grpc.AspNetCore.Server.ClientFactory" Version="$(GrpcVersion)" />
Expand All @@ -94,15 +85,14 @@
<PackageVersion Include="MassTransit.MongoDb" Version="$(MassTransitVersion)" />
<PackageVersion Include="MassTransit.EntityFrameworkCore" Version="$(MassTransitVersion)" />
<!-- Miscellaneous -->
<PackageVersion Include="Scrutor" Version="4.2.2" />
<PackageVersion Include="Scrutor" Version="5.0.2" />
<PackageVersion Include="MediatR" Version="12.4.1" />
<PackageVersion Include="MongoDB.Bson" Version="2.29.0" />
<PackageVersion Include="Marten.AspNetCore" Version="7.28.0" />
<PackageVersion Include="MongoDB.Bson" Version="3.0.0" />
<PackageVersion Include="Marten.AspNetCore" Version="7.33.0" />
<PackageVersion Include="FluentEmail.Mailtrap" Version="2.7.0" />
<PackageVersion Include="Swashbuckle.AspNetCore" Version="6.7.3" />
<PackageVersion Include="Swashbuckle.AspNetCore.ReDoc" Version="6.7.3" />
<PackageVersion Include="Microsoft.SemanticKernel" Version="1.30.0" />
<PackageVersion Include="Scalar.AspNetCore" Version="1.2.44" />
<PackageVersion Include="FluentValidation.AspNetCore" Version="11.3.0" />
<PackageVersion Include="Microsoft.Web.LibraryManager.Build" Version="2.1.175" />
<PackageVersion Include="MicroElements.Swashbuckle.FluentValidation" Version="6.0.0" />
</ItemGroup>
</Project>
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@
- [x] CI/CD with `GitHub Actions`
- [x] Testing
- [x] Service unit tests
- [ ] Integration tests with `Aspire Testing` & `WireMock`
- [ ] Integration tests with `TestContainers`
- [ ] Output Caching, Response Caching and Distributed Caching with Redis
- [ ] Deployment with `Aspirate` on `k3d`
- [ ] EDA document with `EventCatalog`
Expand All @@ -49,7 +49,7 @@

### Prerequisites

- [.NET 8.0 SDK](https://dotnet.microsoft.com/download/dotnet/8.0)
- [.NET 9.0 SDK](https://dotnet.microsoft.com/download/dotnet/9.0)
- [Docker](https://www.docker.com/products/docker-desktop)
- [Gitleaks](https://gitleaks.io/)

Expand Down
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.200",
"version": "9.0.100",
"rollForward": "major",
"allowPrerelease": true
}
Expand Down
19 changes: 9 additions & 10 deletions src/BookWorm.AppHost/BookWorm.AppHost.csproj
Original file line number Diff line number Diff line change
@@ -1,21 +1,22 @@
<Project Sdk="Microsoft.NET.Sdk">


<Sdk Name="Aspire.AppHost.Sdk" Version="9.0.0" />

<PropertyGroup>
<OutputType>Exe</OutputType>
<IsAspireHost>true</IsAspireHost>
<UserSecretsId>78a33324-5add-4731-b2fc-e0fc06ef0564</UserSecretsId>
</PropertyGroup>

<ItemGroup>
<PackageReference Include="Aspirant.Hosting" />
<PackageReference Include="Aspire.Hosting.AppHost" />
<PackageReference Include="Aspire.Hosting.Azure.Storage" />
<PackageReference Include="Aspire.Hosting.MongoDB" />
<PackageReference Include="Aspire.Hosting.PostgreSQL" />
<PackageReference Include="Aspire.Hosting.RabbitMQ" />
<PackageReference Include="Aspire.Hosting.Redis" />
</ItemGroup>

<ItemGroup>
<ProjectReference Include="..\BookWorm.Basket\BookWorm.Basket.csproj" />
<ProjectReference Include="..\BookWorm.Catalog\BookWorm.Catalog.csproj" />
Expand All @@ -25,13 +26,11 @@
<ProjectReference Include="..\BookWorm.Ordering\BookWorm.Ordering.csproj" />
<ProjectReference Include="..\BookWorm.Rating\BookWorm.Rating.csproj" />
</ItemGroup>

<ItemGroup>
<ProjectReference Include="..\BookWorm.Constants\BookWorm.Constants.csproj" IsAspireProjectResource="false" />
<ProjectReference Include="..\BookWorm.HealthCheck.Hosting\BookWorm.HealthCheck.Hosting.csproj"
IsAspireProjectResource="false" />
<ProjectReference Include="..\BookWorm.MailDev.Hosting\BookWorm.MailDev.Hosting.csproj"
IsAspireProjectResource="false" />
<ProjectReference Include="..\BookWorm.HealthCheck.Hosting\BookWorm.HealthCheck.Hosting.csproj" IsAspireProjectResource="false" />
<ProjectReference Include="..\BookWorm.MailDev.Hosting\BookWorm.MailDev.Hosting.csproj" IsAspireProjectResource="false" />
</ItemGroup>

</Project>
21 changes: 14 additions & 7 deletions src/BookWorm.AppHost/Extension.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,23 +2,30 @@

internal static class Extension
{
public static IDistributedApplicationBuilder AddForwardedHeaders(this IDistributedApplicationBuilder builder)
public static IDistributedApplicationBuilder AddForwardedHeaders(
this IDistributedApplicationBuilder builder
)
{
builder.Services.TryAddLifecycleHook<AddForwardHeadersHook>();
return builder;
}

internal sealed class AddForwardHeadersHook : IDistributedApplicationLifecycleHook
{
public Task BeforeStartAsync(DistributedApplicationModel appModel,
CancellationToken cancellationToken = default)
public Task BeforeStartAsync(
DistributedApplicationModel appModel,
CancellationToken cancellationToken = default
)
{
foreach (var p in appModel.GetProjectResources())
{
p.Annotations.Add(new EnvironmentCallbackAnnotation(context =>
{
context.EnvironmentVariables["ASPNETCORE_FORWARDEDHEADERS_ENABLED"] = "true";
}));
p.Annotations.Add(
new EnvironmentCallbackAnnotation(context =>
{
context.EnvironmentVariables["ASPNETCORE_FORWARDEDHEADERS_ENABLED"] =
"true";
})
);
}

return Task.CompletedTask;
Expand Down
3 changes: 1 addition & 2 deletions src/BookWorm.AppHost/GlobalUsings.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
global using Aspirant.Hosting;
global using Aspire.Hosting.Lifecycle;
global using Aspire.Hosting.Lifecycle;
global using BookWorm.AppHost;
global using BookWorm.Constants;
global using BookWorm.HealthCheck.Hosting;
Expand Down
Loading

0 comments on commit 8d071d1

Please sign in to comment.