2016-02-15 10:07:39 -08:00
using System ;
2016-02-12 10:11:30 -08:00
using System.Collections.Generic ;
using System.IO ;
using System.Runtime.InteropServices ;
2016-02-15 10:07:39 -08:00
using Microsoft.DotNet.Cli.Build.Framework ;
using Microsoft.Extensions.PlatformAbstractions ;
2016-02-12 10:11:30 -08:00
using static Microsoft . DotNet . Cli . Build . Framework . BuildHelpers ;
namespace Microsoft.DotNet.Cli.Build
{
public static class PublishTargets
{
[Target(nameof(PrepareTargets.Init))]
public static BuildTargetResult Publish ( BuildTargetContext c )
{
2016-02-16 11:39:17 -08:00
if ( string . Equals ( Environment . GetEnvironmentVariable ( "DOTNET_BUILD_SKIP_PACKAGING" ) , "1" , StringComparison . Ordinal ) )
{
c . Info ( "Skipping packaging because DOTNET_BUILD_SKIP_PACKAGING is set" ) ;
return c . Success ( ) ;
}
2016-02-12 10:11:30 -08:00
// NOTE(anurse): Currently, this just invokes the remaining build scripts as-is. We should port those to C# as well, but
// I want to get the merged in.
// Set up the environment variables previously defined by common.sh/ps1
// This is overkill, but I want to cover all the variables used in all OSes (including where some have the same names)
2016-02-15 10:07:39 -08:00
var buildVersion = c . BuildContext . Get < BuildVersion > ( "BuildVersion" ) ;
2016-02-17 10:40:34 -08:00
var configuration = c . BuildContext . Get < string > ( "Configuration" ) ;
2016-02-23 18:04:49 -08:00
var architecture = PlatformServices . Default . Runtime . RuntimeArchitecture ;
2016-02-12 10:11:30 -08:00
var env = new Dictionary < string , string > ( )
{
{ "RID" , PlatformServices . Default . Runtime . GetRuntimeIdentifier ( ) } ,
{ "OSNAME" , PlatformServices . Default . Runtime . OperatingSystem } ,
2016-03-01 17:35:32 -06:00
{ "TFM" , "netstandardapp1.5" } ,
2016-02-12 10:11:30 -08:00
{ "OutputDir" , Dirs . Output } ,
{ "Stage1Dir" , Dirs . Stage1 } ,
{ "Stage1CompilationDir" , Dirs . Stage1Compilation } ,
{ "Stage2Dir" , Dirs . Stage2 } ,
{ "STAGE2_DIR" , Dirs . Stage2 } ,
{ "Stage2CompilationDir" , Dirs . Stage2Compilation } ,
{ "HostDir" , Dirs . Corehost } ,
{ "PackageDir" , Path . Combine ( Dirs . Packages , "dnvm" ) } , // Legacy name
{ "TestBinRoot" , Dirs . TestOutput } ,
{ "TestPackageDir" , Dirs . TestPackages } ,
{ "MajorVersion" , buildVersion . Major . ToString ( ) } ,
{ "MinorVersion" , buildVersion . Minor . ToString ( ) } ,
{ "PatchVersion" , buildVersion . Patch . ToString ( ) } ,
{ "CommitCountVersion" , buildVersion . CommitCountString } ,
{ "COMMIT_COUNT_VERSION" , buildVersion . CommitCountString } ,
{ "DOTNET_CLI_VERSION" , buildVersion . SimpleVersion } ,
{ "DOTNET_MSI_VERSION" , buildVersion . GenerateMsiVersion ( ) } ,
2016-02-17 10:40:34 -08:00
{ "VersionSuffix" , buildVersion . VersionSuffix } ,
2016-02-23 18:04:49 -08:00
{ "CONFIGURATION" , configuration } ,
{ "ARCHITECTURE" , architecture }
2016-02-12 10:11:30 -08:00
} ;
if ( RuntimeInformation . IsOSPlatform ( OSPlatform . OSX ) )
{
env [ "OSNAME" ] = "osx" ;
}
if ( RuntimeInformation . IsOSPlatform ( OSPlatform . Windows ) )
{
Cmd ( "powershell" , "-NoProfile" , "-NoLogo" , Path . Combine ( c . BuildContext . BuildDirectory , "scripts" , "package" , "package.ps1" ) )
. Environment ( env )
. Execute ( )
. EnsureSuccessful ( ) ;
}
else
{
// Can directly execute scripts on Unix :). Thank you shebangs!
Cmd ( Path . Combine ( c . BuildContext . BuildDirectory , "scripts" , "package" , "package.sh" ) )
. Environment ( env )
. Execute ( )
. EnsureSuccessful ( ) ;
}
return c . Success ( ) ;
}
}
}