| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253 |
- <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)" />
- <DownloadFile
- SourceUrl="$(RuntimeArchiveLinkPrefix)-%(WindowsSharedFxRIDs.Identity).zip$(DotNetAssetRootAccessTokenSuffix)"
- DestinationFolder="$(_InstallerSourceDir)"
- DestinationFileName="$(DotnetRuntimeFileNamePrefix)-%(WindowsSharedFxRIDs.Identity).zip"
- Condition="!Exists('$(_InstallerSourceDir)$(DotnetRuntimeFileNamePrefix)-%(WindowsSharedFxRIDs.Identity).zip')" />
- <DownloadFile
- SourceUrl="$(RuntimeArchiveLinkPrefix)-%(NonWindowsSharedFxRIDs.Identity).tar.gz$(DotNetAssetRootAccessTokenSuffix)"
- DestinationFolder="$(_InstallerSourceDir)"
- DestinationFileName="$(DotnetRuntimeFileNamePrefix)-%(NonWindowsSharedFxRIDs.Identity).tar.gz"
- Condition="!Exists('$(_InstallerSourceDir)$(DotnetRuntimeFileNamePrefix)-%(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)$(DotnetRuntimeFileNamePrefix)-$(SharedFxPlatform)$(ArchiveExtension) -C $(_WorkRoot)"
- Condition="'$(ArchiveExtension)' == '.tar.gz'"/>
- <UnzipArchive
- File="$(SharedFxIntermediateArchiveFilePrefix)-$(SharedFxPlatform)$(ArchiveExtension)"
- Destination="$(_WorkRoot)"
- Condition="'$(ArchiveExtension)' == '.zip'" />
- <UnzipArchive
- File="$(_InstallerSourceDir)$(DotnetRuntimeFileNamePrefix)-$(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=$(RpmPackageVersion)</ChangeLogProps>
- <ChangeLogProps>$(ChangeLogProps);PACKAGE_REVISION=$(RpmRevision)</ChangeLogProps>
- </PropertyGroup>
- <GenerateFileFromTemplate TemplateFile="$(_PackagingDir)changelog.in" OutputPath="$(_WorkRoot)templates/changelog" Properties="$(ChangeLogProps)" />
- <!-- Run fpm -->
- <!-- Retry added due to fpm/docker race where .w/package_root directory cannot be resolved -->
- <Run
- FileName="docker"
- Command="run --rm -v $(RepositoryRoot):$(_DockerRootDir) docker-image-$(Image) fpm --verbose -s dir -t rpm -n $(RpmName)-$(RpmIdVersion) -p $(_DockerRootDir)artifacts/installers/$(RpmName)-$(RpmFileVersion)-$(RpmFileSuffix) -v $(RpmPackageVersion) --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)/""
- MaxRetries="5"/>
- </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>
- <Rpm_DotnetRuntimeDependencyId>dotnet-runtime-$(AspNetCoreMajorVersion).$(AspNetCoreMinorVersion)</Rpm_DotnetRuntimeDependencyId>
- <Rpm_DotnetRuntimeDependencyVersion>$(MicrosoftNETCoreAppPackageVersion.Split('-')[0])</Rpm_DotnetRuntimeDependencyVersion>
- </PropertyGroup>
- <!-- Build Docker Image -->
- <MSBuild Projects="$(MSBuildProjectFullPath)" Targets="_BuildDockerImage" Properties="Image=$(Image)" />
- <ItemGroup>
- <RpmSharedFxDependencies Include="$(Rpm_DotnetRuntimeDependencyId)" Version="$(Rpm_DotnetRuntimeDependencyVersion)" />
- <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>
- <RpmCommonProps>Image=$(Image);RpmVendor=$(RpmVendor);RpmName=$(SharedFxInstallerName)</RpmCommonProps>
- <RpmCommonProps>$(RpmCommonProps);RpmMaintainerName=$(MaintainerName);RpmMaintainerEmail=$(MaintainerEmail)</RpmCommonProps>
- <RpmCommonProps>$(RpmCommonProps);RpmHomepage=$(Homepage);RpmRevision=$(RpmPackageRevision)</RpmCommonProps>
- <RpmCommonProps>$(RpmCommonProps);RpmLicense=$(LicenseType)</RpmCommonProps>
- <RpmCommonProps>$(RpmCommonProps);SharedFxArchive=$(SharedFxIntermediateArchiveFilePrefix)-linux-x64.tar.gz</RpmCommonProps>
- <RpmCommonProps>$(RpmCommonProps);RpmMSummary=$(SharedFxSummary);RpmDescription=$(SharedFxDescription)</RpmCommonProps>
- <RpmGenericProps>RpmInstallRoot=$(InstallRoot)</RpmGenericProps>
- <RpmRHProps>RpmInstallRoot=$(RHInstallRoot)</RpmRHProps>
- <RpmProps>RpmIdVersion=$(InstallerIdVersion);RpmPackageVersion=$(InstallerPackageVersion);RpmFileVersion=$(PackageVersion)</RpmProps>
- <RpmSharedFxProps>$(RpmCommonProps);$(RpmGenericProps);$(RpmProps);RpmArguments=$(RpmGenericSharedFxArguments);RpmFileSuffix=x64.rpm</RpmSharedFxProps>
- <RpmRHSharedFxProps>$(RpmCommonProps);$(RpmRHProps);$(RpmProps);RpmArguments=$(RpmRHSharedFxArguments);RpmFileSuffix=rh.rhel.7-x64.rpm</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">
- <PropertyGroup>
- <BuildDebInstallerScript>$(RepositoryRoot)src/Installers/Debian/build.sh</BuildDebInstallerScript>
- </PropertyGroup>
- <!-- Build deb package -->
- <Exec Command="$(BuildDebInstallerScript) -i $(_WorkLayoutDir) -o $(_WorkOutputDir) -n $(INSTALLER_NAME) -v $(INSTALLER_VERSION)" />
- </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)-$(DebIdVersion) -e INSTALLER_VERSION=$(DebPackageVersion) 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)-$(DebFileVersion)-x64.deb"
- SourceFiles="@(GeneratedDebFiles)"
- OverwriteReadOnlyFiles="True"
- SkipUnchangedFiles="False"
- UseHardlinksIfPossible="False" />
- </Target>
- <Target Name="GenerateDebs" DependsOnTargets="_EnsureInstallerPrerequisites">
- <PropertyGroup>
- <Deb_DotnetRuntimeDependencyId>dotnet-runtime-$(AspNetCoreMajorVersion).$(AspNetCoreMinorVersion)</Deb_DotnetRuntimeDependencyId>
- <Deb_DotnetRuntimeDependencyVersion>$(MicrosoftNETCoreAppPackageVersion)</Deb_DotnetRuntimeDependencyVersion>
- <!-- Needed some creativity to convert the PackageVersion M.N.P-Build to the installer version M.N.P~Build, The conditional handles stabilized builds -->
- <Deb_DotnetRuntimeDependencyVersion Condition="$(Deb_DotnetRuntimeDependencyVersion.Contains('-'))">$(Deb_DotnetRuntimeDependencyVersion.Substring(0, $(Deb_DotnetRuntimeDependencyVersion.IndexOf('-'))))~$(Deb_DotnetRuntimeDependencyVersion.Substring($([MSBuild]::Add($(Deb_DotnetRuntimeDependencyVersion.IndexOf('-')), 1))))</Deb_DotnetRuntimeDependencyVersion>
- </PropertyGroup>
- <ItemGroup>
- <_DebSharedFxDependencies Include="$(Deb_DotnetRuntimeDependencyId)" Version="$(Deb_DotnetRuntimeDependencyVersion)"/>
- </ItemGroup>
- <PropertyGroup>
- <Image>ubuntu.14.04</Image>
- <DebSharedFxDependencies>@(_DebSharedFxDependencies->'"%(Identity)": { "package_version": "%(Version)" }', ', ')</DebSharedFxDependencies>
- <DebCommonProps>Image=$(Image);DebPrefix=$(SharedFxInstallerName)</DebCommonProps>
- <DebCommonProps>$(DebCommonProps);DebSummary=$(SharedFxSummary);DebDescription=$(SharedFxDescription)</DebCommonProps>
- <DebCommonProps>$(DebCommonProps);SharedFxArchive=$(SharedFxIntermediateArchiveFilePrefix)-linux-x64.tar.gz</DebCommonProps>
- <DebProps>DebIdVersion=$(InstallerIdVersion);DebPackageVersion=$(DebInstallerPackageVersion);DebFileVersion=$(PackageVersion);DebDependencies=$(DebSharedFxDependencies)</DebProps>
- </PropertyGroup>
- <!-- Build Docker Image -->
- <MSBuild Projects="$(MSBuildProjectFullPath)" Targets="_BuildDockerImage" Properties="Image=$(Image)" />
- <MSBuild Projects="$(MSBuildProjectFullPath)" Targets="_GenerateDeb" Properties="$(DebCommonProps);$(DebProps)" />
- <!-- Remove Docker Image to save disk space -->
- <MSBuild Projects="$(MSBuildProjectFullPath)" Targets="_RemoveDockerImage" Properties="Image=$(Image)" />
- </Target>
- </Project>
|