3419a87d6f
Reference from https://github.com/dotnet/core-setup/tree/master/src/pkg/packaging/rpm The goal is to have parity with Debian, but does not publish to the feed When run the script with rhel, it will produce rpm file in the package step and publish rpm to the blob storage
213 lines
No EOL
9.7 KiB
XML
213 lines
No EOL
9.7 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">
|
|
<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>$(SharedFrameworkVersion)</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>
|
|
</PropertyGroup>
|
|
|
|
<PropertyGroup>
|
|
<EndToEndTestProject>$(RepoRoot)/test/EndToEnd/EndToEnd.csproj</EndToEndTestProject>
|
|
</PropertyGroup>
|
|
|
|
<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)/**/*"/>
|
|
<AspNetRuntimeFilesInput Include="$(AspNetRuntimePackageStorePublishDirectory)/**/*" />
|
|
</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"/>
|
|
|
|
<Copy SourceFiles="@(AspNetRuntimeFilesInput)"
|
|
DestinationFiles="@(AspNetRuntimeFilesInput ->'$(RpmLayoutPackageRoot)/%(RecursiveDir)%(Filename)%(Extension)')"
|
|
OverwriteReadOnlyFiles="True"
|
|
SkipUnchangedFiles="False"
|
|
UseHardlinksIfPossible="False"/>
|
|
|
|
<!-- Replace config json variables -->
|
|
<ItemGroup>
|
|
<SDKTokenValue Include="%SHARED_HOST_RPM_VERSION%">
|
|
<ReplacementString>$(SharedFrameworkVersion)</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>
|
|
</ItemGroup>
|
|
|
|
<ItemGroup>
|
|
<TestSdkRpmTaskEnvironmentVariables Include="PATH=$(RpmInstalledDirectory)$(PathListSeparator)$(PATH)" />
|
|
<GeneratedInstallers Include="$(SdkInstallerFile)" />
|
|
</ItemGroup>
|
|
|
|
<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="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"
|
|
Condition=" '$(IsRPMBasedDistro)' == 'True' and '$(FPMPresent)' == 'True' "
|
|
Inputs="$(DownloadedSharedHostInstallerFile);
|
|
$(DownloadedHostFxrInstallerFile);
|
|
$(DownloadedSharedFrameworkInstallerFile);
|
|
$(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)" />
|
|
|
|
<Exec Command="sudo yum -y install $(SdkInstallerFile)" />
|
|
|
|
<!-- Run Tests -->
|
|
<DotNetRestore ProjectPath="$(EndToEndTestProject)"
|
|
ToolPath="$(RpmInstalledDirectory)" />
|
|
|
|
<DotNetTest ProjectPath="$(EndToEndTestProject)"
|
|
EnvironmentVariables="@(TestSdkDebTaskEnvironmentVariables)"
|
|
ToolPath="$(RpmInstalledDirectory)" />
|
|
|
|
<!-- Clean up Packages -->
|
|
<Exec Command="sudo yum remove -y $(SdkRpmPackageName)" />
|
|
<Exec Command="sudo yum remove -y $(SharedFxRpmPackageName)" />
|
|
<Exec Command="sudo yum remove -y $(HostFxrRpmPackageName)" />
|
|
<Exec Command="sudo yum remove -y $(HostRpmPackageName)" />
|
|
</Target>
|
|
</Project> |