175 lines
8.8 KiB
XML
175 lines
8.8 KiB
XML
<Project>
|
|
<Target Name="RestoreNpmAssets" Condition="Exists('$(MSBuildProjectDirectory)/package.json')" BeforeTargets="Restore">
|
|
<Exec Command="npm install" />
|
|
</Target>
|
|
|
|
<ItemGroup Label="Hide Assets">
|
|
<None Update="icon.png" Visible="false" />
|
|
<None Update="..\..\README.md" Visible="false" />
|
|
<None Update="packages.lock.json" Visible="false" />
|
|
</ItemGroup>
|
|
|
|
<ItemGroup
|
|
Condition="@(PackageReference->WithMetadataValue('Identity','Microsoft.AspNetCore.OpenApi')->Count()) > 0">
|
|
<PackageReference Include="Microsoft.Extensions.ApiDescription.Server">
|
|
<PrivateAssets>all</PrivateAssets>
|
|
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
|
</PackageReference>
|
|
</ItemGroup>
|
|
|
|
<ItemGroup
|
|
Condition="@(PackageReference->WithMetadataValue('Identity','NSubstitute')->Count()) > 0">
|
|
<PackageReference Include="NSubstitute.Analyzers.CSharp">
|
|
<PrivateAssets>all</PrivateAssets>
|
|
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
|
</PackageReference>
|
|
</ItemGroup>
|
|
|
|
<Target Name="RenameOpenApiDocuments"
|
|
AfterTargets="GenerateOpenApiDocuments"
|
|
Condition="'$(OpenApiDocumentsDirectory)' != ''">
|
|
<Move SourceFiles="$(OpenApiDocumentsDirectory)/$(MSBuildProjectName).json"
|
|
DestinationFiles="$(OpenApiDocumentsDirectory)/$(MSBuildProjectName)-v1.json"
|
|
Condition="Exists('$(OpenApiDocumentsDirectory)/$(MSBuildProjectName).json')" />
|
|
</Target>
|
|
|
|
<Target Name="AddInternalsVisibleTo" BeforeTargets="BeforeCompile">
|
|
<!--
|
|
Add an ItemGroup with tags in the following format:
|
|
<InternalsVisibleTo Include="CustomTest1" />
|
|
-> [assembly: InternalsVisibleTo("CustomTest1")]
|
|
<InternalsVisibleTo Include="CustomTest2, PublicKey=abc" />
|
|
-> [assembly: InternalsVisibleTo("CustomTest2, PublicKey=abc")]
|
|
<InternalsVisibleTo Include="$(AssemblyName).Custom" />
|
|
-> [assembly: InternalsVisibleTo("ClassLibrary1.Custom")]
|
|
|
|
on a project with assembly name ClasLibrary1:
|
|
<InternalsVisibleToSuffix Include=".Tests" />
|
|
-> [assembly: InternalsVisibleTo("ClassLibrary1.Tests")]
|
|
<InternalsVisibleToSuffix Include=".FunctionalTests" />
|
|
-> [assembly: InternalsVisibleTo("ClassLibrary1.FunctionalTests")]
|
|
-->
|
|
|
|
<!-- Handle InternalsVisibleTo -->
|
|
<ItemGroup Condition="'@(InternalsVisibleTo->Count())' > 0">
|
|
<AssemblyAttribute Include="System.Runtime.CompilerServices.InternalsVisibleTo">
|
|
<_Parameter1>%(InternalsVisibleTo.Identity)</_Parameter1>
|
|
</AssemblyAttribute>
|
|
</ItemGroup>
|
|
|
|
<!-- Handle InternalsVisibleToSuffix -->
|
|
<ItemGroup Condition="@(InternalsVisibleToSuffix->Count()) > 0">
|
|
<AssemblyAttribute Include="System.Runtime.CompilerServices.InternalsVisibleTo"
|
|
Condition="$(AssemblyName.EndsWith(%(InternalsVisibleToSuffix.Identity))) == 'false'">
|
|
<_Parameter1>$(AssemblyName)%(InternalsVisibleToSuffix.Identity)</_Parameter1>
|
|
</AssemblyAttribute>
|
|
</ItemGroup>
|
|
</Target>
|
|
|
|
<Target Name="CreateReleaseNotesFromFile" BeforeTargets="GenerateNuspec"
|
|
DependsOnTargets="GenerateChangelogFromGit"
|
|
Condition="Exists('$(ChangeLogPath)')">
|
|
<ReadLinesFromFile File="$(ChangeLogPath)">
|
|
<Output TaskParameter="Lines" ItemName="ReleaseNoteLines" />
|
|
</ReadLinesFromFile>
|
|
<PropertyGroup>
|
|
<PackageReleaseNotes>@(ReleaseNoteLines, '%0a')</PackageReleaseNotes>
|
|
</PropertyGroup>
|
|
</Target>
|
|
|
|
<PropertyGroup>
|
|
<ChangeLogPath Condition="'$(ChangeLogPath)' == ''">$(BaseIntermediateOutputPath)changes.log</ChangeLogPath>
|
|
<ChangeLogFromRef Condition="'$(ChangeLogFromRef)' == ''"></ChangeLogFromRef>
|
|
<ChangeLogCommitLimit Condition="'$(ChangeLogCommitLimit)' == ''">100</ChangeLogCommitLimit>
|
|
<ChangeLogUpstreamMergePattern Condition="'$(ChangeLogUpstreamMergePattern)' == ''">from .*/</ChangeLogUpstreamMergePattern>
|
|
<!-- Set to false to exclude commits from ProjectReference directories in the changelog -->
|
|
<ChangeLogIncludeReferences Condition="'$(ChangeLogIncludeReferences)' == ''">true</ChangeLogIncludeReferences>
|
|
</PropertyGroup>
|
|
|
|
<Target Name="GenerateChangelogFromGit"
|
|
BeforeTargets="GenerateNuspec"
|
|
Condition="'$(GenerateChangelogFromGit)' != 'false' AND Exists('$(MSBuildThisFileDirectory).git')">
|
|
<!-- #1: nearest reachable tag from HEAD, not globally newest; capture exit code to guard against no-tag repos -->
|
|
<Exec Command="git describe --tags --abbrev=0"
|
|
WorkingDirectory="$(MSBuildThisFileDirectory)"
|
|
ConsoleToMsBuild="true"
|
|
IgnoreExitCode="true"
|
|
StandardErrorImportance="low">
|
|
<Output TaskParameter="ConsoleOutput" PropertyName="GitLastTagRaw" />
|
|
<Output TaskParameter="ExitCode" PropertyName="GitDescribeExitCode" />
|
|
</Exec>
|
|
|
|
<Exec Command="git rev-list --first-parent --merges -n 1 HEAD"
|
|
WorkingDirectory="$(MSBuildThisFileDirectory)"
|
|
ConsoleToMsBuild="true"
|
|
IgnoreExitCode="true">
|
|
<Output TaskParameter="ConsoleOutput" PropertyName="GitLastMergeRaw" />
|
|
</Exec>
|
|
|
|
<!-- #4: configurable upstream merge pattern via ChangeLogUpstreamMergePattern -->
|
|
<Exec Command="git rev-list --first-parent --merges -n 1 --grep="$(ChangeLogUpstreamMergePattern)" HEAD"
|
|
WorkingDirectory="$(MSBuildThisFileDirectory)"
|
|
ConsoleToMsBuild="true"
|
|
IgnoreExitCode="true">
|
|
<Output TaskParameter="ConsoleOutput" PropertyName="GitLastUpstreamMergeRaw" />
|
|
</Exec>
|
|
|
|
<PropertyGroup>
|
|
<!-- only accept the tag when git describe actually succeeded -->
|
|
<GitLastTag Condition="'$(GitDescribeExitCode)' == '0'">$([System.String]::Copy('$(GitLastTagRaw)').Trim())</GitLastTag>
|
|
<GitLastUpstreamMergeCommit>$([System.String]::Copy('$(GitLastUpstreamMergeRaw)').Trim())</GitLastUpstreamMergeCommit>
|
|
<GitLastMergeCommit>$([System.String]::Copy('$(GitLastMergeRaw)').Trim())</GitLastMergeCommit>
|
|
<ChangeLogRange Condition="'$(ChangeLogFromRef)' != ''">$(ChangeLogFromRef)..HEAD</ChangeLogRange>
|
|
<ChangeLogRange Condition="'$(ChangeLogRange)' == '' AND '$(GitLastTag)' != ''">$(GitLastTag)..HEAD</ChangeLogRange>
|
|
<ChangeLogRange Condition="'$(ChangeLogRange)' == '' AND '$(GitLastUpstreamMergeCommit)' != ''">$(GitLastUpstreamMergeCommit)..HEAD</ChangeLogRange>
|
|
<ChangeLogRange Condition="'$(ChangeLogRange)' == '' AND '$(GitLastMergeCommit)' != ''">$(GitLastMergeCommit)..HEAD</ChangeLogRange>
|
|
<!-- #3: subject-only; space before %s would split the arg on Windows cmd, so bullet is added by MSBuild transform below -->
|
|
<GitPrettyFormat Condition="$([MSBuild]::IsOSPlatform('Windows')) == 'true'">--pretty=format:%25%25s</GitPrettyFormat>
|
|
<GitPrettyFormat Condition="$([MSBuild]::IsOSPlatform('Windows')) != 'true'">--pretty=format:%25s</GitPrettyFormat>
|
|
<GitLogBaseCommand>git --no-pager log --no-merges $(GitPrettyFormat)</GitLogBaseCommand>
|
|
</PropertyGroup>
|
|
|
|
<!-- Collect directories for path scoping; optionally include ProjectReference paths -->
|
|
<ItemGroup>
|
|
<ChangeLogPaths Include=""$(MSBuildProjectDirectory)"" />
|
|
<ChangeLogPaths Condition="'$(ChangeLogIncludeReferences)' == 'true'"
|
|
Include="@(ProjectReference->'"%(RootDir)%(Directory)."')" />
|
|
</ItemGroup>
|
|
<PropertyGroup>
|
|
<ChangeLogPathSpec>@(ChangeLogPaths, ' ')</ChangeLogPathSpec>
|
|
</PropertyGroup>
|
|
|
|
<Exec Condition="'$(ChangeLogRange)' != ''"
|
|
Command="$(GitLogBaseCommand) $(ChangeLogRange) -- $(ChangeLogPathSpec)"
|
|
WorkingDirectory="$(MSBuildThisFileDirectory)"
|
|
ConsoleToMsBuild="true">
|
|
<Output TaskParameter="ConsoleOutput" ItemName="ChangeLogLines" />
|
|
</Exec>
|
|
|
|
<Exec Condition="'$(ChangeLogRange)' == ''"
|
|
Command="$(GitLogBaseCommand) --max-count=$(ChangeLogCommitLimit) -- $(ChangeLogPathSpec)"
|
|
WorkingDirectory="$(MSBuildThisFileDirectory)"
|
|
ConsoleToMsBuild="true">
|
|
<Output TaskParameter="ConsoleOutput" ItemName="ChangeLogLines" />
|
|
</Exec>
|
|
|
|
<!-- #3: prepend bullet here, safely, with no shell involved; skip writing an empty file -->
|
|
<WriteLinesToFile Condition="@(ChangeLogLines->Count()) > 0"
|
|
File="$(ChangeLogPath)"
|
|
Lines="@(ChangeLogLines->'- %(Identity)')"
|
|
Overwrite="true"
|
|
WriteOnlyWhenDifferent="true"
|
|
Encoding="UTF-8" />
|
|
|
|
<Message Importance="High" Condition="'$(ChangeLogRange)' != ''"
|
|
Text="Generated changelog at $(ChangeLogPath) using range $(ChangeLogRange)." />
|
|
<Message Importance="High" Condition="'$(ChangeLogRange)' == ''"
|
|
Text="Generated changelog at $(ChangeLogPath) using last $(ChangeLogCommitLimit) commits." />
|
|
</Target>
|
|
|
|
<Import
|
|
Condition="Exists('$(MSBuildProjectDirectory)\obj\$(MSBuildProjectFile).EntityFrameworkCore.targets')"
|
|
Project="$(MSBuildProjectDirectory)\obj\$(MSBuildProjectFile).EntityFrameworkCore.targets" />
|
|
|
|
</Project>
|