2016-03-15 16:41:18 -07:00
using System ;
using System.Collections.Generic ;
using System.IO ;
using System.IO.Compression ;
using System.Runtime.InteropServices ;
using Microsoft.DotNet.Cli.Build.Framework ;
using Microsoft.Extensions.PlatformAbstractions ;
using static Microsoft . DotNet . Cli . Build . Framework . BuildHelpers ;
namespace Microsoft.DotNet.Cli.Build
{
public class DebTargets
{
[ Target ( nameof ( GenerateSharedHostDeb ) ,
nameof ( GenerateSharedFrameworkDeb ) ,
nameof ( GenerateSdkDeb ) ) ]
[BuildPlatforms(BuildPlatform.Ubuntu)]
public static BuildTargetResult GenerateDebs ( BuildTargetContext c )
{
return c . Success ( ) ;
}
2016-03-18 00:43:45 -07:00
[Target(nameof(InstallSharedFramework))]
2016-03-15 16:41:18 -07:00
[BuildPlatforms(BuildPlatform.Ubuntu)]
public static BuildTargetResult GenerateSdkDeb ( BuildTargetContext c )
{
var channel = c . BuildContext . Get < string > ( "Channel" ) . ToLower ( ) ;
2016-03-22 11:40:57 -07:00
var packageName = Monikers . GetSdkDebianPackageName ( c ) ;
2016-03-24 16:35:42 -07:00
var version = c . BuildContext . Get < BuildVersion > ( "BuildVersion" ) . NuGetVersion ;
2016-03-15 16:41:18 -07:00
var debFile = c . BuildContext . Get < string > ( "SdkInstallerFile" ) ;
var manPagesDir = Path . Combine ( Dirs . RepoRoot , "Documentation" , "manpages" ) ;
var previousVersionURL = $"https://dotnetcli.blob.core.windows.net/dotnet/{channel}/Installers/Latest/dotnet-ubuntu-x64.latest.deb" ;
2016-03-22 11:40:57 -07:00
var sdkPublishRoot = c . BuildContext . Get < string > ( "CLISDKRoot" ) ;
var sharedFxDebianPackageName = Monikers . GetDebianSharedFrameworkPackageName ( c ) ;
2016-03-15 16:41:18 -07:00
var objRoot = Path . Combine ( Dirs . Output , "obj" , "debian" , "sdk" ) ;
if ( Directory . Exists ( objRoot ) )
{
Directory . Delete ( objRoot , true ) ;
}
Directory . CreateDirectory ( objRoot ) ;
Cmd ( Path . Combine ( Dirs . RepoRoot , "scripts" , "package" , "package-debian.sh" ) ,
2016-03-18 01:54:40 -07:00
"-v" , version ,
2016-03-22 11:40:57 -07:00
"-i" , sdkPublishRoot ,
2016-03-18 01:54:40 -07:00
"-o" , debFile ,
"-p" , packageName ,
"-m" , manPagesDir ,
2016-03-22 11:40:57 -07:00
"--framework-debian-package-name" , sharedFxDebianPackageName ,
2016-03-18 01:54:40 -07:00
"--framework-nuget-name" , Monikers . SharedFrameworkName ,
"--framework-nuget-version" , c . BuildContext . Get < string > ( "SharedFrameworkNugetVersion" ) ,
2016-03-22 11:14:29 -07:00
"--previous-version-url" , previousVersionURL ,
2016-03-18 01:54:40 -07:00
"--obj-root" , objRoot )
2016-03-15 16:41:18 -07:00
. Execute ( )
. EnsureSuccessful ( ) ;
return c . Success ( ) ;
}
[Target]
[BuildPlatforms(BuildPlatform.Ubuntu)]
public static BuildTargetResult GenerateSharedHostDeb ( BuildTargetContext c )
{
var packageName = Monikers . GetDebianSharedHostPackageName ( c ) ;
2016-03-24 16:35:42 -07:00
var version = c . BuildContext . Get < BuildVersion > ( "BuildVersion" ) . NuGetVersion ;
2016-03-15 16:41:18 -07:00
var inputRoot = c . BuildContext . Get < string > ( "SharedHostPublishRoot" ) ;
var debFile = c . BuildContext . Get < string > ( "SharedHostInstallerFile" ) ;
var objRoot = Path . Combine ( Dirs . Output , "obj" , "debian" , "sharedhost" ) ;
2016-03-22 16:00:09 -07:00
var manPagesDir = Path . Combine ( Dirs . RepoRoot , "Documentation" , "manpages" ) ;
2016-03-15 16:41:18 -07:00
if ( Directory . Exists ( objRoot ) )
{
Directory . Delete ( objRoot , true ) ;
}
Directory . CreateDirectory ( objRoot ) ;
Cmd ( Path . Combine ( Dirs . RepoRoot , "scripts" , "package" , "package-sharedhost-debian.sh" ) ,
2016-03-22 16:00:09 -07:00
"--input" , inputRoot , "--output" , debFile , "--obj-root" , objRoot , "--version" , version , "-m" , manPagesDir )
2016-03-15 16:41:18 -07:00
. Execute ( )
. EnsureSuccessful ( ) ;
return c . Success ( ) ;
}
2016-03-18 00:43:45 -07:00
[Target(nameof(InstallSharedHost))]
2016-03-15 16:41:18 -07:00
[BuildPlatforms(BuildPlatform.Ubuntu)]
public static BuildTargetResult GenerateSharedFrameworkDeb ( BuildTargetContext c )
{
var packageName = Monikers . GetDebianSharedFrameworkPackageName ( c ) ;
2016-03-24 16:35:42 -07:00
var version = c . BuildContext . Get < string > ( "SharedFrameworkNugetVersion" ) ;
2016-03-15 16:41:18 -07:00
var inputRoot = c . BuildContext . Get < string > ( "SharedFrameworkPublishRoot" ) ;
var debFile = c . BuildContext . Get < string > ( "SharedFrameworkInstallerFile" ) ;
var objRoot = Path . Combine ( Dirs . Output , "obj" , "debian" , "sharedframework" ) ;
if ( Directory . Exists ( objRoot ) )
{
Directory . Delete ( objRoot , true ) ;
}
Directory . CreateDirectory ( objRoot ) ;
Cmd ( Path . Combine ( Dirs . RepoRoot , "scripts" , "package" , "package-sharedframework-debian.sh" ) ,
"--input" , inputRoot , "--output" , debFile , "--package-name" , packageName ,
"--framework-nuget-name" , Monikers . SharedFrameworkName ,
"--framework-nuget-version" , c . BuildContext . Get < string > ( "SharedFrameworkNugetVersion" ) ,
"--obj-root" , objRoot , "--version" , version )
. Execute ( )
. EnsureSuccessful ( ) ;
return c . Success ( ) ;
}
2016-03-18 00:43:45 -07:00
[ Target ( nameof ( InstallSDK ) ,
2016-03-15 16:41:18 -07:00
nameof ( RunE2ETest ) ,
nameof ( RemovePackages ) ) ]
[BuildPlatforms(BuildPlatform.Ubuntu)]
public static BuildTargetResult TestDebInstaller ( BuildTargetContext c )
{
return c . Success ( ) ;
}
[Target]
2016-03-18 00:43:45 -07:00
public static BuildTargetResult InstallSharedHost ( BuildTargetContext c )
2016-03-15 16:41:18 -07:00
{
2016-03-18 00:43:45 -07:00
InstallPackage ( c . BuildContext . Get < string > ( "SharedHostInstallerFile" ) ) ;
2016-03-15 16:41:18 -07:00
2016-03-18 00:43:45 -07:00
return c . Success ( ) ;
}
[Target]
public static BuildTargetResult InstallSharedFramework ( BuildTargetContext c )
{
InstallPackage ( c . BuildContext . Get < string > ( "SharedFrameworkInstallerFile" ) ) ;
return c . Success ( ) ;
}
[Target]
public static BuildTargetResult InstallSDK ( BuildTargetContext c )
{
InstallPackage ( c . BuildContext . Get < string > ( "SdkInstallerFile" ) ) ;
2016-03-15 16:41:18 -07:00
return c . Success ( ) ;
}
[Target]
[BuildPlatforms(BuildPlatform.Ubuntu)]
public static BuildTargetResult RunE2ETest ( BuildTargetContext c )
{
Directory . SetCurrentDirectory ( Path . Combine ( Dirs . RepoRoot , "test" , "EndToEnd" ) ) ;
Cmd ( "dotnet" , "build" )
. Execute ( )
. EnsureSuccessful ( ) ;
var testResultsPath = Path . Combine ( Dirs . Output , "obj" , "debian" , "test" , "debian-endtoend-testResults.xml" ) ;
Cmd ( "dotnet" , "test" , "-xml" , testResultsPath )
. Execute ( )
. EnsureSuccessful ( ) ;
return c . Success ( ) ;
}
[Target]
[BuildPlatforms(BuildPlatform.Ubuntu)]
public static BuildTargetResult RemovePackages ( BuildTargetContext c )
{
2016-03-18 00:43:45 -07:00
IEnumerable < string > orderedPackageNames = new List < string > ( )
2016-03-15 16:41:18 -07:00
{
2016-03-22 14:14:54 -07:00
Monikers . GetSdkDebianPackageName ( c ) ,
2016-03-15 16:41:18 -07:00
Monikers . GetDebianSharedFrameworkPackageName ( c ) ,
Monikers . GetDebianSharedHostPackageName ( c )
} ;
2016-03-18 00:43:45 -07:00
foreach ( var packageName in orderedPackageNames )
2016-03-15 16:41:18 -07:00
{
2016-03-18 00:43:45 -07:00
RemovePackage ( packageName ) ;
2016-03-15 16:41:18 -07:00
}
return c . Success ( ) ;
}
2016-03-18 00:43:45 -07:00
private static void InstallPackage ( string packagePath )
{
Cmd ( "sudo" , "dpkg" , "-i" , packagePath )
. Execute ( )
. EnsureSuccessful ( ) ;
}
private static void RemovePackage ( string packageName )
{
Cmd ( "sudo" , "dpkg" , "-r" , packageName )
. Execute ( )
. EnsureSuccessful ( ) ;
}
2016-03-15 16:41:18 -07:00
}
}