Skip to content

Commit 774545f

Browse files
authored
[release/2.1] Compare prebuilt usage against a baseline (#756)
* Compare prebuilt usage against a baseline * Add Usage IEquatable: dedup baseline entries I removed this in an earlier commit, but it's used to collapse multiple usages of the same package in the baseline to reduce file size. I used ValueTuple to generate a hash code, which required a newer netstandard TFM.
1 parent bb2b2d1 commit 774545f

20 files changed

+2034
-457
lines changed

build-source-tarball.sh

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -129,15 +129,6 @@ do
129129
fi
130130
done
131131

132-
if [ -z "${SOURCE_BUILD_SKIP_PREBUILT_REPORT:-}" ]; then
133-
echo 'Creating prebuilt package usage report...'
134-
(
135-
# Don't clean up (or ask to clean up).
136-
export SOURCE_BUILD_SKIP_SUBMODULE_CHECK=1
137-
"$SCRIPT_ROOT/build.sh" /nologo /t:ReportTarballPrebuiltUsage /p:TarballPrebuiltPackagesPath="$FULL_TARBALL_ROOT/prebuilt/nuget-packages/"
138-
)
139-
fi
140-
141132
echo 'WORKAROUND: Overwriting the source-built roslyn-tools MSBuild files with prebuilt so that roslyn-tools can successfully build in the tarball... (https://github.com/dotnet/source-build/issues/654)'
142133

143134
ROSLYN_TOOLS_PACKAGE='RoslynTools.RepoToolset'

build.proj

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -27,23 +27,20 @@
2727
<RemoveDir Directories="$(BaseOutputPath)" />
2828
</Target>
2929

30-
<!-- After building offline, create a prebuilt usage report. -->
31-
<Target Name="ReportPrebuiltUsageAfterOfflineBuild"
30+
<!-- After building, generate a prebuilt usage report. -->
31+
<Target Name="ReportPrebuiltUsage"
3232
AfterTargets="Build"
33-
Condition="'$(OfflineBuild)' == 'true' and '$(SkipReportPrebuiltUsageAfterOfflineBuild)' != 'true'">
34-
<MSBuild Projects="repos\$(RootRepo).proj" Targets="WritePrebuiltUsageData;ReportPrebuiltUsage" />
35-
</Target>
36-
37-
<!-- After generating a tarball, check why/where the online build downloaded prebuilts. -->
38-
<Target Name="ReportTarballPrebuiltUsage">
33+
Condition="'$(SkipReportPrebuiltUsage)' != 'true'">
3934
<MSBuild Projects="repos\$(RootRepo).proj" Targets="WritePrebuiltUsageData;ReportPrebuiltUsage" />
4035
</Target>
4136

4237
<!--
43-
Dev scenario: regenerate a prebuilt-report. This makes it easy to add data to an existing
44-
prebuilt report without performing another full build.
38+
Dev scenario: rewrite a prebuilt-report. This makes it easy to add data to an existing
39+
prebuilt report without performing another full build. This doesn't reevalutate which packages
40+
are prebuilts or search the projects: it uses the existing usage.xml file to generate report
41+
XMLs based on the info put in bin/.
4542
-->
46-
<Target Name="CreatePrebuiltUsageReport">
43+
<Target Name="RewritePrebuiltUsageReport">
4744
<MSBuild Projects="repos\$(RootRepo).proj" Targets="ReportPrebuiltUsage" />
4845
</Target>
4946

dir.props

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -44,8 +44,9 @@
4444
<BaseOutputPath>$(ProjectDir)bin/</BaseOutputPath>
4545
<ToolsDir>$(ProjectDir)Tools/</ToolsDir>
4646
<ToolPackageExtractDir>$(ToolsDir)source-built/</ToolPackageExtractDir>
47-
<TaskDirectory>$(ProjectDir)tools-local/tasks/</TaskDirectory>
48-
<TasksBinDir>$(TaskDirectory)Microsoft.DotNet.SourceBuild.Tasks/bin/Debug/netstandard1.5/</TasksBinDir>
47+
<ToolsLocalDir>$(ProjectDir)tools-local/</ToolsLocalDir>
48+
<TaskDirectory>$(ToolsLocalDir)tasks/</TaskDirectory>
49+
<TasksBinDir>$(TaskDirectory)Microsoft.DotNet.SourceBuild.Tasks/bin/Debug/netstandard2.0/</TasksBinDir>
4950
<BaseIntermediatePath>$(BaseOutputPath)obj/</BaseIntermediatePath>
5051
<OutputPath>$(BaseOutputPath)$(Platform)/$(Configuration)/</OutputPath>
5152
<IntermediatePath>$(BaseIntermediatePath)$(Platform)/$(Configuration)/</IntermediatePath>
@@ -66,7 +67,7 @@
6667
<!-- Dir where git info is placed inside the tarball. -->
6768
<GitInfoOfflineDir>$(ProjectDir)git-info/</GitInfoOfflineDir>
6869
<PackageReportDir>$(BaseOutputPath)prebuilt-report/</PackageReportDir>
69-
<PackageReportDataFile>$(PackageReportDir)prebuilt-usage.json</PackageReportDataFile>
70+
<PackageReportDataFile>$(PackageReportDir)prebuilt-usage.xml</PackageReportDataFile>
7071
<ProdConManifestFile>$(PackageReportDir)prodcon-build.xml</ProdConManifestFile>
7172
<PoisonedReportFile>$(PackageReportDir)poisoned.txt</PoisonedReportFile>
7273
<ConflictingPackageReportDir>$(BaseOutputPath)conflict-report/</ConflictingPackageReportDir>

repos/dir.targets

Lines changed: 47 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
<UsingTask AssemblyFile="$(TasksBinDir)Microsoft.DotNet.SourceBuild.Tasks.dll" TaskName="ReadNuGetPackageInfos" />
1212
<UsingTask AssemblyFile="$(TasksBinDir)Microsoft.DotNet.SourceBuild.Tasks.dll" TaskName="RemoveInternetSourcesFromNuGetConfig" />
1313
<UsingTask AssemblyFile="$(TasksBinDir)Microsoft.DotNet.SourceBuild.Tasks.dll" TaskName="UpdateJson" />
14+
<UsingTask AssemblyFile="$(TasksBinDir)Microsoft.DotNet.SourceBuild.Tasks.dll" TaskName="ValidateUsageAgainstBaseline" />
1415
<UsingTask AssemblyFile="$(TasksBinDir)Microsoft.DotNet.SourceBuild.Tasks.dll" TaskName="WriteBuildOutputProps" />
1516
<UsingTask AssemblyFile="$(TasksBinDir)Microsoft.DotNet.SourceBuild.Tasks.dll" TaskName="WritePackageUsageData" />
1617
<UsingTask AssemblyFile="$(TasksBinDir)Microsoft.DotNet.SourceBuild.Tasks.dll" TaskName="WriteRestoreSourceProps" />
@@ -164,6 +165,7 @@
164165
OutputPath="$(PackageVersionPropsPath)" />
165166

166167
<WriteBuildOutputProps NuGetPackages="@(_PreviouslySourceBuiltPackages)"
168+
IncludeCreationTimeProperty="true"
167169
OutputPath="$(PackageVersionPropsPath).pre.$(RepositoryName).xml" />
168170

169171
<ReadLinesFromFile File="$(PackageVersionPropsPath)">
@@ -189,11 +191,11 @@
189191
Condition="'@(ConflictingPackageInfos)' != ''">
190192
<PropertyGroup>
191193
<_ReportDir>$(ConflictingPackageReportDir)before-$(RepositoryName)/</_ReportDir>
192-
<_ReportDataFile>$(_ReportDir)usage.json</_ReportDataFile>
194+
<_ReportDataFile>$(_ReportDir)usage.xml</_ReportDataFile>
193195
</PropertyGroup>
194196

195197
<WritePackageUsageData NuGetPackageInfos="@(ConflictingPackageInfos)"
196-
ProjectDirectories="@(ProjectDirectories)"
198+
RootDir="$(ProjectDir)"
197199
DataFile="$(_ReportDataFile)" />
198200

199201
<WriteUsageReports DataFile="$(_ReportDataFile)"
@@ -350,28 +352,40 @@
350352

351353
<Target Name="WritePrebuiltUsageData"
352354
DependsOnTargets="GetAllProjectDirectories">
355+
<!-- Save the PVP snapshot of each build step to be evaluated while building the report. -->
353356
<ItemGroup>
354-
<PrebuiltPackages Include="$(PrebuiltPackagesPath)*.nupkg" />
355-
<PrebuiltPackages Include="$(TarballPrebuiltPackagesPath)*.nupkg" Condition="'$(TarballPrebuiltPackagesPath)' != ''"/>
357+
<PackageVersionPropsSnapshotFiles Include="$(IntermediatePath)PackageVersions.props.pre.*.xml" />
358+
</ItemGroup>
359+
<Copy SourceFiles="@(PackageVersionPropsSnapshotFiles)" DestinationFolder="$(PackageReportDir)snapshots/" />
356360

357-
<PackageVersionPropsSnapshotSourceFiles Include="$(IntermediatePath)PackageVersions.props.pre.*.xml" />
361+
<ItemGroup>
362+
<AllRestoredPackageFiles Include="$(LocalNuGetPackagesRoot)**/*.nupkg" />
363+
<AllRestoredPackageFiles Include="$(PackagesDir)**/*.nupkg" />
358364

359-
<ProjectDirectories Include="$(ToolsDir);$(TaskDirectory);$(BaseIntermediatePath)" />
360-
<!-- Scan the entire project, in case project.assets.json ends up in an unexpected place. -->
361-
<ProjectDirectories Include="$(ProjectDir)" />
362-
</ItemGroup>
365+
<!-- Only contains packages when building a tarball. -->
366+
<TarballPrebuiltPackageFiles Include="$(PrebuiltPackagesPath)*.nupkg" />
363367

364-
<Copy SourceFiles="@(PackageVersionPropsSnapshotSourceFiles)" DestinationFolder="$(PackageReportDir)" />
368+
<SourceBuiltPackageFiles Include="$(SourceBuiltBlobFeedDir)**/*.nupkg" />
365369

366-
<Message Importance="High" Text="Reading prebuilt nupkg identities..." />
370+
<!-- Check all RIDs from all restored Microsoft.NETCore.Platforms packages. -->
371+
<PlatformsRuntimeJsonFiles Include="$(LocalNuGetPackagesRoot)*/microsoft.netcore.platforms/*/runtime.json" />
372+
<PlatformsRuntimeJsonFiles Include="$(PackagesDir)microsoft.netcore.platforms/*/runtime.json" />
367373

368-
<ReadNuGetPackageInfos PackagePaths="@(PrebuiltPackages)">
369-
<Output TaskParameter="PackageInfoItems" ItemName="PrebuiltPackageInfoItems" />
370-
</ReadNuGetPackageInfos>
374+
<!-- Add some other potential top-level project directories for a more specific report. -->
375+
<ProjectDirectories Include="$(ToolsDir);$(TaskDirectory);$(BaseIntermediatePath)" />
376+
<!-- Finally, scan entire source-build, in case project.assets.json ends up in an unexpected place. -->
377+
<ProjectDirectories Include="$(ProjectDir)" />
378+
</ItemGroup>
371379

372-
<WritePackageUsageData NuGetPackageInfos="@(PrebuiltPackageInfoItems)"
373-
ProjectDirectories="@(ProjectDirectories)"
374-
DataFile="$(PackageReportDataFile)" />
380+
<WritePackageUsageData
381+
RestoredPackageFiles="@(AllRestoredPackageFiles)"
382+
TarballPrebuiltPackageFiles="@(TarballPrebuiltPackageFiles)"
383+
SourceBuiltPackageFiles="@(SourceBuiltPackageFiles)"
384+
PlatformsRuntimeJsonFiles="@(PlatformsRuntimeJsonFiles)"
385+
TargetRid="$(TargetRid)"
386+
ProjectDirectories="@(ProjectDirectories)"
387+
RootDir="$(ProjectDir)"
388+
DataFile="$(PackageReportDataFile)" />
375389
</Target>
376390

377391
<Target Name="GetAllProjectDirectories">
@@ -387,21 +401,30 @@
387401
</MSBuild>
388402
</Target>
389403

390-
<Target Name="ReportPrebuiltUsage"
391-
DependsOnTargets="GetPreviousReleasePrebuiltPackageInfos">
404+
<Target Name="ReportPrebuiltUsage">
405+
<PropertyGroup>
406+
<BaselineDataFile>$(ToolsLocalDir)prebuilt-baseline-</BaselineDataFile>
407+
<BaselineDataFile Condition="'$(OfflineBuild)' == 'true'">$(BaselineDataFile)offline.xml</BaselineDataFile>
408+
<BaselineDataFile Condition="'$(OfflineBuild)' != 'true'">$(BaselineDataFile)online.xml</BaselineDataFile>
409+
</PropertyGroup>
410+
411+
<ValidateUsageAgainstBaseline
412+
DataFile="$(PackageReportDataFile)"
413+
BaselineDataFile="$(BaselineDataFile)"
414+
OutputBaselineFile="$(PackageReportDir)generated-new-baseline.xml"
415+
OutputReportFile="$(PackageReportDir)baseline-comparison.xml" />
416+
392417
<ItemGroup>
393-
<PackageVersionPropsSnapshotFiles Include="$(PackageReportDir)PackageVersions.props.pre.*.xml" />
418+
<PackageVersionPropsSavedSnapshotFiles Include="$(PackageReportDir)snapshots/PackageVersions.props.pre.*.xml" />
394419
</ItemGroup>
420+
395421
<WriteUsageReports DataFile="$(PackageReportDataFile)"
396-
PackageVersionPropsSnapshots="@(PackageVersionPropsSnapshotFiles)"
422+
PackageVersionPropsSnapshots="@(PackageVersionPropsSavedSnapshotFiles)"
397423
ProdConBuildManifestFile="$(ProdConManifestFile)"
398424
PoisonedReportFile="$(PoisonedReportFile)"
399-
PreviousReleasePrebuiltPackageInfos="@(PreviousReleasePrebuiltPackageInfos)"
400425
OutputDirectory="$(PackageReportDir)" />
401426
</Target>
402427

403-
<Import Project="$(ProjectDir)tools-local/earlier-prebuilts.targets" />
404-
405428
<Target Name="GetProjectDirectory" Outputs="$(ProjectDirectory)" />
406429
<Target Name="GetOrchestratedManifestBuildName" Outputs="$(OrchestratedManifestBuildName)" />
407430
<Target Name="GetOfficialBuildId" Outputs="$(OfficialBuildId)" />

tools-local/earlier-prebuilts.targets

Lines changed: 0 additions & 94 deletions
This file was deleted.

0 commit comments

Comments
 (0)