267 lines
13 KiB
XML
267 lines
13 KiB
XML
<Project>
|
|
<Target Name="BuildInstallers" DependsOnTargets="GenerateCumulativeArchives;GenerateRpms;GenerateDebs" />
|
|
|
|
<Target Name="_EnsureInstallerPrerequisites">
|
|
<MakeDir Directories="$(_InstallersOutputDir)" />
|
|
|
|
<!-- Check Docker server OS -->
|
|
<Exec Command="docker version -f "{{.Server.Os}}"" StandardOutputImportance="Normal" ConsoleToMSBuild="true">
|
|
<Output TaskParameter="ConsoleOutput" PropertyName="DockerHostOS" />
|
|
</Exec>
|
|
|
|
<Error
|
|
Text="Docker host must be using Linux containers."
|
|
Condition="'$(DockerHostOS)' != 'linux'"/>
|
|
<Error
|
|
Text="Expected archive missing at $(SharedFxIntermediateArchiveFilePrefix)-%(WindowsSharedFxRIDs.Identity).zip."
|
|
Condition="!Exists('$(SharedFxIntermediateArchiveFilePrefix)-%(WindowsSharedFxRIDs.Identity).zip')" />
|
|
<Error
|
|
Text="Expected archive missing at $(SharedFxIntermediateArchiveFilePrefix)-%(NonWindowsSharedFxRIDs.Identity).tar.gz."
|
|
Condition="!Exists('$(SharedFxIntermediateArchiveFilePrefix)-%(NonWindowsSharedFxRIDs.Identity).tar.gz')" />
|
|
</Target>
|
|
|
|
<Target Name="_DownloadInstallers">
|
|
<!-- Download dotnet installers -->
|
|
<MakeDir Directories="$(_InstallerSourceDir)" />
|
|
<KoreBuild.Tasks.DownloadFile
|
|
Uri="$(RuntimeArchiveLinkPrefix)-%(WindowsSharedFxRIDs.Identity).zip$(DotNetAssetRootAccessTokenSuffix)"
|
|
DestinationPath="$(_InstallerSourceDir)$(DotnetRuntimeInstallerPrefix)-%(WindowsSharedFxRIDs.Identity).zip"
|
|
Condition="!Exists('$(_InstallerSourceDir)$(DotnetRuntimeInstallerPrefix)-%(WindowsSharedFxRIDs.Identity).zip')" />
|
|
<KoreBuild.Tasks.DownloadFile
|
|
Uri="$(RuntimeArchiveLinkPrefix)-%(NonWindowsSharedFxRIDs.Identity).tar.gz$(DotNetAssetRootAccessTokenSuffix)"
|
|
DestinationPath="$(_InstallerSourceDir)$(DotnetRuntimeInstallerPrefix)-%(NonWindowsSharedFxRIDs.Identity).tar.gz"
|
|
Condition="!Exists('$(_InstallerSourceDir)$(DotnetRuntimeInstallerPrefix)-%(NonWindowsSharedFxRIDs.Identity).tar.gz')" />
|
|
</Target>
|
|
|
|
<Target Name="_GenerateCumulativeArchive">
|
|
<PropertyGroup>
|
|
<ArchiveExtension>.tar.gz</ArchiveExtension>
|
|
<ArchiveExtension Condition="$(SharedFxPlatform.StartsWith('win'))">.zip</ArchiveExtension>
|
|
</PropertyGroup>
|
|
|
|
<!-- Clear working directory -->
|
|
<RemoveDir Directories="$(_WorkRoot)" />
|
|
<MakeDir Directories="$(_WorkRoot)" />
|
|
|
|
<!-- Create layout: Aspnet Runtime -->
|
|
<Exec
|
|
Command="tar -xzf $(SharedFxIntermediateArchiveFilePrefix)-$(SharedFxPlatform)$(ArchiveExtension) -C $(_WorkRoot)"
|
|
Condition="'$(ArchiveExtension)' == '.tar.gz'"/>
|
|
<Exec
|
|
Command="tar -xzf $(_InstallerSourceDir)$(DotnetRuntimeInstallerPrefix)-$(SharedFxPlatform)$(ArchiveExtension) -C $(_WorkRoot)"
|
|
Condition="'$(ArchiveExtension)' == '.tar.gz'"/>
|
|
<UnzipArchive
|
|
File="$(SharedFxIntermediateArchiveFilePrefix)-$(SharedFxPlatform)$(ArchiveExtension)"
|
|
Destination="$(_WorkRoot)"
|
|
Condition="'$(ArchiveExtension)' == '.zip'" />
|
|
<UnzipArchive
|
|
File="$(_InstallerSourceDir)$(DotnetRuntimeInstallerPrefix)-$(SharedFxPlatform)$(ArchiveExtension)"
|
|
Destination="$(_WorkRoot)"
|
|
Condition="'$(ArchiveExtension)' == '.zip'" />
|
|
|
|
<ItemGroup>
|
|
<SharedFxArchiveFiles Include="$(_WorkRoot)**\*" />
|
|
</ItemGroup>
|
|
|
|
<!-- Create Aspnet Runtime archive -->
|
|
<Exec
|
|
Command="tar -czf $(_InstallersOutputDir)$(SharedFxInstallerName)-$(PackageVersion)-$(SharedFxPlatform)$(ArchiveExtension) -C $(_WorkRoot) ."
|
|
Condition="'$(ArchiveExtension)' == '.tar.gz'"/>
|
|
<ZipArchive
|
|
File="$(_InstallersOutputDir)$(SharedFxInstallerName)-$(PackageVersion)-$(SharedFxPlatform)$(ArchiveExtension)"
|
|
SourceFiles="@(SharedFxArchiveFiles)"
|
|
WorkingDirectory="$(_WorkRoot)"
|
|
Overwrite="true"
|
|
Condition="'$(ArchiveExtension)' == '.zip'"/>
|
|
</Target>
|
|
|
|
<Target Name="GenerateCumulativeArchives" DependsOnTargets="_EnsureInstallerPrerequisites;_DownloadInstallers">
|
|
<MSBuild Projects="$(MSBuildProjectFullPath)" Targets="_GenerateCumulativeArchive" Properties="SharedFxPlatform=%(AllSharedFxRIDs.Identity)" />
|
|
</Target>
|
|
|
|
<Target Name="_BuildDockerImage">
|
|
<Exec Command="docker build --build-arg USER_ID=%24(id -u) -t docker-image-$(Image) $(Image)" WorkingDirectory="$(_DockerDir)" />
|
|
</Target>
|
|
|
|
<Target Name="_RemoveDockerImage">
|
|
<Exec Command="docker rmi docker-image-$(Image)" />
|
|
</Target>
|
|
|
|
<Target Name="_GenerateRpm">
|
|
<!-- Clear working directory -->
|
|
<RemoveDir Directories="$(_WorkRoot)" />
|
|
<MakeDir Directories="$(_WorkRoot)" />
|
|
|
|
<!-- Create layout: Extract archive if given -->
|
|
<MakeDir Directories="$(_WorkRoot)package_root\" />
|
|
<Exec Command="tar -xzf $(SharedFxArchive) -C $(_WorkRoot)package_root\" Condition="'$(SharedFxArchive)'!=''" />
|
|
|
|
<!-- Create layout: Create changelog -->
|
|
<PropertyGroup>
|
|
<ChangeLogProps>DATE=$([System.DateTime]::UtcNow.ToString(ddd MMM dd yyyy))</ChangeLogProps>
|
|
<ChangeLogProps>$(ChangeLogProps);MAINTAINER_NAME=$(RpmMaintainerName)</ChangeLogProps>
|
|
<ChangeLogProps>$(ChangeLogProps);MAINTAINER_EMAIL=$(RpmMaintainerEmail)</ChangeLogProps>
|
|
<ChangeLogProps>$(ChangeLogProps);PACKAGE_VERSION=$(RpmVersion)</ChangeLogProps>
|
|
<ChangeLogProps>$(ChangeLogProps);PACKAGE_REVISION=$(RpmRevision)</ChangeLogProps>
|
|
</PropertyGroup>
|
|
|
|
<GenerateFileFromTemplate TemplateFile="$(_PackagingDir)changelog.in" OutputPath="$(_WorkRoot)templates/changelog" Properties="$(ChangeLogProps)" />
|
|
|
|
<!-- Run fpm -->
|
|
<Exec Command="docker run
|
|
--rm
|
|
-v $(RepositoryRoot):$(_DockerRootDir)
|
|
docker-image-$(Image)
|
|
fpm
|
|
--verbose
|
|
-s dir
|
|
-t rpm
|
|
-n $(RpmInstallerPrefix)-$(RpmVersion)
|
|
-p $(_DockerRootDir)artifacts/installers/$(RpmInstallerPrefix)-$(RpmVersion)-$(RpmFileSuffix)
|
|
-v $(RpmVersion)
|
|
--iteration $(RpmRevision)
|
|
-a amd64
|
|
$(RpmArguments)
|
|
--rpm-changelog $(_DockerRootDir).w/templates/changelog
|
|
--rpm-summary "$(RpmMSummary)"
|
|
--description "$(RpmDescription)"
|
|
--maintainer "$(RpmMaintainerName) <$(RpmMaintainerEmail)>"
|
|
--vendor "$(RpmVendor)"
|
|
--license "$(RpmLicense)"
|
|
--url "$(RpmHomepage)"
|
|
$(_DockerRootDir).w/package_root/="$(RpmInstallRoot)/"" />
|
|
</Target>
|
|
|
|
<Target Name="GenerateRpms" DependsOnTargets="_EnsureInstallerPrerequisites">
|
|
<PropertyGroup>
|
|
<Image>rhel.7</Image>
|
|
<RpmVendor>.NET Foundation</RpmVendor>
|
|
<RHInstallRoot>/opt/rh/rh-dotnet20/root/usr/lib64/dotnet</RHInstallRoot>
|
|
</PropertyGroup>
|
|
|
|
<!-- Build Docker Image -->
|
|
<MSBuild Projects="$(MSBuildProjectFullPath)" Targets="_BuildDockerImage" Properties="Image=$(Image)" />
|
|
|
|
<ItemGroup>
|
|
<RpmSharedFxDependencies Include="$(DotnetRuntimeInstallerPrefix)" Version="$(MicrosoftNETCoreApp21PackageVersion)" />
|
|
<RpmRHSharedFxDirectories Include="$(RHInstallRoot)/shared" />
|
|
<RpmGenericSharedFxDirectories Include="$(InstallRoot)/shared" />
|
|
</ItemGroup>
|
|
|
|
<PropertyGroup>
|
|
<RpmSharedFxArguments>@(RpmSharedFxDependencies->' -d "%(Identity) >= %(Version)"', ' ')</RpmSharedFxArguments>
|
|
<RpmRHSharedFxArguments>$(RpmSharedFxArguments) @(RpmRHSharedFxDirectories->' --directories "%(FullPath)"', ' ')</RpmRHSharedFxArguments>
|
|
<RpmGenericSharedFxArguments>$(RpmSharedFxArguments) @(RpmGenericSharedFxDirectories->' --directories "%(FullPath)"', ' ')</RpmGenericSharedFxArguments>
|
|
|
|
<RpmCommonArguments>Image=$(Image);RpmVendor=$(RpmVendor);RpmVersion=$(PackageVersion)</RpmCommonArguments>
|
|
<RpmCommonArguments>$(RpmCommonArguments);RpmMaintainerName=$(MaintainerName);RpmMaintainerEmail=$(MaintainerEmail)</RpmCommonArguments>
|
|
<RpmCommonArguments>$(RpmCommonArguments);RpmHomepage=$(Homepage);RpmRevision=$(PackageRevision)</RpmCommonArguments>
|
|
<RpmCommonArguments>$(RpmCommonArguments);RpmLicense=$(LicenseType)</RpmCommonArguments>
|
|
<RpmCommonArguments>$(RpmCommonArguments);RpmInstallerPrefix=$(SharedFxInstallerName);SharedFxArchive=$(SharedFxIntermediateArchiveFilePrefix)-linux-x64.tar.gz</RpmCommonArguments>
|
|
<RpmCommonArguments>$(RpmCommonArguments);RpmMSummary=$(SharedFxSummary);RpmDescription=$(SharedFxDescription)</RpmCommonArguments>
|
|
<RpmCommonGenericArguments>RpmFileSuffix=x64.rpm;RpmInstallRoot=$(InstallRoot)</RpmCommonGenericArguments>
|
|
<RpmCommonRHArguments>RpmFileSuffix=rh.rhel.7-x64.rpm;RpmInstallRoot=$(RHInstallRoot)</RpmCommonRHArguments>
|
|
|
|
<RpmSharedFxProps>$(RpmCommonArguments);$(RpmCommonGenericArguments);RpmArguments=$(RpmGenericSharedFxArguments)</RpmSharedFxProps>
|
|
<RpmRHSharedFxProps>$(RpmCommonArguments);$(RpmCommonRHArguments);RpmArguments=$(RpmRHSharedFxArguments)</RpmRHSharedFxProps>
|
|
</PropertyGroup>
|
|
|
|
<!-- Generic installer-->
|
|
<MSBuild Projects="$(MSBuildProjectFullPath)" Targets="_GenerateRpm" Properties="$(RpmSharedFxProps)" />
|
|
|
|
<!-- RH installer-->
|
|
<MSBuild Projects="$(MSBuildProjectFullPath)" Targets="_GenerateRpm" Properties="$(RpmRHSharedFxProps)" />
|
|
|
|
<!-- Remove Docker Image to save disk space -->
|
|
<MSBuild Projects="$(MSBuildProjectFullPath)" Targets="_RemoveDockerImage" Properties="Image=$(Image)" />
|
|
</Target>
|
|
|
|
<Target Name="RunDebTool">
|
|
<!-- Install dotnet-deb tool -->
|
|
<MSBuild Projects="$(_DebToolDir)dotnet-deb-tool-consumer.csproj" Targets="Restore" />
|
|
|
|
<!-- Build deb package -->
|
|
<Exec
|
|
Command="dotnet deb-tool -i $(_WorkLayoutDir) -o $(_WorkOutputDir) -n $(INSTALLER_NAME) -v $(INSTALLER_VERSION)"
|
|
WorkingDirectory="$(_DebToolDir)" />
|
|
</Target>
|
|
|
|
<Target Name="_GenerateDeb">
|
|
<!-- Create layout: Clear work directory -->
|
|
<RemoveDir Directories="$(_WorkRoot)" />
|
|
<MakeDir Directories="$(_WorkRoot)" />
|
|
|
|
<!-- Create layout: Extract archive if given -->
|
|
<MakeDir Directories="$(_WorkLayoutDir)package_root\" />
|
|
<Exec Command="tar -xzf $(SharedFxArchive) -C $(_WorkLayoutDir)package_root/" Condition="'$(SharedFxArchive)'!=''" />
|
|
|
|
<!-- Create layout: Generate and Place debian_config.json -->
|
|
<PropertyGroup>
|
|
<DebConfigProps>MAINTAINER_NAME=$(MaintainerName)</DebConfigProps>
|
|
<DebConfigProps>$(DebConfigProps);MAINTAINER_EMAIL=$(MaintainerEmail)</DebConfigProps>
|
|
<DebConfigProps>$(DebConfigProps);HOMEPAGE=$(Homepage)</DebConfigProps>
|
|
<DebConfigProps>$(DebConfigProps);INSTALL_ROOT=$(InstallRoot)</DebConfigProps>
|
|
<DebConfigProps>$(DebConfigProps);PACKAGE_NAME=$(DebPrefix)</DebConfigProps>
|
|
<DebConfigProps>$(DebConfigProps);PACKAGE_REVISION=$(PackageRevision)</DebConfigProps>
|
|
<DebConfigProps>$(DebConfigProps);LICENSE_TYPE=$(LicenseType)</DebConfigProps>
|
|
<DebConfigProps>$(DebConfigProps);SHORT_DESCRIPTION=$(DebSummary)</DebConfigProps>
|
|
<DebConfigProps>$(DebConfigProps);LONG_DESCRIPTION=$(DebDescription)</DebConfigProps>
|
|
<DebConfigProps>$(DebConfigProps);DEBIAN_DEPENDENCIES=$(DebDependencies)</DebConfigProps>
|
|
</PropertyGroup>
|
|
|
|
<GenerateFileFromTemplate TemplateFile="$(DebConfigInFile)" OutputPath="$(_WorkLayoutDir)debian_config.json" Properties="$(DebConfigProps)" />
|
|
|
|
<!-- Build SharedFx Bundle Deb package -->
|
|
|
|
<Exec Command="docker run
|
|
--rm
|
|
-v $(RepositoryRoot):$(_DockerRootDir)
|
|
-e DOTNET_SKIP_FIRST_TIME_EXPERIENCE=true
|
|
-e INSTALLER_NAME=$(DebPrefix)-$(DebVersion)
|
|
-e INSTALLER_VERSION=$(DebVersion)
|
|
docker-image-$(Image)
|
|
./build.sh /t:RunDebTool"
|
|
ContinueOnError="WarnAndContinue" />
|
|
|
|
<!-- Copy SharedFx packages to output -->
|
|
<ItemGroup>
|
|
<GeneratedDebFiles Include="$(_WorkOutputDir)/*.deb" />
|
|
</ItemGroup>
|
|
|
|
<Error Text="@(GeneratedDebFiles->Count()) deb installer files generated." Condition="'@(GeneratedDebFiles->Count())' != 1" />
|
|
|
|
<Copy
|
|
DestinationFiles="$(_InstallersOutputDir)$(DebPrefix)-$(DebVersion)-x64.deb"
|
|
SourceFiles="@(GeneratedDebFiles)"
|
|
OverwriteReadOnlyFiles="True"
|
|
SkipUnchangedFiles="False"
|
|
UseHardlinksIfPossible="False" />
|
|
</Target>
|
|
|
|
<Target Name="_GenerateDebOnPlatform">
|
|
<!-- Build Docker Image -->
|
|
<MSBuild Projects="$(MSBuildProjectFullPath)" Targets="_BuildDockerImage" Properties="Image=$(Image)" />
|
|
|
|
<ItemGroup>
|
|
<_DebSharedFxDependencies Include="$(DotnetRuntimeInstallerPrefix)"/>
|
|
</ItemGroup>
|
|
|
|
<PropertyGroup>
|
|
<DebSharedFxDependencies>@(_DebSharedFxDependencies->'"%(Identity)": {}', ', ')</DebSharedFxDependencies>
|
|
|
|
<CommonProps>Image=$(Image);DebVersion=$(PackageVersion)</CommonProps>
|
|
<DebSharedFxProps>DebPrefix=$(SharedFxInstallerName);DebSummary=$(SharedFxSummary);DebDescription=$(SharedFxDescription)</DebSharedFxProps>
|
|
<DebSharedFxProps>$(DebSharedFxProps);DebDependencies=$(DebSharedFxDependencies);SharedFxArchive=$(SharedFxIntermediateArchiveFilePrefix)-linux-x64.tar.gz</DebSharedFxProps>
|
|
</PropertyGroup>
|
|
|
|
<MSBuild Projects="$(MSBuildProjectFullPath)" Targets="_GenerateDeb" Properties="$(CommonProps);$(DebSharedFxProps)" />
|
|
|
|
<!-- Remove Docker Image to save disk space -->
|
|
<MSBuild Projects="$(MSBuildProjectFullPath)" Targets="_RemoveDockerImage" Properties="Image=$(Image)" />
|
|
</Target>
|
|
|
|
<Target Name="GenerateDebs" DependsOnTargets="_EnsureInstallerPrerequisites">
|
|
<MSBuild Projects="$(MSBuildProjectFullPath)" Targets="_GenerateDebOnPlatform" Properties="PackageVersion=$(PackageVersion);Image=ubuntu.14.04" />
|
|
</Target>
|
|
</Project>
|