190 lines
11 KiB
XML
190 lines
11 KiB
XML
<Project>
|
|
<Target Name="BuildInstallers" DependsOnTargets="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)-linux-x64.tar.gz."
|
|
Condition="!Exists('$(SharedFxIntermediateArchiveFilePrefix)-linux-x64.tar.gz')" />
|
|
</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/$(SharedFxRid)/templates/changelog --rpm-summary "$(RpmMSummary)" --description "$(RpmDescription)" --maintainer "$(RpmMaintainerName) <$(RpmMaintainerEmail)>" --vendor "$(RpmVendor)" --license "$(RpmLicense)" --url "$(RpmHomepage)" $(_DockerRootDir).w/$(SharedFxRid)/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>
|