dotnet-installer/build/package/Installer.RPM.targets

243 lines
11 KiB
XML

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project='Installer.RPM.props'/>
<UsingTask TaskName="ReplaceFileContents" AssemblyFile="$(CLIBuildDll)"/>
<UsingTask TaskName="BuildFPMToolPreReqs" AssemblyFile="$(CLIBuildDll)"/>
<PropertyGroup>
<BuildRpmPackage Condition=" '$(IsRPMBasedDistro)' == 'True' ">True</BuildRpmPackage>
</PropertyGroup>
<Target Name="GenerateRpms"
DependsOnTargets="TestFPMTool;BuildRpms;TestSdkRpm"
Condition=" '$(BuildRpmPackage)' == 'True' "
Outputs="@(GeneratedInstallers)"/>
<Target Name="BuildRpms"
DependsOnTargets="GenerateSdkRpm"
Condition=" '$(BuildRpmPackage)' == 'True' and '$(FPMPresent)' == 'True' "/>
<Target Name="GenerateSdkRpm"
DependsOnTargets="SetupRpmProps">
<RemoveDir Condition="Exists('$(RpmIntermediatesDir)')" Directories="$(RpmIntermediatesDir)"/>
<MakeDir Directories="$(RpmIntermediatesDir)"/>
<!-- Create empty rpm layout -->
<RemoveDir Condition="Exists('$(RpmLayoutDirectory)')" Directories="$(RpmLayoutDirectory)"/>
<MakeDir Directories="$(RpmLayoutDirectory)"/>
<MakeDir Directories="$(RpmLayoutPackageRoot)"/>
<MakeDir Directories="$(RpmLayoutSDK)"/>
<MakeDir Directories="$(RpmLayoutDocs)"/>
<MakeDir Directories="$(RpmLayoutTemplates)"/>
<MakeDir Directories="$(RpmLayoutScripts)"/>
<!-- Copy files to rpm layout -->
<ItemGroup>
<SDKFiles Include="$(InputRoot)/**/*"/>
<SDKManpages Include="$(ManPagesDir)/**/*"/>
<SDKTemplatesFiles Include="$(TemplatesDir)/**/*"/>
<SDKScriptsFiles Include="$(ScriptsDir)/after_remove_host.sh"/>
</ItemGroup>
<Copy SourceFiles="@(SDKFiles)"
DestinationFiles="@(SDKFiles->'$(RpmLayoutSDK)/%(RecursiveDir)%(Filename)%(Extension)')"
OverwriteReadOnlyFiles="True"
SkipUnchangedFiles="False"
UseHardlinksIfPossible="False"/>
<Copy SourceFiles="@(SDKManpages)"
DestinationFiles="@(SDKManpages->'$(RpmLayoutDocs)/%(RecursiveDir)%(Filename)%(Extension)')"
OverwriteReadOnlyFiles="True"
SkipUnchangedFiles="False"
UseHardlinksIfPossible="False"/>
<Copy SourceFiles="@(SDKTemplatesFiles)"
DestinationFiles="@(SDKTemplatesFiles->'$(RpmLayoutTemplates)/%(RecursiveDir)%(Filename)%(Extension)')"
OverwriteReadOnlyFiles="True"
SkipUnchangedFiles="False"
UseHardlinksIfPossible="False"/>
<Copy SourceFiles="@(SDKScriptsFiles)"
DestinationFiles="@(SDKScriptsFiles->'$(RpmLayoutScripts)/%(RecursiveDir)%(Filename)%(Extension)')"
OverwriteReadOnlyFiles="True"
SkipUnchangedFiles="False"
UseHardlinksIfPossible="False"/>
<!-- Replace config json variables -->
<ItemGroup>
<SDKTokenValue Include="%SHARED_HOST_RPM_VERSION%">
<ReplacementString>$(MicrosoftNETCoreAppPackageVersion)</ReplacementString>
</SDKTokenValue>
<SDKTokenValue Include="%ASPNETCORE_SHAREDFX_RPM_PACKAGE_NAME%">
<ReplacementString>$(AspNetCoreSharedFxRpmPackageName)</ReplacementString>
</SDKTokenValue>
<SDKTokenValue Include="%ASPNETCORE_SHAREDFX_RPM_PACKAGE_VERSION%">
<ReplacementString>$(AspNetCoreVersion)</ReplacementString>
</SDKTokenValue>
<SDKTokenValue Include="%SHARED_HOST_RPM_NAME%">
<ReplacementString>$(SharedFxRpmPackageName)</ReplacementString>
</SDKTokenValue>
<SDKTokenValue Include="%SDK_NUGET_VERSION%">
<ReplacementString>$(SdkVersion)</ReplacementString>
</SDKTokenValue>
<SDKTokenValue Include="%CLI_SDK_BRAND_NAME%">
<ReplacementString>$(SdkBrandName)</ReplacementString>
</SDKTokenValue>
<SDKTokenValue Include="%SDK_RPM_PACKAGE_NAME%">
<ReplacementString>$(SdkRpmPackageName)</ReplacementString>
</SDKTokenValue>
<AfterInstallHostTokenValue Include="%SDK_VERSION%">
<ReplacementString>$(SdkVersion)</ReplacementString>
</AfterInstallHostTokenValue>
</ItemGroup>
<ItemGroup>
<TestSdkRpmTaskEnvironmentVariables Include="PATH=$(RpmInstalledDirectory)$(PathListSeparator)$(PATH)" />
<TestSdkRpmTaskEnvironmentVariables Include="TEST_ARTIFACTS=$(TestArtifactsDir)" />
<TestSdkRpmTaskEnvironmentVariables Include="TEST_PACKAGES=$(TestPackagesDir)" />
<TestSdkRpmTaskEnvironmentVariables Include="PreviousStageProps=$(NextStagePropsPath)" />
<!-- Consumed By Publish -->
<GeneratedInstallers Include="$(SdkInstallerFile)" />
</ItemGroup>
<ReplaceFileContents InputFile="$(AfterInstallHostScriptTemplateFile)"
DestinationFile="$(AfterInstallHostScriptDestinationFile)"
ReplacementItems="@(AfterInstallHostTokenValue)"/>
<Chmod
Glob="$(AfterInstallHostScriptDestinationFile)"
Mode="ugo+x" />
<ReplaceFileContents InputFile="$(ConfigJsonFile)"
DestinationFile="$(RpmLayoutDirectory)$(RpmConfigJsonName)"
ReplacementItems="@(SDKTokenValue)"/>
<!-- Call the task to build the pre-reqs (parameters, copyright, changelog) for calling the FPM tool -->
<BuildFPMToolPreReqs InputDir="$(RpmLayoutDirectory)"
OutputDir="$(RpmIntermediatesDir)"
PackageVersion="$(RpmPackageVersion)"
ConfigJsonFile="$(RpmLayoutDirectory)$(RpmConfigJsonName)">
<Output TaskParameter="FPMParameters" PropertyName="FPMCmdParameters"/>
</BuildFPMToolPreReqs>
<!-- Build the RPM package by calling the FPM tool and passing the parameter list -->
<Exec Command="fpm $(FPMCmdParameters)" WorkingDirectory="$(RpmIntermediatesDir)"/>
<!-- Copy package to output -->
<ItemGroup>
<GeneratedRpmFiles Remove="@(GeneratedRpmFiles)"/>
<GeneratedRpmFiles Include="$(RpmIntermediatesDir)/*.rpm"/>
</ItemGroup>
<Error Text="@(GeneratedRpmFiles->Count()) .rpm files generated." Condition="'@(GeneratedRpmFiles->Count())' != 1"/>
<Copy SourceFiles="@(GeneratedRpmFiles)"
DestinationFiles="$(RpmFile)"
OverwriteReadOnlyFiles="True"
SkipUnchangedFiles="False"
UseHardlinksIfPossible="False"/>
</Target>
<Target Name="SetupRpmProps">
<PropertyGroup>
<RpmPackageVersion>$(SdkVersion)</RpmPackageVersion>
<InputRoot>$(OutputDirectory)/sdk</InputRoot>
<SdkInstallerFile>$(InstallerOutputDirectory)/$(DistroSpecificArtifactNameWithVersionCombinedHostHostFxrFrameworkSdk)$(InstallerExtension)</SdkInstallerFile>
<RpmFile>$(SdkInstallerFile)</RpmFile>
<ManPagesDir>$(RepoRoot)/Documentation/manpages</ManPagesDir>
<ConfigJsonFile>$(RepoRoot)/packaging/rpm/dotnet-config.json</ConfigJsonFile>
<RpmIntermediatesDir>$(IntermediateDirectory)/$(RpmPackageName)/$(RpmPackageVersion)</RpmIntermediatesDir>
<RpmTestResultsXmlFile>$(RpmIntermediatesDir)/debian-testResults.xml</RpmTestResultsXmlFile>
<RpmInstalledDirectory>/usr/share/dotnet</RpmInstalledDirectory>
</PropertyGroup>
<PropertyGroup>
<RpmLayoutDirectory>$(RpmIntermediatesDir)/RpmLayoutDirectory/</RpmLayoutDirectory>
<RpmLayoutPackageRoot>$(RpmLayoutDirectory)package_root</RpmLayoutPackageRoot>
<RpmLayoutSDK>$(RpmLayoutPackageRoot)/sdk</RpmLayoutSDK>
<RpmLayoutDocs>$(RpmLayoutDirectory)docs</RpmLayoutDocs> <!-- Man Pages -->
<RpmLayoutTemplates>$(RpmLayoutDirectory)templates</RpmLayoutTemplates> <!-- Copyright, Changelog -->
<RpmLayoutScripts>$(RpmLayoutDirectory)scripts</RpmLayoutScripts>
</PropertyGroup>
<PropertyGroup>
<SdkRpmPackageVersion>$(SdkVersion)</SdkRpmPackageVersion>
<SdkRpmPackageName>$(ArtifactNameCombinedHostHostFxrFrameworkSdk)-$(SdkRpmPackageVersion)</SdkRpmPackageName>
<SharedFxRpmPackageVersion>$(MicrosoftNETCoreAppPackageVersion)</SharedFxRpmPackageVersion>
<SharedFxRpmPackageName>dotnet-runtime-$(SharedFxRpmPackageVersion)</SharedFxRpmPackageName>
<SharedFxRpmPackageName>$(SharedFxRpmPackageName.ToLower())</SharedFxRpmPackageName>
<HostFxrRpmPackageVersion>$(HostFxrVersion)</HostFxrRpmPackageVersion>
<HostFxrRpmPackageName>dotnet-hostfxr-$(HostFxrRpmPackageVersion)</HostFxrRpmPackageName>
<HostFxrRpmPackageName>$(HostFxrRpmPackageName.ToLower())</HostFxrRpmPackageName>
<HostRpmPackageName>dotnet-host</HostRpmPackageName>
<AspNetCoreSharedFxRpmPackageName>aspnetcore-runtime-$(AspNetCoreVersion)</AspNetCoreSharedFxRpmPackageName>
<AspNetCoreSharedFxRpmPackageName>$(AspNetCoreSharedFxRpmPackageName.ToLower())</AspNetCoreSharedFxRpmPackageName>
<AfterInstallHostScriptTemplateFile>$(ScriptsDir)/$(AfterInstallHostScriptName)</AfterInstallHostScriptTemplateFile>
<AfterInstallHostScriptDestinationFile>$(RpmLayoutScripts)/$(AfterInstallHostScriptName)</AfterInstallHostScriptDestinationFile>
</PropertyGroup>
<PropertyGroup>
<EndToEndTestProject>$(RepoRoot)/test/EndToEnd/EndToEnd.csproj</EndToEndTestProject>
</PropertyGroup>
</Target>
<Target Name="TestFPMTool">
<!-- run FPM -->
<Exec Command="fpm --help > /dev/null" ContinueOnError="True">
<Output TaskParameter="ExitCode" PropertyName="FPMExitCode"/>
</Exec>
<!-- Check if it returned 0 -->
<PropertyGroup>
<FPMPresent>false</FPMPresent>
<FPMPresent Condition=" '$(FPMExitCode)' == '0' ">True</FPMPresent>
</PropertyGroup>
<!-- Workaround for Jenkins machines that don't have the necessary packages https://github.com/dotnet/core-setup/issues/2260 -->
<Message Condition=" '$(FPMPresent)' != 'True' "
Text="FPM tool Not found, RPM packages will not be built."
Importance="High"/>
</Target>
<Target Name="TestSdkRpm"
DependsOnTargets="RestoreTests"
Condition=" '$(CLIBUILD_SKIP_TESTS)' != 'true' and '$(IsRPMBasedDistro)' == 'True' and '$(FPMPresent)' == 'True' "
Inputs="$(DownloadedSharedHostInstallerFile);
$(DownloadedHostFxrInstallerFile);
$(DownloadedSharedFrameworkInstallerFile);
$(DownloadedAspNetCoreSharedFxInstallerFile);
$(RpmTestResultsXmlFile);"
Outputs="$(RpmTestResultsXmlFile)" >
<!-- Install Dependencies and SDK Packages -->
<Exec Command="sudo yum -y install $(DownloadedSharedHostInstallerFile)" />
<Exec Command="sudo yum -y install $(DownloadedHostFxrInstallerFile)" />
<Exec Command="sudo yum -y install $(DownloadedSharedFrameworkInstallerFile)" />
<!-- Ignore dependencies, which may have an incoherent dependency on dotnet-runtime -->
<Exec Command="sudo rpm --install --nodeps $(DownloadedAspNetCoreSharedFxInstallerFile)" />
<Exec Command="sudo yum -y install $(SdkInstallerFile)" />
<!-- Run Tests -->
<DotNetRestore ProjectPath="$(EndToEndTestProject)"
ToolPath="$(RpmInstalledDirectory)" />
<DotNetTest ProjectPath="$(EndToEndTestProject)"
EnvironmentVariables="@(TestSdkRpmTaskEnvironmentVariables)"
ToolPath="$(RpmInstalledDirectory)" />
<!-- Clean up Packages -->
<Exec Command="sudo yum remove -y $(SdkRpmPackageName)" />
<Exec Command="sudo yum remove -y $(AspNetCoreSharedFxRpmPackageName)" />
<Exec Command="sudo yum remove -y $(SharedFxRpmPackageName)" />
<Exec Command="sudo yum remove -y $(HostFxrRpmPackageName)" />
<Exec Command="sudo yum remove -y $(HostRpmPackageName)" />
</Target>
</Project>