Skip to content

Commit

Permalink
Onboard to central package management in NuGet.Client repo (#4899)
Browse files Browse the repository at this point in the history
  • Loading branch information
jeffkl authored and Donnie Goodson committed Jun 21, 2024
1 parent 9dcdd7d commit 56a37c4
Show file tree
Hide file tree
Showing 22 changed files with 230 additions and 172 deletions.
4 changes: 2 additions & 2 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,14 @@

## Prerequisites

- [Visual Studio 2019](https://www.visualstudio.com)
- [Visual Studio 2022 17.4 or above](https://www.visualstudio.com)
with following workloads:
- .NET Core Cross Platform Development
- .NET desktop development
- Visual Studio extension development.
- Desktop development with C++
- [Windows 10 SDK](https://developer.microsoft.com/windows/downloads/windows-10-sdk/)
- [.NET 5.0 SDK](https://dotnet.microsoft.com/download/dotnet/5.0)
- [.NET 7.0 SDK](https://dotnet.microsoft.com/download/dotnet/7.0)
- Git
- Windows Powershell v3.0+

Expand Down
43 changes: 16 additions & 27 deletions Directory.Packages.props
Original file line number Diff line number Diff line change
Expand Up @@ -3,27 +3,18 @@
<ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally>

<CryptographyPackagesVersion Condition="'$(CryptographyPackagesVersion)' == ''">6.0.4</CryptographyPackagesVersion>
<MicrosoftCodeAnalysisPublicApiAnalyzersVersion Condition="'$(MicrosoftCodeAnalysisPublicApiAnalyzersVersion)' == ''">3.0.0</MicrosoftCodeAnalysisPublicApiAnalyzersVersion>
<NewtonsoftJsonPackageVersion Condition="'$(NewtonsoftJsonPackageVersion)' == ''">13.0.1</NewtonsoftJsonPackageVersion>
<SystemPackagesVersion Condition="'$(SystemPackagesVersion)' == ''">4.3.0</SystemPackagesVersion>
<VSFrameworkVersion Condition="'$(VSFrameworkVersion)' == ''">17.4.33103.184</VSFrameworkVersion>
<VSServicesVersion Condition="'$(VSServicesVersion)' == ''">16.153.0</VSServicesVersion>
<MicrosoftCodeAnalysisPublicApiAnalyzersVersion>3.0.0</MicrosoftCodeAnalysisPublicApiAnalyzersVersion>
<NewtonsoftJsonPackageVersion>13.0.1</NewtonsoftJsonPackageVersion>
<SystemPackagesVersion>4.3.0</SystemPackagesVersion>
<VSFrameworkVersion>17.2.0-preview-2-32304-091</VSFrameworkVersion>
<VSServicesVersion>16.153.0</VSServicesVersion>

<!-- Default MSBuild version -->
<MicrosoftBuildVersion Condition="'$(MicrosoftBuildVersion)' == ''">17.3.1</MicrosoftBuildVersion>
<MicrosoftBuildVersion>17.3.1</MicrosoftBuildVersion>
<!-- The last package version of MSBuild that works with netcoreapp3.1 or netstandard2.0 is 16.8.0. Our assemblies are still compiled against MSBuild assembly version 15.1.0.0 which will work with all versions -->
<MicrosoftBuildVersion Condition="'$(TargetFramework)' == 'netcoreapp3.1' Or '$(TargetFramework)' == 'netstandard2.0'">16.8.0</MicrosoftBuildVersion>
<!-- The last package version of MSBuild that works with net5.0 is 16.11.0. Our assemblies are still compiled against MSBuild assembly version 15.1.0.0 which will work with all versions -->
<MicrosoftBuildVersion Condition="'$(TargetFramework)' == 'netcoreapp5.0'">16.11.0</MicrosoftBuildVersion>

<!-- Overridden by source build to ensure the same version is used across products, do not remove these properties -->
<MicrosoftExtensionsFileProvidersAbstractionsPackageVersion Condition="'$(MicrosoftExtensionsFileProvidersAbstractionsPackageVersion)' == ''">6.0.0</MicrosoftExtensionsFileProvidersAbstractionsPackageVersion>
<MicrosoftExtensionsFileSystemGlobbingPackageVersion Condition="'$(MicrosoftExtensionsFileSystemGlobbingPackageVersion)' == ''">6.0.0</MicrosoftExtensionsFileSystemGlobbingPackageVersion>
<MicrosoftWebXdtPackageVersion Condition="'$(MicrosoftWebXdtPackageVersion)' == ''">3.0.0</MicrosoftWebXdtPackageVersion>
<SystemComponentModelCompositionPackageVersion Condition="'$(SystemComponentModelCompositionPackageVersion)' == ''">4.5.0</SystemComponentModelCompositionPackageVersion>
<SystemSecurityCryptographyPkcsVersion Condition="'$(SystemSecurityCryptographyPkcsVersion)' == ''">6.0.4</SystemSecurityCryptographyPkcsVersion>
<!-- System.Security.Cryptography.Xml is a dependency of Microsoft.Build.Tasks.Core. This property can be probably removed when MSBuild is updated to a newer version. -->
<SystemSecurityCryptographyXmlVersion Condition="'$(SystemSecurityCryptographyXmlVersion)' == ''">6.0.1</SystemSecurityCryptographyXmlVersion>
<SystemSecurityCryptographyXmlVersion Condition="'$(MicrosoftBuildVersion)' == '16.8.0' Or '$(MicrosoftBuildVersion)' == '16.11.0'">4.7.1</SystemSecurityCryptographyXmlVersion>
</PropertyGroup>

<ItemGroup>
Expand All @@ -32,7 +23,7 @@
<PackageVersion Include="MessagePack" Version="2.2.60" />
<PackageVersion Include="Microsoft.Build" Version="$(MicrosoftBuildVersion)" />
<PackageVersion Include="Microsoft.Build.Framework" Version="$(MicrosoftBuildVersion)" />
<PackageVersion Include="Microsoft.Build.Locator" Version="1.5.5" />
<PackageVersion Include="Microsoft.Build.Locator" Version="1.4.1" />
<PackageVersion Include="Microsoft.Build.Runtime" Version="$(MicrosoftBuildVersion)" />
<PackageVersion Include="Microsoft.Build.Tasks.Core" Version="$(MicrosoftBuildVersion)" />
<PackageVersion Include="Microsoft.Build.Utilities.Core" Version="$(MicrosoftBuildVersion)" />
Expand All @@ -44,8 +35,6 @@
<PackageVersion Include="Microsoft.CSharp" Version="$(SystemPackagesVersion)" />
<PackageVersion Include="Microsoft.DataAI.NuGetRecommender.Contracts" Version="2.1.0" />
<PackageVersion Include="Microsoft.Extensions.CommandLineUtils.Sources" Version="3.0.0-preview6.19253.5" />
<PackageVersion Include="Microsoft.Extensions.FileProviders.Abstractions" Version="$(MicrosoftExtensionsFileProvidersAbstractionsPackageVersion)" />
<PackageVersion Include="Microsoft.Extensions.FileSystemGlobbing" Version="$(MicrosoftExtensionsFileSystemGlobbingPackageVersion)" />
<PackageVersion Include="Microsoft.Internal.VisualStudio.Shell.Framework" Version="$(VSFrameworkVersion)" />
<PackageVersion Include="Microsoft.Net.Compilers.netcore" Version="3.0.0-dev-61717-03" />
<PackageVersion Include="Microsoft.Net.Compilers.Toolset" Version="3.9.0" />
Expand All @@ -63,12 +52,12 @@
<PackageVersion Include="Microsoft.VisualStudio.SDK" Version="$(VSFrameworkVersion)" />
<PackageVersion Include="Microsoft.VisualStudio.Sdk.TestFramework.Xunit" Version="17.2.7" />
<PackageVersion Include="Microsoft.VisualStudio.Services.InteractiveClient" Version="$(VSServicesVersion)" />
<PackageVersion Include="Microsoft.VisualStudio.Setup.Configuration.Interop" Version="3.4.2244" />
<PackageVersion Include="Microsoft.VisualStudio.Setup.Configuration.Interop" Version="1.16.30" />
<PackageVersion Include="Microsoft.VisualStudio.TemplateWizardInterface" Version="$(VSFrameworkVersion)" />
<PackageVersion Include="Microsoft.VisualStudio.VCProjectEngine" Version="$(VSFrameworkVersion)" />
<PackageVersion Include="Microsoft.VisualStudio.Workspace.VSIntegration" Version="17.0.7-preview-0001-g5492e466a9" />
<PackageVersion Include="Microsoft.VSSDK.BuildTools" Version="17.0.1600" />
<PackageVersion Include="Microsoft.Web.Xdt" Version="$(MicrosoftWebXdtPackageVersion)" />
<PackageVersion Include="Microsoft.Web.Xdt" Version="3.0.0" />
<PackageVersion Include="Moq" Version="4.18.1" />
<PackageVersion Include="MSTest.TestAdapter" Version="2.2.10" />
<PackageVersion Include="MSTest.TestFramework" Version="2.2.10" />
Expand All @@ -77,18 +66,17 @@
<PackageVersion Include="Portable.BouncyCastle" Version="1.8.10" />
<PackageVersion Include="SharpZipLib" Version="1.3.3" />
<PackageVersion Include="System.Collections" Version="$(SystemPackagesVersion)" />
<PackageVersion Include="System.CommandLine" Version="2.0.0-beta4.22272.1" />
<PackageVersion Include="System.ComponentModel.Composition" Version="$(SystemComponentModelCompositionPackageVersion)" />
<PackageVersion Include="System.ComponentModel.Composition" Version="4.5.0" />
<PackageVersion Include="System.Configuration.ConfigurationManager" Version="4.4.0" />
<PackageVersion Include="System.Diagnostics.Debug" Version="$(SystemPackagesVersion)" />
<PackageVersion Include="System.IO.FileSystem.Primitives" Version="$(SystemPackagesVersion)" />
<PackageVersion Include="System.Memory" Version="4.5.5" />
<PackageVersion Include="System.Resources.ResourceManager" Version="$(SystemPackagesVersion)" />
<PackageVersion Include="System.Runtime.Extensions" Version="$(SystemPackagesVersion)" />
<PackageVersion Include="System.Runtime.InteropServices" Version="$(SystemPackagesVersion)" />
<PackageVersion Include="System.Security.Cryptography.Pkcs" Version="$(SystemSecurityCryptographyPkcsVersion)" />
<PackageVersion Include="System.Security.Cryptography.Cng" Version="$(CryptographyPackagesVersion)" />
<PackageVersion Include="System.Security.Cryptography.Pkcs" Version="$(CryptographyPackagesVersion)" />
<PackageVersion Include="System.Security.Cryptography.ProtectedData" Version="4.4.0" />
<PackageVersion Include="System.Security.Cryptography.Xml" Version="$(SystemSecurityCryptographyXmlVersion)" />
<PackageVersion Include="System.Text.Encoding.Extensions" Version="$(SystemPackagesVersion)" />
<PackageVersion Include="System.Threading" Version="$(SystemPackagesVersion)" />
<PackageVersion Include="System.Threading.Tasks" Version="$(SystemPackagesVersion)" />
Expand All @@ -98,6 +86,7 @@
To resolve runtime assembly binding failures, we'll downgrade the package from 4.11.1 to 4.9.0.
-->
<PackageVersion Include="System.Threading.Tasks.Dataflow" Version="4.9.0" />
<PackageVersion Include="VSSDK.TemplateWizardInterface" Version="12.0.4" />
<PackageVersion Include="VsWebSite.Interop" Version="$(VSFrameworkVersion)" />
<PackageVersion Include="xunit" Version="2.4.1" />
<PackageVersion Include="xunit.runner.visualstudio" Version="2.4.5" />
Expand All @@ -116,8 +105,8 @@
'$(MSBuildProjectFile)' == 'NuGet.VisualStudio.Contracts.csproj' OR
'$(MSBuildProjectFile)' == 'NuGet.VisualStudio.Interop.csproj' OR
'$(MSBuildProjectFile)' == 'NuGet.SolutionRestoreManager.Interop.csproj'">
<PackageVersion Include="Microsoft.ServiceHub.Framework" Version="4.1.112" />
<PackageVersion Include="Microsoft.VisualStudio.ComponentModelHost" Version="17.4.255" />
<PackageVersion Include="Microsoft.ServiceHub.Framework" Version="2.7.327-preview" />
<PackageVersion Include="Microsoft.VisualStudio.ComponentModelHost" Version="17.0.67-g9e37b637e6" />
<PackageVersion Update="Microsoft.VisualStudio.SDK" Version="" />
<PackageVersion Include="Microsoft.VisualStudio.Shell.15.0" Version="$(VSFrameworkVersion)" />
</ItemGroup>
Expand Down
2 changes: 2 additions & 0 deletions NuGet.Config
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,12 @@
<package pattern="ben.demystifier" />
<package pattern="castle.core" />
<package pattern="fluentassertions" />
<package pattern="Humanizer.Core" />
<package pattern="ilmerge" />
<package pattern="lucene.net" />
<package pattern="messagepack" />
<package pattern="messagepack.annotations" />
<package pattern="messagepackanalyzer" />
<package pattern="microsoft.*" />
<package pattern="moq" />
<package pattern="MSTest.TestAdapter" />
Expand Down
9 changes: 0 additions & 9 deletions build.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -100,15 +100,6 @@ $MSBuildExe = Get-MSBuildExe

Invoke-BuildStep 'Running Restore' {
# Restore
$restoreArgs = "build\build.proj", "/t:EnsurePackageReferenceVersionsInSolution", "/p:Configuration=$Configuration"
if ($Binlog)
{
$restoreArgs += "-bl:msbuild.ensurepr.binlog"
}

Trace-Log ". `"$MSBuildExe`" $restoreArgs"
& $MSBuildExe @restoreArgs

$restoreArgs = "build\build.proj", "/t:RestoreVS", "/p:Configuration=$Configuration", "/p:ReleaseLabel=$ReleaseLabel", "/p:IncludeApex=$IncludeApex", "/v:m", "/m"

if ($BuildNumber)
Expand Down
13 changes: 0 additions & 13 deletions build/build.proj
Original file line number Diff line number Diff line change
Expand Up @@ -313,19 +313,6 @@
</MSBuild>
</Target>

<!--
============================================================
EnsurePackageReferenceVersionsInSolution
============================================================
-->
<Target Name="EnsurePackageReferenceVersionsInSolution">
<MsBuild
Projects="@(AllRepoProjects)"
Targets="EnsurePackageReferenceVersions"
Properties="SkipCentralPackageVersions=true">
</MsBuild>
</Target>

<!--
============================================================
Get projects need to be packed
Expand Down
18 changes: 0 additions & 18 deletions build/common.project.props
Original file line number Diff line number Diff line change
Expand Up @@ -278,23 +278,5 @@
<AllRepoProjects Include="@(ApexProjects)" />
</ItemGroup>

<!-- source link -->
<ItemGroup Condition="'$(Shipping)' == 'true' AND '$(IsXPlat)' != 'true'">
<PackageReference Include="Microsoft.SourceLink.GitHub" PrivateAssets="All"/>
</ItemGroup>

<!-- FxCop Analyzers -->
<ItemGroup Condition="'$(Shipping)' == 'true' AND '$(SkipAnalyzers)' != 'true' AND '$(DotNetBuildFromSource)' != 'true'">
<PackageReference Include="Microsoft.CodeAnalysis.FxCopAnalyzers">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Microsoft.CodeAnalysis.BannedApiAnalyzers">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<AdditionalFiles Include="$(MSBuildThisFileDirectory)\BannedSymbols.txt" Condition="'$(TestProject)' != 'true'" />
</ItemGroup>

<Import Project="OptProfV2.props"/>
</Project>
44 changes: 1 addition & 43 deletions build/common.targets
Original file line number Diff line number Diff line change
Expand Up @@ -81,24 +81,6 @@
<UsePublicApiAnalyzer Condition=" '$(UsePublicApiAnalyzer)' == '' " >true</UsePublicApiAnalyzer>
</PropertyGroup>

<ItemGroup Condition=" '$(UsePublicApiAnalyzer)' == 'true' ">
<PackageReference Include="Microsoft.CodeAnalysis.PublicApiAnalyzers" PrivateAssets="all" />

<None Remove="$(MSBuildProjectDirectory)\PublicAPI.Shipped.txt" />
<None Remove="$(MSBuildProjectDirectory)\PublicAPI.Unshipped.txt" />
<AdditionalFiles Include="$(MSBuildProjectDirectory)\PublicAPI.Shipped.txt" />
<AdditionalFiles Include="$(MSBuildProjectDirectory)\PublicAPI.Unshipped.txt" />
</ItemGroup>

<ItemGroup Condition=" '$(UsePublicApiAnalyzer)' == 'perTfm' ">
<PackageReference Include="Microsoft.CodeAnalysis.PublicApiAnalyzers" PrivateAssets="all" />

<None Remove="$(MSBuildProjectDirectory)\PublicAPI\$(TargetFramework)\PublicAPI.Shipped.txt" />
<None Remove="$(MSBuildProjectDirectory)\PublicAPI\$(TargetFramework)\PublicAPI.Unshipped.txt" />
<AdditionalFiles Include="$(MSBuildProjectDirectory)\PublicAPI\$(TargetFramework)\PublicAPI.Shipped.txt" />
<AdditionalFiles Include="$(MSBuildProjectDirectory)\PublicAPI\$(TargetFramework)\PublicAPI.Unshipped.txt" />
</ItemGroup>

<Target Name="UnknownUsePublicApiAnalyzerValue"
AfterTargets="Restore"
Condition=" '$(UsePublicApiAnalyzer)' != ''
Expand All @@ -112,11 +94,7 @@
<ImportGroup Condition=" '$(TestProject)' == 'true' ">
<Import Project="test.targets" />
</ImportGroup>

<!-- Centrally managed packages. SkipCentralPackageVersions is used to enforce that the packages are centrally managed through a check in build.proj -->
<ImportGroup Condition=" '$(SkipCentralPackageVersions)' != 'true' ">
<Import Project="packages.targets" />
</ImportGroup>


<!-- Allow WPF projects to run under NETCore SDK -->
<!-- Errors occur if the output path is not set correctly -->
Expand Down Expand Up @@ -406,26 +384,6 @@ Condition=" ('%(Extension)' == '.dll' OR '%(Filename)' == 'NuGet.CommandLine.XPl
Condition=" %(Reference.NuGetPackageId) == 'Newtonsoft.Json' AND %(Reference.NuGetPackageVersion) != '$(NewtonsoftJsonPackageVersion)' " />
</Target>

<Target Name="EnsurePackageReferenceVersions">
<ItemGroup Condition=" '$(TargetFrameworks)' != '' ">
<_TargetFrameworkItems Include="$(TargetFrameworks.Split(';'))" />
</ItemGroup>
<ItemGroup Condition=" '$(TargetFrameworks)' == '' ">
<_TargetFrameworkItems Include="$(TargetFramework)" />
</ItemGroup>
<MSBuild
Projects="$(MSBuildProjectFullPath)"
Targets="EnsurePackageReferenceVersionsForFramework"
Properties="TargetFramework=%(_TargetFrameworkItems.Identity);"
/>
</Target>

<Target Name="EnsurePackageReferenceVersionsForFramework">
<Error
Text="%(PackageReference.Identity) should not have a version declared outside of packages.targets but found '%(PackageReference.Version)'"
Condition=" '%(PackageReference.Version)' != '' AND '%(PackageReference.IsImplicitlyDefined)' != 'true' AND '%(PackageReference.Identity)' != 'Microsoft.NET.Test.Sdk' " />
</Target>

<Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), 'README.md'))\packages\Microsoft.VisualStudioEng.MicroBuild.Core\1.0.0\build\Microsoft.VisualStudioEng.MicroBuild.Core.targets" Condition="Exists('$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), &quot;README.md&quot;))\packages\Microsoft.VisualStudioEng.MicroBuild.Core\1.0.0\build\Microsoft.VisualStudioEng.MicroBuild.Core.targets')" />

</Project>
12 changes: 2 additions & 10 deletions eng/pipelines/templates/Static_Source_Analysis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -55,16 +55,8 @@ steps:
continueOnError: ${{ parameters.isOfficialBuild }}
condition: succeededOrFailed()

- task: MSBuild@1
displayName: "Ensure package versions are declared in packages.targets"
inputs:
solution: "build\\build.proj"
msbuildArguments: "/t:EnsurePackageReferenceVersionsInSolution /bl:$(Build.StagingDirectory)\\binlog\\02.EnsurePackageReferenceVersionsInSolution.binlog"
continueOnError: ${{ parameters.isOfficialBuild }}
condition: succeededOrFailed()

- task: PowerShell@2
displayName: "Initialize Git Commit Status on GitHub"
- task: PublishPipelineArtifact@1
displayName: "Publish binlogs"
inputs:
targetType: "inline"
script: |
Expand Down
4 changes: 2 additions & 2 deletions src/NuGet.Clients/NuGet.CommandLine/NuGet.CommandLine.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -53,12 +53,12 @@
<Reference Include="System.Xml" />
<Reference Include="System.Xml.Linq" />
<Reference Include="NuGet.Core">
<HintPath>$(NuGetPackageRoot)nuget.core\$(NuGetCoreV2Version)\lib\net40-Client\NuGet.Core.dll</HintPath>
<HintPath>$(PkgNuGet_Core)\lib\net40-Client\NuGet.Core.dll</HintPath>
<Aliases>CoreV2</Aliases>
</Reference>
</ItemGroup>
<ItemGroup>
<PackageDownload Include="NuGet.Core" />
<PackageReference Include="NuGet.Core" ExcludeAssets="All" GeneratePathProperty="true" />
<PackageReference Include="Microsoft.VisualStudio.Setup.Configuration.Interop" />
<ProjectReference Include="$(NuGetCoreSrcDirectory)NuGet.PackageManagement\NuGet.PackageManagement.csproj" />
<ProjectReference Include="$(NuGetCoreSrcDirectory)NuGet.Build.Tasks\NuGet.Build.Tasks.csproj" />
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,12 +30,6 @@
<Reference Include="WindowsBase" />
<Reference Include="System.Management.Automation, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL" />
</ItemGroup>
<ItemGroup>
<Reference Include="Microsoft.Build">
<HintPath>$(NuGetPackageRoot)microsoft.build\15.1.262-preview5\lib\net46\Microsoft.Build.dll</HintPath>
<Private>False</Private>
</Reference>
</ItemGroup>
<ItemGroup>
<Compile Include="Common\IProjectContextInfoExtensions.cs" />
<Compile Include="Common\InstalledAndTransitivePackageCollections.cs" />
Expand Down Expand Up @@ -292,7 +286,8 @@
</Compile>
</ItemGroup>
<ItemGroup>
<PackageDownload Include="Microsoft.Build" />
<PackageReference Include="Microsoft.Build" ExcludeAssets="Runtime" PrivateAssets="All" />
<PackageReference Include="Microsoft.Build.Utilities.Core" ExcludeAssets="Runtime" PrivateAssets="All" />
<PackageReference Include="Microsoft.DataAI.NuGetRecommender.Contracts" />
<PackageReference Include="Microsoft.VisualStudio.VCProjectEngine" />
<PackageReference Include="Microsoft.VisualStudio.Sdk" />
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@
using Microsoft.Build.Evaluation;
using Microsoft.CSharp.RuntimeBinder;
using Microsoft.VisualStudio;
using Microsoft.VisualStudio.ProjectSystem.Interop;
using Microsoft.VisualStudio.Shell;
using Microsoft.VisualStudio.Shell.Interop;
using NuGet.Common;
Expand Down
Loading

0 comments on commit 56a37c4

Please sign in to comment.