Merge pull request #1890 from dotnet/brthor/fix-deb-path
Fix the Debian Package for SharedFx, Publish all to our Repo
This commit is contained in:
commit
34ca32ebaf
23 changed files with 387 additions and 166 deletions
|
@ -2,7 +2,8 @@
|
|||
"maintainer_name":"Microsoft",
|
||||
"maintainer_email": "dotnetcore@microsoft.com",
|
||||
|
||||
"package_name": "dotnet",
|
||||
"package_name": "dotnet-dev-%SDK_NUGET_VERSION%",
|
||||
"install_root": "/usr/share/dotnet",
|
||||
|
||||
"short_description": ".NET Core & command line tools",
|
||||
"long_description": ".NET Core is a cross-platform implementation of .NET Framework, a modern, modular platform\n for building diverse kinds of applications, from command-line applications to microservices and \n modern websites.\n This package contains the tools you will need to start writing applications for .NET Core. It includes \n compilers, package managers and other utilities that developers need.",
|
||||
|
@ -28,17 +29,11 @@
|
|||
},
|
||||
|
||||
"debian_dependencies":{
|
||||
"libssl1.0.0" : {},
|
||||
"clang-3.5" : {},
|
||||
"libcurl3" : {}
|
||||
"%SHARED_FRAMEWORK_DEBIAN_PACKAGE_NAME%" : {}
|
||||
},
|
||||
|
||||
"package_conflicts" : [
|
||||
"dotnet-nightly"
|
||||
],
|
||||
|
||||
"symlinks": {
|
||||
"bin/dotnet" : "usr/bin/dotnet",
|
||||
"bin/dotnet-compile-native" : "/usr/bin/dotnet-compile-native"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -28,9 +28,8 @@
|
|||
},
|
||||
|
||||
"debian_dependencies":{
|
||||
"libssl1.0.0" : {},
|
||||
"clang-3.5" : {},
|
||||
"libcurl3" : {}
|
||||
"%SHARED_FRAMEWORK_DEBIAN_PACKAGE_NAME%" : {}
|
||||
},
|
||||
|
||||
"package_conflicts" : [
|
||||
|
@ -38,7 +37,6 @@
|
|||
],
|
||||
|
||||
"symlinks": {
|
||||
"bin/dotnet" : "usr/bin/dotnet",
|
||||
"bin/dotnet-compile-native" : "/usr/bin/dotnet-compile-native"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -28,8 +28,7 @@
|
|||
"full_text": "Copyright (c) 2015 Microsoft\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE."
|
||||
},
|
||||
|
||||
"debian_dependencies":{
|
||||
"libssl-dev" : {},
|
||||
"libcurl3" : {}
|
||||
"symlinks": {
|
||||
"dotnet" : "/usr/bin/dotnet"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -29,6 +29,7 @@
|
|||
},
|
||||
|
||||
"debian_dependencies":{
|
||||
"dotnet-host" : {},
|
||||
"libssl1.0.0" : {},
|
||||
"libcurl3" : {}
|
||||
}
|
||||
|
|
199
scripts/dotnet-cli-build/DebTargets.cs
Normal file
199
scripts/dotnet-cli-build/DebTargets.cs
Normal file
|
@ -0,0 +1,199 @@
|
|||
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();
|
||||
}
|
||||
|
||||
[Target(nameof(InstallSharedFramework))]
|
||||
[BuildPlatforms(BuildPlatform.Ubuntu)]
|
||||
public static BuildTargetResult GenerateSdkDeb(BuildTargetContext c)
|
||||
{
|
||||
var channel = c.BuildContext.Get<string>("Channel").ToLower();
|
||||
var packageName = Monikers.GetSdkDebianPackageName(c);
|
||||
var version = c.BuildContext.Get<BuildVersion>("BuildVersion").SimpleVersion;
|
||||
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";
|
||||
var sdkPublishRoot = c.BuildContext.Get<string>("CLISDKRoot");
|
||||
var sharedFxDebianPackageName = Monikers.GetDebianSharedFrameworkPackageName(c);
|
||||
|
||||
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"),
|
||||
"-v", version,
|
||||
"-i", sdkPublishRoot,
|
||||
"-o", debFile,
|
||||
"-p", packageName,
|
||||
"-m", manPagesDir,
|
||||
"--framework-debian-package-name", sharedFxDebianPackageName,
|
||||
"--framework-nuget-name", Monikers.SharedFrameworkName,
|
||||
"--framework-nuget-version", c.BuildContext.Get<string>("SharedFrameworkNugetVersion"),
|
||||
"--previous-version-url", previousVersionURL,
|
||||
"--obj-root", objRoot)
|
||||
.Execute()
|
||||
.EnsureSuccessful();
|
||||
return c.Success();
|
||||
}
|
||||
|
||||
[Target]
|
||||
[BuildPlatforms(BuildPlatform.Ubuntu)]
|
||||
public static BuildTargetResult GenerateSharedHostDeb(BuildTargetContext c)
|
||||
{
|
||||
var packageName = Monikers.GetDebianSharedHostPackageName(c);
|
||||
var version = c.BuildContext.Get<BuildVersion>("BuildVersion").SimpleVersion;
|
||||
var inputRoot = c.BuildContext.Get<string>("SharedHostPublishRoot");
|
||||
var debFile = c.BuildContext.Get<string>("SharedHostInstallerFile");
|
||||
var objRoot = Path.Combine(Dirs.Output, "obj", "debian", "sharedhost");
|
||||
var manPagesDir = Path.Combine(Dirs.RepoRoot, "Documentation", "manpages");
|
||||
|
||||
if (Directory.Exists(objRoot))
|
||||
{
|
||||
Directory.Delete(objRoot, true);
|
||||
}
|
||||
|
||||
Directory.CreateDirectory(objRoot);
|
||||
|
||||
Cmd(Path.Combine(Dirs.RepoRoot, "scripts", "package", "package-sharedhost-debian.sh"),
|
||||
"--input", inputRoot, "--output", debFile, "--obj-root", objRoot, "--version", version, "-m", manPagesDir)
|
||||
.Execute()
|
||||
.EnsureSuccessful();
|
||||
return c.Success();
|
||||
}
|
||||
|
||||
[Target(nameof(InstallSharedHost))]
|
||||
[BuildPlatforms(BuildPlatform.Ubuntu)]
|
||||
public static BuildTargetResult GenerateSharedFrameworkDeb(BuildTargetContext c)
|
||||
{
|
||||
var packageName = Monikers.GetDebianSharedFrameworkPackageName(c);
|
||||
var version = c.BuildContext.Get<BuildVersion>("BuildVersion").SimpleVersion;
|
||||
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();
|
||||
}
|
||||
|
||||
[Target(nameof(InstallSDK),
|
||||
nameof(RunE2ETest),
|
||||
nameof(RemovePackages))]
|
||||
[BuildPlatforms(BuildPlatform.Ubuntu)]
|
||||
public static BuildTargetResult TestDebInstaller(BuildTargetContext c)
|
||||
{
|
||||
return c.Success();
|
||||
}
|
||||
|
||||
[Target]
|
||||
public static BuildTargetResult InstallSharedHost(BuildTargetContext c)
|
||||
{
|
||||
InstallPackage(c.BuildContext.Get<string>("SharedHostInstallerFile"));
|
||||
|
||||
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"));
|
||||
|
||||
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)
|
||||
{
|
||||
IEnumerable<string> orderedPackageNames = new List<string>()
|
||||
{
|
||||
Monikers.GetSdkDebianPackageName(c),
|
||||
Monikers.GetDebianSharedFrameworkPackageName(c),
|
||||
Monikers.GetDebianSharedHostPackageName(c)
|
||||
};
|
||||
|
||||
foreach(var packageName in orderedPackageNames)
|
||||
{
|
||||
RemovePackage(packageName);
|
||||
}
|
||||
|
||||
return c.Success();
|
||||
}
|
||||
|
||||
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();
|
||||
}
|
||||
}
|
||||
}
|
|
@ -14,99 +14,18 @@ namespace Microsoft.DotNet.Cli.Build
|
|||
{
|
||||
[Target(nameof(MsiTargets.GenerateMsis),
|
||||
nameof(MsiTargets.GenerateBundles),
|
||||
nameof(PkgTargets.GeneratePkgs))]//,
|
||||
//nameof(InstallerTargets.GenerateDebs))]
|
||||
nameof(PkgTargets.GeneratePkgs),
|
||||
nameof(DebTargets.GenerateDebs))]
|
||||
public static BuildTargetResult GenerateInstaller(BuildTargetContext c)
|
||||
{
|
||||
return c.Success();
|
||||
}
|
||||
|
||||
[Target(nameof(DebTargets.TestDebInstaller))]
|
||||
public static BuildTargetResult TestInstaller(BuildTargetContext c)
|
||||
|
||||
[Target(
|
||||
nameof(InstallerTargets.GenerateSdkDeb),
|
||||
nameof(InstallerTargets.GenerateSharedFrameworkDeb),
|
||||
nameof(InstallerTargets.GenerateSharedHostDeb))]
|
||||
[BuildPlatforms(BuildPlatform.Ubuntu)]
|
||||
public static BuildTargetResult GenerateDebs(BuildTargetContext c)
|
||||
{
|
||||
return c.Success();
|
||||
}
|
||||
|
||||
[Target]
|
||||
[BuildPlatforms(BuildPlatform.Ubuntu)]
|
||||
public static BuildTargetResult GenerateSdkDeb(BuildTargetContext c)
|
||||
{
|
||||
var channel = c.BuildContext.Get<string>("Channel").ToLower();
|
||||
var packageName = Monikers.GetDebianPackageName(c);
|
||||
var version = c.BuildContext.Get<BuildVersion>("BuildVersion").SimpleVersion;
|
||||
var debFile = c.BuildContext.Get<string>("CombinedFrameworkSDKHostInstallerFile");
|
||||
var input = c.BuildContext.Get<string>("CLISDKRoot");
|
||||
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";
|
||||
|
||||
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"),
|
||||
"-v", version, "-i", input, "-o", debFile, "-p", packageName, "-m", manPagesDir, "--previous-version-url", previousVersionURL, "--obj-root", objRoot)
|
||||
.Execute()
|
||||
.EnsureSuccessful();
|
||||
return c.Success();
|
||||
}
|
||||
|
||||
[Target]
|
||||
[BuildPlatforms(BuildPlatform.Ubuntu)]
|
||||
public static BuildTargetResult GenerateSharedHostDeb(BuildTargetContext c)
|
||||
{
|
||||
var version = c.BuildContext.Get<BuildVersion>("BuildVersion").SimpleVersion;
|
||||
var inputRoot = c.BuildContext.Get<string>("SharedHostPublishRoot");
|
||||
var debFile = c.BuildContext.Get<string>("SharedHostInstallerFile");
|
||||
var objRoot = Path.Combine(Dirs.Output, "obj", "debian", "sharedhost");
|
||||
|
||||
if (Directory.Exists(objRoot))
|
||||
{
|
||||
Directory.Delete(objRoot, true);
|
||||
}
|
||||
|
||||
Directory.CreateDirectory(objRoot);
|
||||
|
||||
Cmd(Path.Combine(Dirs.RepoRoot, "scripts", "package", "package-sharedhost-debian.sh"),
|
||||
"--input", inputRoot, "--output", debFile, "--obj-root", objRoot, "--version", version)
|
||||
.Execute()
|
||||
.EnsureSuccessful();
|
||||
return c.Success();
|
||||
}
|
||||
|
||||
[Target]
|
||||
[BuildPlatforms(BuildPlatform.Ubuntu)]
|
||||
public static BuildTargetResult GenerateSharedFrameworkDeb(BuildTargetContext c)
|
||||
{
|
||||
var packageName = Monikers.GetDebianSharedFrameworkPackageName(c);
|
||||
var version = c.BuildContext.Get<BuildVersion>("BuildVersion").SimpleVersion;
|
||||
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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -28,6 +28,7 @@ namespace Microsoft.DotNet.Cli.Build
|
|||
nameof(PackageTargets.GenerateVersionBadge),
|
||||
nameof(PackageTargets.GenerateCompressedFile),
|
||||
nameof(InstallerTargets.GenerateInstaller),
|
||||
nameof(InstallerTargets.TestInstaller),
|
||||
nameof(PackageTargets.GenerateNugetPackages))]
|
||||
[Environment("DOTNET_BUILD_SKIP_PACKAGING", null, "0", "false")]
|
||||
public static BuildTargetResult Package(BuildTargetContext c)
|
||||
|
|
|
@ -47,7 +47,7 @@ namespace Microsoft.DotNet.Cli.Build
|
|||
[Target(
|
||||
nameof(PublishTargets.PublishVersionBadge),
|
||||
nameof(PublishTargets.PublishSdkInstallerFile),
|
||||
//nameof(PublishTargets.PublishDebFileToDebianRepo),
|
||||
nameof(PublishTargets.PublishDebFilesToDebianRepo),
|
||||
nameof(PublishTargets.PublishCombinedFrameworkSDKHostFile),
|
||||
nameof(PublishTargets.PublishCombinedFrameworkHostFile),
|
||||
nameof(PublishTargets.PublishLatestVersionTextFile))]
|
||||
|
@ -93,11 +93,21 @@ namespace Microsoft.DotNet.Cli.Build
|
|||
return c.Success();
|
||||
}
|
||||
|
||||
[Target(nameof(PublishSdkInstallerFile))]
|
||||
[Target(
|
||||
nameof(PublishSdkDebToDebianRepo),
|
||||
nameof(PublishSharedFrameworkDebToDebianRepo),
|
||||
nameof(PublishSharedHostDebToDebianRepo))]
|
||||
[BuildPlatforms(BuildPlatform.Ubuntu)]
|
||||
public static BuildTargetResult PublishDebFileToDebianRepo(BuildTargetContext c)
|
||||
public static BuildTargetResult PublishDebFilesToDebianRepo(BuildTargetContext c)
|
||||
{
|
||||
var packageName = Monikers.GetDebianPackageName(c);
|
||||
return c.Success();
|
||||
}
|
||||
|
||||
[Target]
|
||||
[BuildPlatforms(BuildPlatform.Ubuntu)]
|
||||
public static BuildTargetResult PublishSdkDebToDebianRepo(BuildTargetContext c)
|
||||
{
|
||||
var packageName = Monikers.GetSdkDebianPackageName(c);
|
||||
var installerFile = c.BuildContext.Get<string>("SdkInstallerFile");
|
||||
var uploadUrl = $"https://dotnetcli.blob.core.windows.net/dotnet/{Channel}/Installers/{Version}/{Path.GetFileName(installerFile)}";
|
||||
var uploadJson = GenerateUploadJsonFile(packageName, Version, uploadUrl);
|
||||
|
@ -109,6 +119,38 @@ namespace Microsoft.DotNet.Cli.Build
|
|||
return c.Success();
|
||||
}
|
||||
|
||||
[Target]
|
||||
[BuildPlatforms(BuildPlatform.Ubuntu)]
|
||||
public static BuildTargetResult PublishSharedFrameworkDebToDebianRepo(BuildTargetContext c)
|
||||
{
|
||||
var packageName = Monikers.GetDebianSharedFrameworkPackageName(c);
|
||||
var installerFile = c.BuildContext.Get<string>("SharedFrameworkInstallerFile");
|
||||
var uploadUrl = $"https://dotnetcli.blob.core.windows.net/dotnet/{Channel}/Installers/{Version}/{Path.GetFileName(installerFile)}";
|
||||
var uploadJson = GenerateUploadJsonFile(packageName, Version, uploadUrl);
|
||||
|
||||
Cmd(Path.Combine(Dirs.RepoRoot, "scripts", "publish", "repoapi_client.sh"), "-addpkg", uploadJson)
|
||||
.Execute()
|
||||
.EnsureSuccessful();
|
||||
|
||||
return c.Success();
|
||||
}
|
||||
|
||||
[Target]
|
||||
[BuildPlatforms(BuildPlatform.Ubuntu)]
|
||||
public static BuildTargetResult PublishSharedHostDebToDebianRepo(BuildTargetContext c)
|
||||
{
|
||||
var packageName = Monikers.GetDebianSharedHostPackageName(c);
|
||||
var installerFile = c.BuildContext.Get<string>("SharedHostInstallerFile");
|
||||
var uploadUrl = $"https://dotnetcli.blob.core.windows.net/dotnet/{Channel}/Installers/{Version}/{Path.GetFileName(installerFile)}";
|
||||
var uploadJson = GenerateUploadJsonFile(packageName, Version, uploadUrl);
|
||||
|
||||
Cmd(Path.Combine(Dirs.RepoRoot, "scripts", "publish", "repoapi_client.sh"), "-addpkg", uploadJson)
|
||||
.Execute()
|
||||
.EnsureSuccessful();
|
||||
|
||||
return c.Success();
|
||||
}
|
||||
|
||||
[Target]
|
||||
[Environment("DOCKER_HUB_REPO")]
|
||||
[Environment("DOCKER_HUB_TRIGGER_TOKEN")]
|
||||
|
|
|
@ -40,6 +40,30 @@ namespace Microsoft.DotNet.Cli.Build
|
|||
return packageName;
|
||||
}
|
||||
|
||||
public static string GetSdkDebianPackageName(BuildTargetContext c)
|
||||
{
|
||||
var channel = c.BuildContext.Get<string>("Channel").ToLower();
|
||||
var sharedFrameworkNugetVersion = c.BuildContext.Get<string>("SharedFrameworkNugetVersion");
|
||||
|
||||
var packagePrefix = "";
|
||||
switch (channel)
|
||||
{
|
||||
case "dev":
|
||||
packagePrefix = "dotnet-nightly";
|
||||
break;
|
||||
case "beta":
|
||||
case "rc1":
|
||||
case "rc2":
|
||||
case "rtm":
|
||||
packagePrefix = "dotnet";
|
||||
break;
|
||||
default:
|
||||
throw new Exception($"Unknown channel - {channel}");
|
||||
}
|
||||
|
||||
return $"{packagePrefix}-dev-{sharedFrameworkNugetVersion}";
|
||||
}
|
||||
|
||||
public static string GetDebianSharedFrameworkPackageName(BuildTargetContext c)
|
||||
{
|
||||
var sharedFrameworkNugetVersion = c.BuildContext.Get<string>("SharedFrameworkNugetVersion");
|
||||
|
@ -47,6 +71,13 @@ namespace Microsoft.DotNet.Cli.Build
|
|||
return $"dotnet-sharedframework-{SharedFrameworkName}-{sharedFrameworkNugetVersion}".ToLower();
|
||||
}
|
||||
|
||||
public static string GetDebianSharedHostPackageName(BuildTargetContext c)
|
||||
{
|
||||
var sharedFrameworkNugetVersion = c.BuildContext.Get<string>("SharedFrameworkNugetVersion");
|
||||
|
||||
return $"dotnet-host".ToLower();
|
||||
}
|
||||
|
||||
public static string GetOSShortName()
|
||||
{
|
||||
string osname = "";
|
||||
|
|
|
@ -28,6 +28,8 @@ help(){
|
|||
echo " --manpages <man pages directory> Directory containing man pages for the package (Optional)."
|
||||
echo " --output <output debfile> The full path to which the package will be written."
|
||||
echo " --package-name <package name> Package to identify during installation. Example - 'dotnet-nightly', 'dotnet'"
|
||||
echo " --framework-nuget-name <name> The name of the nuget package that produced this shared framework."
|
||||
echo " --framework-nuget-version <ver> The versionf of the nuget package that produced this shared framework."
|
||||
echo " --previous-version-url <url> Url to the previous version of the debian packge against which to run the upgrade tests."
|
||||
echo " --obj-root <object root> Root folder for intermediate objects."
|
||||
exit 1
|
||||
|
@ -62,6 +64,18 @@ parseargs(){
|
|||
PREVIOUS_VERSION_URL=$2
|
||||
shift
|
||||
;;
|
||||
--framework-debian-package-name)
|
||||
SHARED_FRAMEWORK_DEBIAN_PACKAGE_NAME=$2
|
||||
shift
|
||||
;;
|
||||
--framework-nuget-name)
|
||||
SHARED_FRAMEWORK_NUGET_NAME=$2
|
||||
shift
|
||||
;;
|
||||
--framework-nuget-version)
|
||||
SHARED_FRAMEWORK_NUGET_VERSION=$2
|
||||
shift
|
||||
;;
|
||||
--obj-root)
|
||||
OBJECT_DIR=$2
|
||||
shift
|
||||
|
@ -91,11 +105,19 @@ parseargs(){
|
|||
if [ -z "$DOTNET_DEB_PACKAGE_NAME" ]; then
|
||||
echo "Provide an the name for the debian package. Missing option '--package-name'" && help
|
||||
fi
|
||||
|
||||
if [ -z "$SHARED_FRAMEWORK_NUGET_NAME" ]; then
|
||||
echo "Provide the NuGet name of the targetted Shared Framework. Missing option '--framework-nuget-name'" && help
|
||||
fi
|
||||
|
||||
if [ -z "$PREVIOUS_VERSION_URL" ]; then
|
||||
echo "Provide a URL to the previous debian pacakge (Required for running upgrade tests). Missing option '--previous-version-url'" && help
|
||||
fi
|
||||
|
||||
if [ -z "$SHARED_FRAMEWORK_NUGET_VERSION" ]; then
|
||||
echo "Provide the NuGet version of the targetted Shared Framework. Missing option '--framework-nuget-version'" && help
|
||||
fi
|
||||
|
||||
if [ ! -d "$REPO_BINARIES_DIR" ]; then
|
||||
echo "'$REPO_BINARIES_DIR' - is either missing or not a directory" 1>&2
|
||||
exit 1
|
||||
|
@ -103,7 +125,7 @@ parseargs(){
|
|||
|
||||
}
|
||||
|
||||
parseargs $@
|
||||
parseargs "$@"
|
||||
|
||||
PACKAGING_ROOT="$REPOROOT/packaging/debian"
|
||||
PACKAGING_TOOL_DIR="$REPOROOT/tools/DebianPackageTool"
|
||||
|
@ -118,6 +140,7 @@ rm -f "$PACKAGE_OUTPUT_DIR/*.deb"
|
|||
execute_build(){
|
||||
create_empty_debian_layout
|
||||
copy_files_to_debian_layout
|
||||
update_debian_json
|
||||
create_debian_package
|
||||
}
|
||||
|
||||
|
@ -144,10 +167,10 @@ copy_files_to_debian_layout(){
|
|||
cp -a "$REPO_BINARIES_DIR/." "$PACKAGE_LAYOUT_DIR/package_root"
|
||||
|
||||
# Copy config file
|
||||
cp "$PACKAGING_ROOT/$DOTNET_DEB_PACKAGE_NAME-debian_config.json" "$PACKAGE_LAYOUT_DIR/debian_config.json"
|
||||
cp "$PACKAGING_ROOT/dotnet-debian_config.json" "$PACKAGE_LAYOUT_DIR/debian_config.json"
|
||||
|
||||
# Copy Manpages
|
||||
cp -a "$MANPAGE_DIR/." "$PACKAGE_LAYOUT_DIR/docs"
|
||||
cp -a "$MANPAGE_DIR/sdk/." "$PACKAGE_LAYOUT_DIR/docs"
|
||||
}
|
||||
|
||||
create_debian_package(){
|
||||
|
@ -155,7 +178,16 @@ create_debian_package(){
|
|||
|
||||
mkdir -p "$PACKAGE_OUTPUT_DIR"
|
||||
|
||||
"$PACKAGING_TOOL_DIR/package_tool" -i "$PACKAGE_LAYOUT_DIR" -o "$PACKAGE_OUTPUT_DIR" -v $DOTNET_CLI_VERSION -n $DOTNET_DEB_PACKAGE_NAME
|
||||
"$PACKAGING_TOOL_DIR/package_tool" -i "$PACKAGE_LAYOUT_DIR" -o "$PACKAGE_OUTPUT_DIR" -v $DOTNET_CLI_VERSION -n "$DOTNET_DEB_PACKAGE_NAME"
|
||||
}
|
||||
|
||||
update_debian_json()
|
||||
{
|
||||
header "Updating debian.json file"
|
||||
sed -i "s/%SHARED_FRAMEWORK_DEBIAN_PACKAGE_NAME%/$SHARED_FRAMEWORK_DEBIAN_PACKAGE_NAME/g" "$PACKAGE_LAYOUT_DIR"/debian_config.json
|
||||
sed -i "s/%SHARED_FRAMEWORK_NUGET_NAME%/$SHARED_FRAMEWORK_NUGET_NAME/g" "$PACKAGE_LAYOUT_DIR"/debian_config.json
|
||||
sed -i "s/%SHARED_FRAMEWORK_NUGET_VERSION%/$SHARED_FRAMEWORK_NUGET_VERSION/g" "$PACKAGE_LAYOUT_DIR"/debian_config.json
|
||||
sed -i "s/%SDK_NUGET_VERSION%/$DOTNET_CLI_VERSION/g" "$PACKAGE_LAYOUT_DIR"/debian_config.json
|
||||
}
|
||||
|
||||
test_debian_package(){
|
||||
|
@ -163,10 +195,6 @@ test_debian_package(){
|
|||
|
||||
install_bats
|
||||
run_package_integrity_tests
|
||||
|
||||
install_debian_package
|
||||
run_e2e_test
|
||||
remove_debian_package
|
||||
}
|
||||
|
||||
install_bats() {
|
||||
|
@ -174,32 +202,14 @@ install_bats() {
|
|||
git clone https://github.com/sstephenson/bats.git $TEST_STAGE_DIR
|
||||
}
|
||||
|
||||
install_debian_package() {
|
||||
sudo dpkg -i $DEBIAN_FILE
|
||||
}
|
||||
|
||||
remove_debian_package() {
|
||||
sudo dpkg -r $DOTNET_DEB_PACKAGE_NAME
|
||||
}
|
||||
|
||||
run_package_integrity_tests() {
|
||||
# Set LAST_VERSION_URL to enable upgrade tests
|
||||
export LAST_VERSION_URL="$PREVIOUS_VERSION_URL"
|
||||
# Temporarily disable last version until we have one with shared fx
|
||||
# export LAST_VERSION_URL="$PREVIOUS_VERSION_URL"
|
||||
|
||||
$TEST_STAGE_DIR/bin/bats $PACKAGE_OUTPUT_DIR/test_package.bats
|
||||
}
|
||||
|
||||
run_e2e_test(){
|
||||
local dotnet_path="/usr/bin/dotnet"
|
||||
|
||||
header "Running EndToEnd Tests against debian package using ${dotnet_path}"
|
||||
|
||||
# Won't affect outer functions
|
||||
cd $REPOROOT/test/EndToEnd
|
||||
$dotnet_path build
|
||||
$dotnet_path test -xml $TEST_STAGE_DIR/debian-endtoend-testResults.xml
|
||||
}
|
||||
|
||||
execute_build
|
||||
|
||||
DEBIAN_FILE=$(find $PACKAGE_OUTPUT_DIR -iname "*.deb")
|
||||
|
|
|
@ -127,7 +127,7 @@ update_debian_json()
|
|||
}
|
||||
|
||||
test_debian_package(){
|
||||
header "Testing debian package"
|
||||
header "Testing debian Shared Framework package"
|
||||
|
||||
install_bats
|
||||
run_package_integrity_tests
|
||||
|
|
|
@ -25,6 +25,7 @@ help(){
|
|||
echo "Options:"
|
||||
echo " --input <input directory> Package the entire contents of the directory tree."
|
||||
echo " --output <output debfile> The full path to which the package will be written."
|
||||
echo " --package-name <package name> Package to identify during installation. Example - 'dotnet-sharedhost'"
|
||||
echo " --obj-root <object root> Root folder for intermediate objects."
|
||||
echo " --version <version> Version for the debain package."
|
||||
exit 1
|
||||
|
@ -41,6 +42,10 @@ while [[ $# > 0 ]]; do
|
|||
REPO_BINARIES_DIR=$2
|
||||
shift
|
||||
;;
|
||||
-p|--package-name)
|
||||
SHARED_HOST_DEBIAN_PACKAGE_NAME=$2
|
||||
shift
|
||||
;;
|
||||
--obj-root)
|
||||
OBJECT_DIR=$2
|
||||
shift
|
||||
|
@ -52,6 +57,10 @@ while [[ $# > 0 ]]; do
|
|||
--help)
|
||||
help
|
||||
;;
|
||||
-m|--manpages)
|
||||
MANPAGE_DIR=$2
|
||||
shift
|
||||
;;
|
||||
*)
|
||||
break
|
||||
;;
|
||||
|
@ -92,6 +101,9 @@ copy_files_to_debian_layout(){
|
|||
|
||||
# Copy config file
|
||||
cp "$PACKAGING_ROOT/dotnet-sharedhost-debian_config.json" "$PACKAGE_LAYOUT_DIR/debian_config.json"
|
||||
|
||||
# Copy Manpages
|
||||
cp -a "$MANPAGE_DIR/host/." "$PACKAGE_LAYOUT_DIR/docs"
|
||||
}
|
||||
|
||||
create_debian_package(){
|
||||
|
@ -99,11 +111,11 @@ create_debian_package(){
|
|||
|
||||
mkdir -p "$PACKAGE_OUTPUT_DIR"
|
||||
|
||||
"$PACKAGING_TOOL_DIR/package_tool" -i "$PACKAGE_LAYOUT_DIR" -o "$PACKAGE_OUTPUT_DIR" -v "$SHARED_HOST_DEBIAN_VERSION"
|
||||
"$PACKAGING_TOOL_DIR/package_tool" -i "$PACKAGE_LAYOUT_DIR" -o "$PACKAGE_OUTPUT_DIR" -n "$SHARED_HOST_DEBIAN_PACKAGE_NAME" -v "$SHARED_HOST_DEBIAN_VERSION"
|
||||
}
|
||||
|
||||
test_debian_package(){
|
||||
header "Testing debian package"
|
||||
header "Testing debian Shared Host package"
|
||||
|
||||
install_bats
|
||||
run_package_integrity_tests
|
||||
|
|
|
@ -13,6 +13,7 @@ while [ -h "$SOURCE" ]; do # resolve $SOURCE until the file is no longer a symli
|
|||
[[ "$SOURCE" != /* ]] && SOURCE="$DIR/$SOURCE" # if $SOURCE was a relative symlink, we need to resolve it relative to the path where the symlink file was located
|
||||
done
|
||||
DIR="$( cd -P "$( dirname "$SOURCE" )" && pwd )"
|
||||
OLDPATH="$PATH"
|
||||
|
||||
source "$DIR/common/_prettyprint.sh"
|
||||
|
||||
|
@ -109,6 +110,7 @@ echo "Restoring Build Script projects..."
|
|||
echo "Compiling Build Scripts..."
|
||||
dotnet publish "$DIR/dotnet-cli-build" -o "$DIR/dotnet-cli-build/bin" --framework netstandardapp1.5
|
||||
|
||||
export PATH="$OLDPATH"
|
||||
# Run the builder
|
||||
echo "Invoking Build Scripts..."
|
||||
echo "Configuration: $CONFIGURATION"
|
||||
|
|
|
@ -25,7 +25,7 @@ namespace Microsoft.DotNet.Tools.Test.Utilities
|
|||
var commandPath = _command;
|
||||
ResolveCommand(ref commandPath, ref args);
|
||||
|
||||
Console.WriteLine($"Executing - {_command} {args}");
|
||||
Console.WriteLine($"Executing - {commandPath} {args}");
|
||||
|
||||
var stdOut = new StreamForwarder();
|
||||
var stdErr = new StreamForwarder();
|
||||
|
@ -38,12 +38,12 @@ namespace Microsoft.DotNet.Tools.Test.Utilities
|
|||
|
||||
public virtual CommandResult ExecuteWithCapturedOutput(string args = "")
|
||||
{
|
||||
Console.WriteLine($"Executing (Captured Output) - {_command} {args}");
|
||||
|
||||
var command = _command;
|
||||
ResolveCommand(ref command, ref args);
|
||||
var commandPath = Env.GetCommandPath(command, ".exe", ".cmd", "") ??
|
||||
Env.GetCommandPathFromRootPath(AppContext.BaseDirectory, command, ".exe", ".cmd", "");
|
||||
|
||||
Console.WriteLine($"Executing (Captured Output) - {commandPath} {args}");
|
||||
|
||||
var stdOut = new StreamForwarder();
|
||||
var stdErr = new StreamForwarder();
|
||||
|
@ -64,7 +64,7 @@ namespace Microsoft.DotNet.Tools.Test.Utilities
|
|||
newArgs += " " + args;
|
||||
}
|
||||
args = newArgs;
|
||||
executable = "corehost";
|
||||
executable = "dotnet";
|
||||
}
|
||||
|
||||
if (!Path.IsPathRooted(executable))
|
||||
|
|
|
@ -218,7 +218,7 @@ package_docs(){
|
|||
|
||||
## Generation Functions ##
|
||||
generate_config_templates(){
|
||||
python ${SCRIPT_DIR}/scripts/config_template_generator.py $CONFIG $SCRIPT_DIR/templates/debian $DEBIAN_DIR $PACKAGE_VERSION
|
||||
python ${SCRIPT_DIR}/scripts/config_template_generator.py $CONFIG $SCRIPT_DIR/templates/debian $DEBIAN_DIR $PACKAGE_NAME $PACKAGE_VERSION
|
||||
}
|
||||
|
||||
generate_manpages(){
|
||||
|
|
|
@ -33,12 +33,17 @@ class UTC(datetime.tzinfo):
|
|||
return datetime.timedelta(0)
|
||||
|
||||
# Generation Functions
|
||||
def generate_and_write_all(config_data, template_dir, output_dir, package_version=None):
|
||||
def generate_and_write_all(config_data, template_dir, output_dir, package_name=None, package_version=None):
|
||||
try:
|
||||
changelog_contents = generate_changelog(config_data, template_dir, package_version=package_version)
|
||||
control_contents = generate_control(config_data, template_dir)
|
||||
changelog_contents = generate_changelog(
|
||||
config_data,
|
||||
template_dir,
|
||||
package_name=package_name,
|
||||
package_version=package_version)
|
||||
|
||||
control_contents = generate_control(config_data, template_dir, package_name=package_name)
|
||||
copyright_contents = generate_copyright(config_data, template_dir)
|
||||
symlink_contents = generate_symlinks(config_data)
|
||||
symlink_contents = generate_symlinks(config_data, package_name=package_name)
|
||||
except Exception as exc:
|
||||
print exc
|
||||
help_and_exit("Error: Generation Failed, check your config file.")
|
||||
|
@ -49,20 +54,19 @@ def generate_and_write_all(config_data, template_dir, output_dir, package_versio
|
|||
|
||||
# Symlink File is optional
|
||||
if symlink_contents:
|
||||
symlink_filename = get_symlink_filename(config_data)
|
||||
symlink_filename = get_symlink_filename(config_data, package_name=package_name)
|
||||
write_file(symlink_contents, output_dir, symlink_filename)
|
||||
|
||||
return
|
||||
|
||||
def generate_changelog(config_data, template_dir, package_version=None):
|
||||
def generate_changelog(config_data, template_dir, package_version=None, package_name=None):
|
||||
template = get_template(template_dir, FILE_CHANGELOG)
|
||||
|
||||
release_data = config_data["release"]
|
||||
|
||||
# Allow for Version Override
|
||||
config_package_version = release_data["package_version"]
|
||||
if package_version is None:
|
||||
package_version = config_package_version
|
||||
package_version = package_version or config_package_version
|
||||
|
||||
template_dict = dict(\
|
||||
PACKAGE_VERSION=package_version,
|
||||
|
@ -70,7 +74,7 @@ def generate_changelog(config_data, template_dir, package_version=None):
|
|||
CHANGELOG_MESSAGE=release_data["changelog_message"],
|
||||
URGENCY=release_data.get("urgency", "low"),
|
||||
|
||||
PACKAGE_NAME=config_data["package_name"],
|
||||
PACKAGE_NAME=package_name or config_data["package_name"],
|
||||
MAINTAINER_NAME=config_data["maintainer_name"],
|
||||
MAINTAINER_EMAIL=config_data["maintainer_email"],
|
||||
DATE=datetime.datetime.now(UTC()).strftime(CHANGELOG_DATE_FORMAT)
|
||||
|
@ -80,7 +84,7 @@ def generate_changelog(config_data, template_dir, package_version=None):
|
|||
|
||||
return contents
|
||||
|
||||
def generate_control(config_data, template_dir):
|
||||
def generate_control(config_data, template_dir, package_name=None):
|
||||
template = get_template(template_dir, FILE_CONTROL)
|
||||
|
||||
dependency_data = config_data.get("debian_dependencies", None)
|
||||
|
@ -104,7 +108,7 @@ def generate_control(config_data, template_dir):
|
|||
DEPENDENT_PACKAGES=dependency_str,
|
||||
CONFLICT_PACKAGES=conflict_str,
|
||||
|
||||
PACKAGE_NAME=config_data["package_name"],
|
||||
PACKAGE_NAME=package_name or config_data["package_name"],
|
||||
MAINTAINER_NAME=config_data["maintainer_name"],
|
||||
MAINTAINER_EMAIL=config_data["maintainer_email"]
|
||||
)
|
||||
|
@ -128,9 +132,9 @@ def generate_copyright(config_data, template_dir):
|
|||
|
||||
return contents
|
||||
|
||||
def generate_symlinks(config_data):
|
||||
def generate_symlinks(config_data, package_name=None):
|
||||
symlink_entries = []
|
||||
package_root_path = get_package_root(config_data)
|
||||
package_root_path = get_package_root(config_data, package_name=package_name)
|
||||
|
||||
symlink_data = config_data.get("symlinks", dict())
|
||||
|
||||
|
@ -143,12 +147,14 @@ def generate_symlinks(config_data):
|
|||
return '\n'.join(symlink_entries)
|
||||
|
||||
# Helper Functions
|
||||
def get_package_root(config_data):
|
||||
package_name = config_data["package_name"]
|
||||
return PACKAGE_ROOT_FORMAT.format(package_name=package_name)
|
||||
def get_package_root(config_data, package_name=None):
|
||||
config_install_root = config_data.get("install_root", None)
|
||||
package_name = package_name or config_data["package_name"]
|
||||
|
||||
def get_symlink_filename(config_data):
|
||||
package_name = config_data["package_name"]
|
||||
return config_install_root or PACKAGE_ROOT_FORMAT.format(package_name=package_name)
|
||||
|
||||
def get_symlink_filename(config_data, package_name=None):
|
||||
package_name = package_name or config_data["package_name"]
|
||||
return FILE_SYMLINK_FORMAT.format(package_name=package_name)
|
||||
|
||||
def get_dependendent_packages_string(debian_dependency_data):
|
||||
|
@ -201,7 +207,7 @@ def help_and_exit(msg):
|
|||
sys.exit(1)
|
||||
|
||||
def print_usage():
|
||||
print "Usage: config_template_generator.py [config file path] [template directory path] [output directory] (package version)"
|
||||
print "Usage: config_template_generator.py [config file path] [template directory path] [output directory] (package name) (package version)"
|
||||
|
||||
def parse_and_validate_args():
|
||||
if len(sys.argv) < 4:
|
||||
|
@ -211,10 +217,14 @@ def parse_and_validate_args():
|
|||
config_path = sys.argv[1]
|
||||
template_dir = sys.argv[2]
|
||||
output_dir = sys.argv[3]
|
||||
name_override = None
|
||||
version_override = None
|
||||
|
||||
if len(sys.argv) >= 5:
|
||||
version_override = sys.argv[4]
|
||||
name_override = sys.argv[4]
|
||||
|
||||
if len(sys.argv) >= 6:
|
||||
version_override = sys.argv[5]
|
||||
|
||||
if not os.path.isfile(config_path):
|
||||
help_and_exit("Error: Invalid config file path")
|
||||
|
@ -225,16 +235,14 @@ def parse_and_validate_args():
|
|||
if not os.path.isdir(output_dir):
|
||||
help_and_exit("Error: Invalid output directory path")
|
||||
|
||||
return (config_path, template_dir, output_dir, version_override)
|
||||
|
||||
|
||||
return (config_path, template_dir, output_dir, name_override, version_override)
|
||||
|
||||
def execute():
|
||||
config_path, template_dir, output_dir, version_override = parse_and_validate_args()
|
||||
config_path, template_dir, output_dir, name_override, version_override = parse_and_validate_args()
|
||||
|
||||
config_data = load_json(config_path)
|
||||
|
||||
generate_and_write_all(config_data, template_dir, output_dir, package_version=version_override)
|
||||
generate_and_write_all(config_data, template_dir, output_dir, package_name = name_override, package_version=version_override)
|
||||
|
||||
if __name__ == "__main__":
|
||||
execute()
|
|
@ -105,7 +105,11 @@ add_dir_to_install(){
|
|||
|
||||
_copy_files_to_package "$copy_from_dir" "$rel_install_path" "${dir_files[@]}"
|
||||
|
||||
add_system_dir_placement "$rel_install_path" "${INSTALL_ROOT}/$rel_install_path"
|
||||
for file in "${dir_files[@]}"
|
||||
do
|
||||
file_rel_dir="$(dirname $file)"
|
||||
add_system_file_placement "${rel_install_path}/${file}" "${INSTALL_ROOT}/$rel_install_path/${file_rel_dir}"
|
||||
done
|
||||
}
|
||||
|
||||
# Usage: _copy_files_to_package {local files root directory} {relative directory in package to copy to} "${filepath_array[@]}"
|
||||
|
|
Loading…
Add table
Reference in a new issue