DEB start

This commit is contained in:
Piotr Puszkiewicz 2016-08-18 10:11:20 -07:00
parent 2db1997bc0
commit 5ffdcd5797
3 changed files with 147 additions and 119 deletions

View file

@ -0,0 +1,15 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<DotnetDebToolPackageId>dotnet-deb-tool</DotnetDebToolPackageId>
<DotnetDebToolVersion>1.0.0-*</DotnetDebToolVersion>
<DotnetDebToolConsumerProjectName>dotnet-deb-tool-consumer</DotnetDebToolConsumerProjectName>
<DotnetDebToolConfigJsonFileName>debian_config.json</DotnetDebToolConfigJsonFileName>
<DebLayoutPackageRootDirName>package_root</DebLayoutPackageRoot>
<DebLayoutAbsolutePlacementDirName>$</DebLayoutAbsolutePlacement>
<DebLayoutSamplesDirName>samples</DebLayoutSamplesDirName>
<DebLayoutDocsDirName>docs</DebLayoutDocsDirName>
<DebLayoutDebianFilesDirName>debian</DebLayoutDebianFilesDirName>
</PropertyGroup>
</Project>

View file

@ -1,114 +1,151 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Target Name="SetupGenerateDebInputsOutputs"> <Import Project="Microsoft.DotNet.Cli.Installer.DEB.props" />
<Exec Command="/usr/bin/env debuild -h" ContinueOnError="true"> <Target Name="SetupGenerateDebInputsOutputs">
<Output TaskParameter="ExitCode" PropertyName="DebuildExitCode" /> <Exec Command="/usr/bin/env debuild -h" ContinueOnError="true">
</Exec> <Output TaskParameter="ExitCode" PropertyName="DebuildExitCode" />
</Exec>
<!-- Workaround for Ubuntu16 Jenkins https://github.com/dotnet/core-setup/issues/167 --> <!-- Workaround for Ubuntu16 Jenkins https://github.com/dotnet/core-setup/issues/167 -->
<Message Condition=" '$(DebuildPresent)' != 'true' " <Message Condition=" '$(DebuildPresent)' != 'true' "
Text="Debuild Not found, Debian packages will not be built." Text="Debuild Not found, Debian packages will not be built."
Importance="High" /> Importance="High" />
<PropertyGroup> <PropertyGroup>
<DebuildPresent>false</DebuildPresent> <DebuildPresent>false</DebuildPresent>
<DebuildPresent Condition=" '$(DebuildExitCode)' == '0' ">true</DebuildPresent> <DebuildPresent Condition=" '$(DebuildExitCode)' == '0' ">true</DebuildPresent>
<DebianPackagingScript>$(RepoRoot)/scripts/package/package-debian.sh</DebianPackagingScript> <DotnetDebToolVersion></DotnetDebToolVersion>
<ManpagesDirectory>$(RepoRoot)/Documentation/manpages</ManpagesDirectory> <DotnetDebToolPackageSource></DotnetDebToolPackageSource>
<InstallerOutputDirectory>$(PackagesDirectory)</InstallerOutputDirectory> <DebianPackagingScript>$(RepoRoot)/scripts/package/package-debian.sh</DebianPackagingScript>
<SdkInstallerFile>$(InstallerOutputDirectory)/$(ArtifactNameWithVersionSdk)$(InstallerExtension)</SdkInstallerFile> <ManpagesDirectory>$(RepoRoot)/Documentation/manpages</ManpagesDirectory>
<SdkDebianPackageName>dotnet-dev-$(SdkVersion)</SdkDebianPackageName> <InstallerOutputDirectory>$(PackagesDirectory)</InstallerOutputDirectory>
<SharedFrameworkDebianPackageName>dotnet-sharedframework-$(SharedFrameworkName)-$(SharedFrameworkVersion)</SharedFrameworkDebianPackageName> <SdkInstallerFile>$(InstallerOutputDirectory)/$(ArtifactNameWithVersionSdk)$(InstallerExtension)</SdkInstallerFile>
<SharedFrameworkDebianPackageName>$(SharedFrameworkDebianPackageName.ToLower())</SharedFrameworkDebianPackageName>
<HostFxrDebianPackageName>dotnet-hostfxr-$(HostFxrVersion)</HostFxrDebianPackageName>
<HostFxrDebianPackageName>$(HostFxrDebianPackageName.ToLower())</HostFxrDebianPackageName>
<SharedHostDebianPackageName>dotnet-host</SharedHostDebianPackageName>
<SdkDebianIntermediateDirectory>$(IntermediateDirectory)/debian/sdk</SdkDebianIntermediateDirectory> <SdkDebianPackageName>dotnet-dev-$(SdkVersion)</SdkDebianPackageName>
<SharedFrameworkDebianPackageName>dotnet-sharedframework-$(SharedFrameworkName)-$(SharedFrameworkVersion)</SharedFrameworkDebianPackageName>
<SharedFrameworkDebianPackageName>$(SharedFrameworkDebianPackageName.ToLower())</SharedFrameworkDebianPackageName>
<HostFxrDebianPackageName>dotnet-hostfxr-$(HostFxrVersion)</HostFxrDebianPackageName>
<HostFxrDebianPackageName>$(HostFxrDebianPackageName.ToLower())</HostFxrDebianPackageName>
<SharedHostDebianPackageName>dotnet-host</SharedHostDebianPackageName>
<DebianTestResultsXmlFile>$(SdkDebianIntermediateDirectory)/debian-testResults.xml</DebianTestResultsXmlFile> <SdkDebianIntermediateDirectory>$(IntermediateDirectory)/debian/sdk</SdkDebianIntermediateDirectory>
<DebianInstalledDirectory>/usr/share/dotnet</DebianInstalledDirectory>
<EndToEndTestDirectory>$(RepoRoot)/test/EndToEnd</EndToEndTestDirectory>
</PropertyGroup>
<ItemGroup> <DebianTestResultsXmlFile>$(SdkDebianIntermediateDirectory)/debian-testResults.xml</DebianTestResultsXmlFile>
<TestSdkDebTaskEnvironmentVariables Include="PATH=$(DebianInstalledDirectory)$(PathListSeparator)$(PATH)" /> <DebianInstalledDirectory>/usr/share/dotnet</DebianInstalledDirectory>
</ItemGroup> <EndToEndTestDirectory>$(RepoRoot)/test/EndToEnd</EndToEndTestDirectory>
</PropertyGroup>
<!-- Consumed By Publish --> <ItemGroup>
<ItemGroup> <TestSdkDebTaskEnvironmentVariables Include="PATH=$(DebianInstalledDirectory)$(PathListSeparator)$(PATH)" />
<GeneratedInstallers Include="$(SdkInstallerFile)" /> </ItemGroup>
</ItemGroup>
<ItemGroup> <!-- Consumed By Publish -->
<SdkDebInputFiles Include="$(SdkLayoutOutputDirectory)/**/*" /> <ItemGroup>
</ItemGroup> <GeneratedInstallers Include="$(SdkInstallerFile)" />
</Target> </ItemGroup>
<Target Name="GenerateSdkDeb" <ItemGroup>
Condition=" '$(OSName)' == 'ubuntu' and '$(DebuildPresent)' == 'true' " <SdkDebInputFiles Include="$(SdkLayoutOutputDirectory)/**/*" />
Inputs="@(SdkDebInputFiles);" </ItemGroup>
Outputs="$(SdkInstallerFile)" > </Target>
<!-- Install Packages --> <Target Name="GenerateSdkDeb"
<Exec Command="sudo dpkg -i $(DownloadedSharedHostInstallerFile)" /> Condition=" '$(OSName)' == 'ubuntu' and '$(DebuildPresent)' == 'true' "
<Exec Command="sudo dpkg -i $(DownloadedHostFxrInstallerFile)" /> Inputs="@(SdkDebInputFiles);"
<Exec Command="sudo dpkg -i $(DownloadedSharedFrameworkInstallerFile)" /> Outputs="$(SdkInstallerFile)" >
<Exec Command="'$(DebianPackagingScript)' <!-- Clean the workspace -->
-v '$(SdkVersion)' <ItemGroup>
-i '$(SdkLayoutOutputDirectory)' <SdkDebianFilesToClean Remove="*" />
-o '$(SdkInstallerFile)' <SdkDebianFilesToClean Include="$(SdkInstallerFile)" />
-p '$(SdkDebianPackageName)'
-b '$(SdkBrandName)'
-m '$(ManpagesDirectory)'
--framework-debian-package-name '$(SharedFrameworkDebianPackageName)'
--framework-nuget-name '$(SharedFrameworkName)'
--framework-nuget-version '$(SharedFrameworkVersion)'
--obj-root '$(SdkDebianIntermediateDirectory)'" />
<!-- Remove Packages --> <SdkDebianDirectoriesToClean Remove="*" />
<Exec Command="sudo dpkg -r $(SdkDebianPackageName)" /> <SdkDebianDirectoriesToClean Include="$(SdkDebianIntermediateDirectory)" />
<Exec Command="sudo dpkg -r $(SharedFrameworkDebianPackageName)" /> <SdkDebianDirectoriesToClean Include="$(SdkDebianLayoutOutputDirectory)" />
<Exec Command="sudo dpkg -r $(HostFxrDebianPackageName)" /> </ItemGroup>
<Exec Command="sudo dpkg -r $(SharedHostDebianPackageName)" />
</Target>
<Target Name="TestSdkDeb" <Delete Condition=" 'Exists(%(SdkDebianFilesToClean))' " Files="%(SdkDebianFilesToClean)" />
Condition=" '$(OSName)' == 'ubuntu' and '$(DebuildPresent)' == 'true' " <RemoveDir Condition=" 'Exists(%(SdkDebianDirectoriesToClean))' " Directories="%(SdkDebianDirectoriesToClean)" />
Inputs="$(DownloadedSharedHostInstallerFile); <MakeDir Directories="@(SdkDebianDirectoriesToClean)" />
$(DownloadedHostFxrInstallerFile);
$(DownloadedSharedFrameworkInstallerFile);
$(SdkInstallerFile);"
Outputs="$(DebianTestResultsXmlFile)" >
<!-- Install Packages --> <!-- Install Packages -->
<Exec Command="sudo dpkg -i $(DownloadedSharedHostInstallerFile)" /> <Exec Command="sudo dpkg -i $(DownloadedSharedHostInstallerFile)" />
<Exec Command="sudo dpkg -i $(DownloadedHostFxrInstallerFile)" /> <Exec Command="sudo dpkg -i $(DownloadedHostFxrInstallerFile)" />
<Exec Command="sudo dpkg -i $(DownloadedSharedFrameworkInstallerFile)" /> <Exec Command="sudo dpkg -i $(DownloadedSharedFrameworkInstallerFile)" />
<Exec Command="sudo dpkg -i $(SdkInstallerFile)" />
<!-- Run E2E --> <!-- Create layout -->
<DotNetTest WorkingDirectory="$(EndToEndTestDirectory)"
EnvironmentVariables="@(TestSdkDebTaskEnvironmentVariables)"
ToolPath="$(DebianInstalledDirectory)"
Xml="$(DebianTestResultsXmlFile)" />
<!-- Remove Packages -->
<Exec Command="sudo dpkg -r $(SdkDebianPackageName)" />
<Exec Command="sudo dpkg -r $(SharedFrameworkDebianPackageName)" />
<Exec Command="sudo dpkg -r $(HostFxrDebianPackageName)" />
<Exec Command="sudo dpkg -r $(SharedHostDebianPackageName)" />
</Target>
<Target Name="GenerateDebs" <Exec Command="'$(DebianPackagingScript)'
DependsOnTargets="Init; -v '$(SdkVersion)'
Layout; -i '$(SdkLayoutOutputDirectory)'
SetupGenerateDebInputsOutputs; -o '$(SdkInstallerFile)'
GenerateSdkDeb; -p '$(SdkDebianPackageName)'
TestSdkDeb;" -b '$(SdkBrandName)'
Condition=" '$(OSName)' == 'ubuntu' " /> -m '$(ManpagesDirectory)'
--framework-debian-package-name '$(SharedFrameworkDebianPackageName)'
--framework-nuget-name '$(SharedFrameworkName)'
--framework-nuget-version '$(SharedFrameworkVersion)'
--obj-root '$(SdkDebianIntermediateDirectory)'" />
<!-- Remove Packages -->
<Exec Command="sudo dpkg -r $(SdkDebianPackageName)" />
<Exec Command="sudo dpkg -r $(SharedFrameworkDebianPackageName)" />
<Exec Command="sudo dpkg -r $(HostFxrDebianPackageName)" />
<Exec Command="sudo dpkg -r $(SharedHostDebianPackageName)" />
</Target>
<Target Name="TestSdkDeb"
Condition=" '$(OSName)' == 'ubuntu' and '$(DebuildPresent)' == 'true' "
Inputs="$(DownloadedSharedHostInstallerFile);
$(DownloadedHostFxrInstallerFile);
$(DownloadedSharedFrameworkInstallerFile);
$(SdkInstallerFile);"
Outputs="$(DebianTestResultsXmlFile)" >
<!-- Install Packages -->
<Exec Command="sudo dpkg -i $(DownloadedSharedHostInstallerFile)" />
<Exec Command="sudo dpkg -i $(DownloadedHostFxrInstallerFile)" />
<Exec Command="sudo dpkg -i $(DownloadedSharedFrameworkInstallerFile)" />
<Exec Command="sudo dpkg -i $(SdkInstallerFile)" />
<!-- Run E2E -->
<DotNetTest WorkingDirectory="$(EndToEndTestDirectory)"
EnvironmentVariables="@(TestSdkDebTaskEnvironmentVariables)"
ToolPath="$(DebianInstalledDirectory)"
Xml="$(DebianTestResultsXmlFile)" />
<!-- Remove Packages -->
<Exec Command="sudo dpkg -r $(SdkDebianPackageName)" />
<Exec Command="sudo dpkg -r $(SharedFrameworkDebianPackageName)" />
<Exec Command="sudo dpkg -r $(HostFxrDebianPackageName)" />
<Exec Command="sudo dpkg -r $(SharedHostDebianPackageName)" />
</Target>
<Target Name="GenerateDebs"
DependsOnTargets="Init;
Layout;
SetupGenerateDebInputsOutputs;
GenerateSdkDeb;
TestSdkDeb;"
Condition=" '$(OSName)' == 'ubuntu' " />
<Target Name="PrepareDotnetDebTool"
DependsOnTargets="WriteDotnetDebToolProjectJson;">
</Target>
<Target Name="WriteDotnetDebToolProjectJson" >
<ItemGroup>
<AssemblyInfoLines Include="{" />
<AssemblyInfoLines Include="%20%20%20%20&quot;version&quot;: &quot;1.0.0-*&quot;," />
<AssemblyInfoLines Include="%20%20%20%20&quot;name&quot;: &quot;$(DotnetDebToolConsumerProjectName)&quot;," />
<AssemblyInfoLines Include="%20%20%20%20&quot;frameworks&quot;: { &quot;netcoreapp1.0&quot;: {} }," />
<AssemblyInfoLines Include="%20%20%20%20&quot;tools&quot;: {{&quot;$(DotnetDebToolPackageId)&quot;: &quot;$(DotnetDebToolVersion)&quot; }}" />
<AssemblyInfoLines Include="}" />
</ItemGroup>
</Target>
</Project> </Project>

