linux-packaging-mono/external/buildtools/Documentation/annotated-dependency-props.md
Xamarin Public Jenkins (auto-signing) 966bba02bb Imported Upstream version 5.2.0.175
Former-commit-id: bb0468d0f257ff100aa895eb5fe583fb5dfbf900
2017-06-07 13:16:24 +00:00

8.0 KiB

Annotated dependencies.props

This file is used in CoreFX, CoreCLR, WCF, and BuildTools, located in the repository root. Below is a breakdown of corefx's master dependencies.props. It is used for dependency auto-upgrade and dependency verification.

<PropertyGroup>
	<CoreFxCurrentRef>450606241ffd24c3c9671cd002955a68e98008a7</CoreFxCurrentRef>
	<CoreClrCurrentRef>450606241ffd24c3c9671cd002955a68e98008a7</CoreClrCurrentRef>
	<ExternalCurrentRef>0db1f9d8996a6a05960f79712299652a4b04147f</ExternalCurrentRef>
	<ProjectNTfsCurrentRef>450606241ffd24c3c9671cd002955a68e98008a7</ProjectNTfsCurrentRef>
</PropertyGroup>

Source of truth for dependency tooling: the commit hash of the dotnet/versions master branch as of the last auto-upgrade. These are used with the GitHub raw api to download build-infos.

In /t:UpdateDependenciesAndSubmitPullRequest, the task first finds the latest CurrentRef of the dotnet/versions repository, which when used with the raw API will return the latest version of every build info. The update proceeds, using that latest build-info data. After updating, the task determines which build-infos were used and updates only the used build-info *CurrentRefs in the above part of dependencies.props.

When doing a manual update with /t:UpdateDependencies, you need to change these CurrentRefs yourself to whatever dotnet/versions commit you want to update to before executing the target.

During dependency verification (/t:VerifyDependencies or automatically during sync) the targeted build-infos are downloaded and project files are checked for consistency with the build-infos.

<!-- Auto-upgraded properties for each build info dependency. -->
<PropertyGroup>
	<CoreFxExpectedPrerelease>beta-24601-02</CoreFxExpectedPrerelease>
	<CoreClrExpectedPrerelease>beta-24603-02</CoreClrExpectedPrerelease>
	<ExternalExpectedPrerelease>beta-24523-00</ExternalExpectedPrerelease>
	<ProjectNTfsExpectedPrerelease>beta-24603-00</ProjectNTfsExpectedPrerelease>
</PropertyGroup>

These are auto-updated by UpdateDependenciesAndSubmitPullRequest and UpdateDependencies, with values taken from Latest.txt. They are only used to flow this info into MSBuild, not by project.json validation (as they were in older types of dependency auto-update).

These properties are verified to match the downloaded build-info during VerifyDependencies.

<!-- Full package version strings that are used in other parts of the build. -->
<PropertyGroup>
	<AppXRunnerVersion>1.0.3-prerelease-00826-05</AppXRunnerVersion>
	<XunitPerfAnalysisPackageVersion>1.0.0-alpha-build0040</XunitPerfAnalysisPackageVersion>
</PropertyGroup>

Similar to the *ExpectedPrerelease properties, but these are for specific named packages. They are used in MSBuild targets during builds. These versions in particular aren't auto-updated because they are tools that don't regularly change.

<!-- Package dependency verification/auto-upgrade configuration. -->
<PropertyGroup>
	<BaseDotNetBuildInfo>build-info/dotnet/</BaseDotNetBuildInfo>
	<DependencyBranch>master</DependencyBranch>
	<CurrentRefXmlPath>$(MSBuildThisFileFullPath)</CurrentRefXmlPath>
</PropertyGroup>

The first two properties assemble the path to the build-info files that CoreFX master depends on.

CurrentRefXmlPath is used by the auto-update targets to determine where dependencies.props is.

