dotnet-installer/src/redist/targets/GenerateRPMs.targets

323 lines
19 KiB
XML

<Project>
<PropertyGroup>
<RpmConfigJsonName>rpm_config.json</RpmConfigJsonName>
<TemplatesDir>$(MSBuildThisFileDirectory)packaging/rpm/templates</TemplatesDir>
<ScriptsDir>$(MSBuildThisFileDirectory)packaging/rpm/scripts</ScriptsDir>
<AfterInstallHostScriptName>after_install_host.sh</AfterInstallHostScriptName>
</PropertyGroup>
<Target Name="GenerateRpms"
DependsOnTargets="GetCurrentRuntimeInformation;
GenerateRpmsInner" />
<Target Name="GenerateRpmsInner"
DependsOnTargets="TestFPMTool;BuildRpms;TestSdkRpm"
Condition=" '$(IsRPMBasedDistro)' == 'True' "
Outputs="@(GeneratedInstallers)"/>
<Target Name="BuildRpms"
DependsOnTargets="GenerateSdkRpm"
Condition=" '$(IsRPMBasedDistro)' == '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)/**/*"/>
<DotnetNewTemplatesFiles Include="$(DotnetNewTemplatesRoot)**/*" />
<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="@(DotnetNewTemplatesFiles)"
DestinationFiles="@(DotnetNewTemplatesFiles->'$(RpmLayoutDotnetNewTemplates)/%(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_FRAMEWORK_RPM_PACKAGE_VERSION%">
<ReplacementString>$(MicrosoftNETCoreAppRuntimeMajorMinorPatchVersion)</ReplacementString>
</SDKTokenValue>
<SDKTokenValue Include="%NETCOREAPP_TARGETING_PACK_RPM_PACKAGE_VERSION%">
<ReplacementString>$(MicrosoftNETCoreAppRefMajorMinorPatchVersion)</ReplacementString>
</SDKTokenValue>
<SDKTokenValue Include="%NETSTANDARD_TARGETING_PACK_RPM_PACKAGE_VERSION%">
<ReplacementString>$(NetStandardTargetingPackMajorMinorPatchVersion)</ReplacementString>
</SDKTokenValue>
<SDKTokenValue Include="%ASPNETCORE_SHAREDFX_RPM_PACKAGE_VERSION%">
<ReplacementString>$(AspNetCoreRuntimeMajorMinorPatchVersion)</ReplacementString>
</SDKTokenValue>
<SDKTokenValue Include="%ASPNET_TARGETING_PACK_RPM_PACKAGE_VERSION%">
<ReplacementString>$(AspNetCoreRefMajorMinorPatchVersion)</ReplacementString>
</SDKTokenValue>
<SDKTokenValue Include="%SHARED_FRAMEWORK_RPM_PACKAGE_NAME%">
<ReplacementString>$(SharedFxRpmPackageName)</ReplacementString>
</SDKTokenValue>
<SDKTokenValue Include="%NETCOREAPP_TARGETING_PACK_RPM_PACKAGE_NAME%">
<ReplacementString>$(NetCoreAppTargetingPackRpmPackageName)</ReplacementString>
</SDKTokenValue>
<SDKTokenValue Include="%NETCORE_APPHOST_PACK_RPM_PACKAGE_NAME%">
<ReplacementString>$(NetCoreAppHostPackRpmPackageName)</ReplacementString>
</SDKTokenValue>
<SDKTokenValue Include="%NETSTANDARD_TARGETING_PACK_RPM_PACKAGE_NAME%">
<ReplacementString>$(NetStandardTargetingPackRpmPackageName)</ReplacementString>
</SDKTokenValue>
<SDKTokenValue Include="%ASPNETCORE_SHAREDFX_RPM_PACKAGE_NAME%">
<ReplacementString>$(AspNetCoreSharedFxRpmPackageName)</ReplacementString>
</SDKTokenValue>
<SDKTokenValue Include="%ASPNET_TARGETING_PACK_RPM_PACKAGE_NAME%">
<ReplacementString>$(AspNetTargetingPackRpmPackageName)</ReplacementString>
</SDKTokenValue>
<SDKTokenValue Include="%SDK_NUGET_VERSION%">
<ReplacementString>$(Version)</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>$(Version)</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="$(SdkRPMInstallerFile)" />-->
</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;GetCurrentRuntimeInformation;SetupFileExtensions">
<PropertyGroup>
<SdkRpmPackageVersion>$(MajorMinorVersion)</SdkRpmPackageVersion>
<SdkRpmPackageName>$(ArtifactNameCombinedHostHostFxrFrameworkSdk)-$(SdkRpmPackageVersion)</SdkRpmPackageName>
<RpmPackageVersion>$(Version)</RpmPackageVersion>
<InputRoot>$(RedistLayoutPath)sdk/</InputRoot>
<DotnetNewTemplatesRoot>$(RedistLayoutPath)templates/</DotnetNewTemplatesRoot>
<SdkRPMInstallerFile>$(ArtifactsShippingPackagesDir)$(DistroSpecificArtifactNameWithVersionCombinedHostHostFxrFrameworkSdk)$(InstallerExtension)</SdkRPMInstallerFile>
<RpmFile>$(SdkRPMInstallerFile)</RpmFile>
<!-- Need to acquire manpage files from CLI repo: https://github.com/dotnet/cli/issues/10266 -->
<ManPagesDir>$(RepoRoot)/Documentation/manpages</ManPagesDir>
<EndToEndTestProject>$(RepoRoot)/test/EndToEnd/EndToEnd.csproj</EndToEndTestProject>
<ConfigJsonFile>$(MSBuildThisFileDirectory)packaging/rpm/dotnet-config.json</ConfigJsonFile>
<RpmIntermediatesDir>$(IntermediateOutputPath)$(SdkRpmPackageName)/$(RpmPackageVersion)</RpmIntermediatesDir>
<RpmTestResultsXmlFile>$(RpmIntermediatesDir)/rpm-testResults.xml</RpmTestResultsXmlFile>
<RpmInstalledDirectory>/usr/share/dotnet</RpmInstalledDirectory>
</PropertyGroup>
<PropertyGroup>
<RpmLayoutDirectory>$(RpmIntermediatesDir)/RpmLayoutDirectory/</RpmLayoutDirectory>
<RpmLayoutPackageRoot>$(RpmLayoutDirectory)package_root</RpmLayoutPackageRoot>
<RpmLayoutSDK>$(RpmLayoutPackageRoot)/sdk</RpmLayoutSDK>
<RpmLayoutDotnetNewTemplates>$(RpmLayoutPackageRoot)/templates</RpmLayoutDotnetNewTemplates>
<RpmLayoutDocs>$(RpmLayoutDirectory)docs</RpmLayoutDocs> <!-- Man Pages -->
<RpmLayoutTemplates>$(RpmLayoutDirectory)templates</RpmLayoutTemplates> <!-- Copyright, Changelog -->
<RpmLayoutScripts>$(RpmLayoutDirectory)scripts</RpmLayoutScripts>
</PropertyGroup>
<PropertyGroup>
<SharedFxRpmPackageVersion>$(MicrosoftNETCoreAppMajorMinorVersion)</SharedFxRpmPackageVersion>
<SharedFxRpmPackageFileVersion>$(MicrosoftNETCoreAppRuntimePackageVersion)</SharedFxRpmPackageFileVersion>
<SharedFxRpmPackageName>dotnet-runtime-$(SharedFxRpmPackageVersion)</SharedFxRpmPackageName>
<SharedFxRpmPackageName>$(SharedFxRpmPackageName.ToLower())</SharedFxRpmPackageName>
<SharedFxRpmPackageFileName>dotnet-runtime-$(SharedFxRpmPackageFileVersion)</SharedFxRpmPackageFileName>
<SharedFxRpmPackageFileName>$(SharedFxRpmPackageFileName.ToLower())</SharedFxRpmPackageFileName>
<NetCoreAppTargetingPackRpmPackageName>dotnet-targeting-pack-$(SharedFxRpmPackageVersion)</NetCoreAppTargetingPackRpmPackageName>
<NetCoreAppTargetingPackRpmPackageName>$(NetCoreAppTargetingPackRpmPackageName.ToLower())</NetCoreAppTargetingPackRpmPackageName>
<NetCoreAppTargetingPackRpmPackageFileName>dotnet-targeting-pack-$(MicrosoftNETCoreAppRefPackageVersion)</NetCoreAppTargetingPackRpmPackageFileName>
<NetCoreAppTargetingPackRpmPackageFileName>$(NetCoreAppTargetingPackRpmPackageFileName.ToLower())</NetCoreAppTargetingPackRpmPackageFileName>
<NetCoreAppHostPackRpmPackageName>dotnet-apphost-pack-$(SharedFxRpmPackageVersion)</NetCoreAppHostPackRpmPackageName>
<NetCoreAppHostPackRpmPackageName>$(NetCoreAppHostPackRpmPackageName.ToLower())</NetCoreAppHostPackRpmPackageName>
<NetCoreAppHostPackRpmPackageFileName>dotnet-apphost-pack-$(SharedFxRpmPackageFileVersion)</NetCoreAppHostPackRpmPackageFileName>
<NetCoreAppHostPackRpmPackageFileName>$(NetCoreAppHostPackRpmPackageFileName.ToLower())</NetCoreAppHostPackRpmPackageFileName>
<NetStandardTargetingPackRpmPackageName>netstandard-targeting-pack-$(NetStandardTargetingPackMajorMinorVersion)</NetStandardTargetingPackRpmPackageName>
<NetStandardTargetingPackRpmPackageName>$(NetStandardTargetingPackRpmPackageName.ToLower())</NetStandardTargetingPackRpmPackageName>
<NetStandardTargetingPackRpmPackageFileName>netstandard-targeting-pack-$(NETStandardLibraryRefPackageVersion)</NetStandardTargetingPackRpmPackageFileName>
<NetStandardTargetingPackRpmPackageFileName>$(NetStandardTargetingPackRpmPackageFileName.ToLower())</NetStandardTargetingPackRpmPackageFileName>
<HostFxrRpmPackageName>dotnet-hostfxr-$(SharedFxRpmPackageVersion)</HostFxrRpmPackageName>
<HostFxrRpmPackageName>$(HostFxrRpmPackageName.ToLower())</HostFxrRpmPackageName>
<RuntimeDepsPackageName>dotnet-runtime-deps-$(SharedFxRpmPackageVersion)</RuntimeDepsPackageName>
<RuntimeDepsPackageName>$(RuntimeDepsPackageName.ToLower())</RuntimeDepsPackageName>
<SharedHostRpmPackageName>dotnet-host</SharedHostRpmPackageName>
<AspNetCoreSharedFxRpmPackageName>aspnetcore-runtime-$(AspNetCoreMajorMinorVersion)</AspNetCoreSharedFxRpmPackageName>
<AspNetCoreSharedFxRpmPackageName>$(AspNetCoreSharedFxRpmPackageName.ToLower())</AspNetCoreSharedFxRpmPackageName>
<AspNetCoreSharedFxRpmPackageFileName>aspnetcore-runtime-$(MicrosoftAspNetCoreRuntimePackageVersion)</AspNetCoreSharedFxRpmPackageFileName>
<AspNetCoreSharedFxRpmPackageFileName>$(AspNetCoreSharedFxRpmPackageFileName.ToLower())</AspNetCoreSharedFxRpmPackageFileName>
<AspNetTargetingPackRpmPackageName>aspnetcore-targeting-pack-$(AspNetCoreMajorMinorVersion)</AspNetTargetingPackRpmPackageName>
<AspNetTargetingPackRpmPackageName>$(AspNetTargetingPackRpmPackageName.ToLower())</AspNetTargetingPackRpmPackageName>
<AspNetTargetingPackRpmPackageFileName>aspnetcore-targeting-pack-$(MicrosoftAspNetCoreRefPackageVersion)</AspNetTargetingPackRpmPackageFileName>
<AspNetTargetingPackRpmPackageFileName>$(AspNetTargetingPackRpmPackageFileName.ToLower())</AspNetTargetingPackRpmPackageFileName>
<AfterInstallHostScriptTemplateFile>$(ScriptsDir)/$(AfterInstallHostScriptName)</AfterInstallHostScriptTemplateFile>
<AfterInstallHostScriptDestinationFile>$(RpmLayoutScripts)/$(AfterInstallHostScriptName)</AfterInstallHostScriptDestinationFile>
</PropertyGroup>
<PropertyGroup>
<DownloadedNetCoreAppTargetingPackInstallerFile>$(DownloadsFolder)$(DownloadedNetCoreAppTargetingPackInstallerFileName)</DownloadedNetCoreAppTargetingPackInstallerFile>
<DownloadedNetStandardTargetingPackInstallerFile>$(DownloadsFolder)$(DownloadedNetStandardTargetingPackInstallerFileName)</DownloadedNetStandardTargetingPackInstallerFile>
<DownloadedNetCoreAppHostPackInstallerFile>$(DownloadsFolder)$(DownloadedNetCoreAppHostPackInstallerFileName)</DownloadedNetCoreAppHostPackInstallerFile>
<DownloadedAspNetTargetingPackInstallerFile>$(DownloadsFolder)$(DownloadedAspNetTargetingPackInstallerFileName)</DownloadedAspNetTargetingPackInstallerFile>
<DownloadedRuntimeDepsInstallerFile>$(DownloadsFolder)$(DownloadedRuntimeDepsInstallerFileName)</DownloadedRuntimeDepsInstallerFile>
<DownloadedSharedHostInstallerFile>$(DownloadsFolder)$(DownloadedSharedHostInstallerFileName)</DownloadedSharedHostInstallerFile>
<DownloadedHostFxrInstallerFile>$(DownloadsFolder)$(DownloadedHostFxrInstallerFileName)</DownloadedHostFxrInstallerFile>
<DownloadedSharedFrameworkInstallerFile>$(DownloadsFolder)$(DownloadedSharedFrameworkInstallerFileName)</DownloadedSharedFrameworkInstallerFile>
<DownloadedAspNetCoreSharedFxInstallerFile>$(DownloadsFolder)$(DownloadedAspNetCoreSharedFxInstallerFileName)</DownloadedAspNetCoreSharedFxInstallerFile>
</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>&amp;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"
Condition=" '$(CLIBUILD_SKIP_TESTS)' != 'true' and '$(IsRPMBasedDistro)' == 'True' and '$(FPMPresent)' == 'True' "
Inputs="$(DownloadedNetCoreAppTargetingPackInstallerFile);
$(DownloadedNetStandardTargetingPackInstallerFile);
$(DownloadedNetCoreAppHostPackInstallerFile);
$(DownloadedAspNetTargetingPackInstallerFile);
$(DownloadedRuntimeDepsInstallerFile);
$(DownloadedSharedHostInstallerFile);
$(DownloadedHostFxrInstallerFile);
$(DownloadedSharedFrameworkInstallerFile);
$(DownloadedAspNetCoreSharedFxInstallerFile);
$(SdkRPMInstallerFile);
$(RpmTestResultsXmlFile);"
Outputs="$(RpmTestResultsXmlFile)" >
<!-- Install Dependencies and SDK Packages -->
<Exec Command="sudo rpm --import https://packages.microsoft.com/keys/microsoft.asc" />
<Exec Command="sudo rpm -iv $(DownloadedRuntimeDepsInstallerFile)" />
<Exec Command="sudo rpm -iv $(DownloadedNetCoreAppHostPackInstallerFile)" />
<Exec Command="sudo rpm -iv $(DownloadedNetCoreAppTargetingPackInstallerFile)" />
<Exec Command="sudo rpm -iv $(DownloadedNetStandardTargetingPackInstallerFile)" />
<Exec Command="sudo rpm -iv $(DownloadedAspNetTargetingPackInstallerFile)" />
<Exec Command="sudo rpm -iv $(DownloadedSharedHostInstallerFile)" />
<Exec Command="sudo rpm -iv $(DownloadedHostFxrInstallerFile)" />
<Exec Command="sudo rpm -iv $(DownloadedSharedFrameworkInstallerFile)" />
<!-- Ignore dependencies, which may have an incoherent dependency on dotnet-runtime -->
<Exec Command="sudo rpm -iv --nodeps $(DownloadedAspNetCoreSharedFxInstallerFile)" />
<Exec Command="sudo rpm -iv $(SdkRPMInstallerFile)" />
<!-- Run End-2-end Tests https://github.com/dotnet/core-sdk/issues/1174
<DotNetRestore ProjectPath="$(EndToEndTestProject)"
ToolPath="$(RpmInstalledDirectory)" />
<DotNetTest ProjectPath="$(EndToEndTestProject)"
EnvironmentVariables="@(TestSdkRpmTaskEnvironmentVariables)"
ToolPath="$(RpmInstalledDirectory)" />-->
<!-- Clean up Packages -->
<Exec Command="sudo rpm -ev --nodeps $(SdkRpmPackageName)" />
<Exec Command="sudo rpm -ev --nodeps $(AspNetCoreSharedFxRpmPackageName)" />
<Exec Command="sudo rpm -ev --nodeps $(SharedFxRpmPackageName)" />
<Exec Command="sudo rpm -ev --nodeps $(HostFxrRpmPackageName)" />
<Exec Command="sudo rpm -ev --nodeps $(SharedHostRpmPackageName)" />
<Exec Command="sudo rpm -ev --nodeps $(AspNetTargetingPackRpmPackageName)" />
<Exec Command="sudo rpm -ev --nodeps $(NetStandardTargetingPackRpmPackageName)" />
<Exec Command="sudo rpm -ev --nodeps $(NetCoreAppTargetingPackRpmPackageName)" />
<Exec Command="sudo rpm -ev --nodeps $(NetCoreAppHostPackRpmPackageName)" />
<Exec Command="sudo rpm -ev --nodeps $(RuntimeDepsPackageName)" />
</Target>
</Project>