<?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> <!-- Re-enable "TestSdkRpm" when the following issue is resolved: https://github.com/dotnet/cli/issues/9672 --> <Target Name="GenerateRpms" DependsOnTargets="TestFPMTool;BuildRpms" 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>$(MicrosoftNETCoreAppMajorMinorPatchVersion)</ReplacementString> </SDKTokenValue> <SDKTokenValue Include="%ASPNETCORE_SHAREDFX_RPM_PACKAGE_NAME%"> <ReplacementString>$(AspNetCoreSharedFxRpmPackageName)</ReplacementString> </SDKTokenValue> <SDKTokenValue Include="%ASPNETCORE_SHAREDFX_RPM_PACKAGE_VERSION%"> <ReplacementString>$(AspNetCoreMajorMinorPatchVersion)</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 InputFiles="$(AfterInstallHostScriptTemplateFile)" DestinationFiles="$(AfterInstallHostScriptDestinationFile)" ReplacementItems="@(AfterInstallHostTokenValue)"/> <Chmod Glob="$(AfterInstallHostScriptDestinationFile)" Mode="ugo+x" /> <ReplaceFileContents InputFiles="$(ConfigJsonFile)" DestinationFiles="$(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" DependsOnTargets="CalculateLinuxNativeInstallerDependencyVersions"> <PropertyGroup> <RuntimeDepsPackageVersion>$(MicrosoftNETCoreAppPackageVersion)</RuntimeDepsPackageVersion> <RuntimeDepsPackageFileName>dotnet-runtime-deps-$(RuntimeDepsPackageVersion)</RuntimeDepsPackageFileName> <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>$(MajorMinorVersion)</SdkRpmPackageVersion> <SdkRpmPackageName>$(ArtifactNameCombinedHostHostFxrFrameworkSdk)-$(SdkRpmPackageVersion)</SdkRpmPackageName> <SharedFxRpmPackageVersion>$(MicrosoftNETCoreAppMajorMinorVersion)</SharedFxRpmPackageVersion> <SharedFxRpmPackageFileVersion>$(MicrosoftNETCoreAppPackageVersion)</SharedFxRpmPackageFileVersion> <SharedFxRpmPackageName>dotnet-runtime-$(SharedFxRpmPackageVersion)</SharedFxRpmPackageName> <SharedFxRpmPackageName>$(SharedFxRpmPackageName.ToLower())</SharedFxRpmPackageName> <SharedFxRpmPackageFileName>dotnet-runtime-$(SharedFxRpmPackageFileVersion)</SharedFxRpmPackageFileName> <SharedFxRpmPackageFileName>$(SharedFxRpmPackageFileName.ToLower())</SharedFxRpmPackageFileName> <HostFxrRpmPackageVersion>$(HostFxrVersion)</HostFxrRpmPackageVersion> <HostFxrRpmPackageName>dotnet-hostfxr-$(HostFxrRpmPackageVersion)</HostFxrRpmPackageName> <HostFxrRpmPackageName>$(HostFxrRpmPackageName.ToLower())</HostFxrRpmPackageName> <HostRpmPackageName>dotnet-host</HostRpmPackageName> <AspNetCoreSharedFxRpmPackageName>aspnetcore-runtime-$(AspNetCoreMajorMinorVersion)</AspNetCoreSharedFxRpmPackageName> <AspNetCoreSharedFxRpmPackageName>$(AspNetCoreSharedFxRpmPackageName.ToLower())</AspNetCoreSharedFxRpmPackageName> <AspNetCoreSharedFxRpmPackageFileName>aspnetcore-runtime-$(AspNetCoreVersion)</AspNetCoreSharedFxRpmPackageFileName> <AspNetCoreSharedFxRpmPackageFileName>$(AspNetCoreSharedFxRpmPackageFileName.ToLower())</AspNetCoreSharedFxRpmPackageFileName> <AfterInstallHostScriptTemplateFile>$(ScriptsDir)/$(AfterInstallHostScriptName)</AfterInstallHostScriptTemplateFile> <AfterInstallHostScriptDestinationFile>$(RpmLayoutScripts)/$(AfterInstallHostScriptName)</AfterInstallHostScriptDestinationFile> </PropertyGroup> <PropertyGroup> <EndToEndTestProject>$(RepoRoot)/test/EndToEnd/EndToEnd.csproj</EndToEndTestProject> </PropertyGroup> </Target> <Target Name="TestFPMTool"> <!-- run FPM --> <!-- NB: IgnoreExitCode prevents Exec from failing, but does not prevent us from retrieving the exit code. --> <Exec Command="fpm --help > /dev/null 2>&1" IgnoreExitCode="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 $(DownloadedRuntimeDepsInstallerFile)" /> <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 $(AspNetCoreSharedFxRpmPackageFileName)" /> <Exec Command="sudo yum remove -y $(SharedFxRpmPackageFileName)" /> <Exec Command="sudo yum remove -y $(HostFxrRpmPackageName)" /> <Exec Command="sudo yum remove -y $(HostRpmPackageName)" /> <Exec Command="sudo yum remove -y $(RuntimeDepsPackageFileName)" /> </Target> </Project>