<ItemGroup>
	<RemoteDependencyBuildInfo Include="CoreFx">
		<BuildInfoPath>$(BaseDotNetBuildInfo)corefx/$(DependencyBranch)</BuildInfoPath>
		<CurrentRef>$(CoreFxCurrentRef)</CurrentRef>
	</RemoteDependencyBuildInfo>
	<RemoteDependencyBuildInfo Include="CoreClr">
		<BuildInfoPath>$(BaseDotNetBuildInfo)coreclr/$(DependencyBranch)</BuildInfoPath>
		<CurrentRef>$(CoreClrCurrentRef)</CurrentRef>
	</RemoteDependencyBuildInfo>
	<RemoteDependencyBuildInfo Include="External">
		<BuildInfoPath>$(BaseDotNetBuildInfo)projectk-tfs/$(DependencyBranch)</BuildInfoPath>
		<CurrentRef>$(ExternalCurrentRef)</CurrentRef>
	</RemoteDependencyBuildInfo>
	<RemoteDependencyBuildInfo Include="ProjectNTfs">
		<BuildInfoPath>$(BaseDotNetBuildInfo)projectn-tfs/$(DependencyBranch)</BuildInfoPath>
		<CurrentRef>$(ProjectNTfsCurrentRef)</CurrentRef>
	</RemoteDependencyBuildInfo>

	<DependencyBuildInfo Include="@(RemoteDependencyBuildInfo)">
		<RawVersionsBaseUrl>https://raw.githubusercontent.com/dotnet/versions</RawVersionsBaseUrl>
	</DependencyBuildInfo>
	
	<XmlUpdateStep Include="CoreFx">
		<Path>$(MSBuildThisFileFullPath)</Path>
		<ElementName>CoreFxExpectedPrerelease</ElementName>
		<BuildInfoName>CoreFx</BuildInfoName>
	</XmlUpdateStep>
	<XmlUpdateStep Include="CoreClr">
		<Path>$(MSBuildThisFileFullPath)</Path>
		<ElementName>CoreClrExpectedPrerelease</ElementName>
		<BuildInfoName>CoreClr</BuildInfoName>
	</XmlUpdateStep>
	<XmlUpdateStep Include="External">
		<Path>$(MSBuildThisFileFullPath)</Path>
		<ElementName>ExternalExpectedPrerelease</ElementName>
		<BuildInfoName>External</BuildInfoName>
	</XmlUpdateStep>
	<XmlUpdateStep Include="ProjectNTfs">
		<Path>$(MSBuildThisFileFullPath)</Path>
		<ElementName>ProjectNTfsExpectedPrerelease</ElementName>
		<BuildInfoName>ProjectNTfs</BuildInfoName>
	</XmlUpdateStep>
</ItemGroup>

Each RemoteDependencyBuildInfo indicates a build-info to download, which consists of the Latest.txt and Latest_Packages.txt at a certain path. CurrentRef is flowed from the property into the item metadata rather than hard-coded in the metadata for enhanced visibility in auto-update diffs.

The XmlUpdateSteps are rules that match the *ExpectedPrerelease properties earlier in this file and link them to the build infos.

<!-- Set up dependencies on packages that aren't found in a BuildInfo. -->
<ItemGroup>
	<TargetingPackDependency Include="Microsoft.TargetingPack.NETFramework.v4.5" />
	<TargetingPackDependency Include="Microsoft.TargetingPack.NETFramework.v4.5.1" />
	<TargetingPackDependency Include="Microsoft.TargetingPack.NETFramework.v4.5.2" />
	<TargetingPackDependency Include="Microsoft.TargetingPack.NETFramework.v4.6" />
	<TargetingPackDependency Include="Microsoft.TargetingPack.NETFramework.v4.6.1" />
	<TargetingPackDependency Include="Microsoft.TargetingPack.NETFramework.v4.6.2" />
	<TargetingPackDependency Include="Microsoft.TargetingPack.Private.WinRT" />
	<StaticDependency Include="@(TargetingPackDependency)">
		<Version>1.0.1</Version>
	</StaticDependency>

	<XUnitDependency Include="xunit"/>
	<XUnitDependency Include="xunit.runner.utility"/>
	<XUnitDependency Include="xunit.runner.console"/>
	<StaticDependency Include="@(XUnitDependency)">
		<Version>2.1.0</Version>
	</StaticDependency>

	<StaticDependency Include="Microsoft.xunit.netcore.extensions;Microsoft.DotNet.BuildTools.TestSuite">
		<Version>1.0.0-prerelease-00830-02</Version>
	</StaticDependency>

	<PerformancePackDependency Include="Microsoft.DotNet.xunit.performance" />
	<PerformancePackDependency Include="Microsoft.DotNet.xunit.performance.analysis" />
	<PerformancePackDependency Include="Microsoft.DotNet.xunit.performance.analysis.cli" />
	<PerformancePackDependency Include="Microsoft.DotNet.xunit.performance.runner.cli" />
	<PerformancePackDependency Include="Microsoft.DotNet.xunit.performance.runner.Windows" />
	<StaticDependency Include="@(PerformancePackDependency)">
		<Version>$(XunitPerfAnalysisPackageVersion)</Version>
	</StaticDependency>

	<DependencyBuildInfo Include="@(StaticDependency)">
		<PackageId>%(Identity)</PackageId>
		<UpdateStableVersions>true</UpdateStableVersions>
	</DependencyBuildInfo>

	<DependencyBuildInfo Include="uwpRunnerVersion">
		<PackageId>microsoft.xunit.runner.uwp</PackageId>
		<Version>$(AppXRunnerVersion)</Version>
	</DependencyBuildInfo>

</ItemGroup>

These are "local" DependencyBuildInfos created to cover packages that aren't in downloaded build-infos because they are external, not published to dotnet/versions, or don't normally change. Specifically, these allow the package versions to be validated in project.json files.