View file

@ -9,35 +9,22 @@ using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using Microsoft.DotNet.Cli.Build.Framework; using Microsoft.DotNet.Cli.Build.Framework;
using static Microsoft.DotNet.Cli.Build.Framework.BuildHelpers;
namespace Microsoft.DotNet.Cli.Build namespace Microsoft.DotNet.Cli.Build
{ {
public class DebPackageCreator public class DebPackageCreator
{ {
private static readonly string s_dotnetDebToolPackageId = "dotnet-deb-tool"; private string _dotnet;
private static readonly string s_toolConsumerProjectName = "dotnet-deb-tool-consumer";
private static readonly string s_debianConfigJsonFileName = "debian_config.json";
private DotNetCli _dotnet;
private string _intermediateDirectory; private string _intermediateDirectory;
private string _dotnetDebToolVersion; private string _dotnetDebToolVersion;
private string _dotnetDebToolPackageSource; private string _dotnetDebToolPackageSource;
private string _consumingProjectDirectory; private string _consumingProjectDirectory;
public DebPackageCreator( public DebPackageCreator(
DotNetCli dotnet, string dotnet,
string intermediateDirectory, string intermediateDirectory,
string dotnetDebToolVersion = "1.0.0-*", string dotnetDebToolVersion,
string dotnetDebToolPackageSource = null) string dotnetDebToolPackageSource = null)
{ {
_dotnet = dotnet;
_intermediateDirectory = intermediateDirectory;
_dotnetDebToolVersion = dotnetDebToolVersion;
_dotnetDebToolPackageSource = dotnetDebToolPackageSource;
_consumingProjectDirectory = Path.Combine(_intermediateDirectory, s_toolConsumerProjectName);
InitializeDotnetDebTool(); InitializeDotnetDebTool();
} }
@ -53,11 +40,6 @@ namespace Microsoft.DotNet.Cli.Build
IEnumerable<string> debianFiles = null) IEnumerable<string> debianFiles = null)
{ {
string debIntermediatesDirectory = Path.Combine(_intermediateDirectory, packageName, packageVersion); string debIntermediatesDirectory = Path.Combine(_intermediateDirectory, packageName, packageVersion);
if (Directory.Exists(debIntermediatesDirectory))
{
FS.Rmdir(debIntermediatesDirectory);
}
FS.Mkdirp(debIntermediatesDirectory);
string layoutDirectory = Path.Combine(debIntermediatesDirectory, "debianLayoutDirectory"); string layoutDirectory = Path.Combine(debIntermediatesDirectory, "debianLayoutDirectory");
var debianLayoutDirectories = new DebianLayoutDirectories(layoutDirectory); var debianLayoutDirectories = new DebianLayoutDirectories(layoutDirectory);
@ -77,12 +59,6 @@ namespace Microsoft.DotNet.Cli.Build
private void CreateEmptyDebianLayout(DebianLayoutDirectories layoutDirectories) private void CreateEmptyDebianLayout(DebianLayoutDirectories layoutDirectories)
{ {
if (Directory.Exists(layoutDirectories.LayoutDirectory))
{
FS.Rmdir(layoutDirectories.LayoutDirectory);
}
Directory.CreateDirectory(layoutDirectories.LayoutDirectory);
Directory.CreateDirectory(layoutDirectories.AbsolutePlacement); Directory.CreateDirectory(layoutDirectories.AbsolutePlacement);
Directory.CreateDirectory(layoutDirectories.PackageRoot); Directory.CreateDirectory(layoutDirectories.PackageRoot);
Directory.CreateDirectory(layoutDirectories.Samples); Directory.CreateDirectory(layoutDirectories.Samples);