Fix debian packages

This commit is contained in:
Bryan Thornbury 2016-03-15 16:41:18 -07:00
parent 92b3ad0001
commit 97a01213ac
13 changed files with 222 additions and 121 deletions

View file

@ -28,9 +28,8 @@
},
"debian_dependencies":{
"libssl1.0.0" : {},
"clang-3.5" : {},
"libcurl3" : {}
"SHARED_FRAMEWORK_NUGET_NAME" : {}
},
"package_conflicts" : [
@ -38,7 +37,6 @@
],
"symlinks": {
"bin/dotnet" : "usr/bin/dotnet",
"bin/dotnet-compile-native" : "/usr/bin/dotnet-compile-native"
}
}

View file

@ -28,9 +28,8 @@
},
"debian_dependencies":{
"libssl1.0.0" : {},
"clang-3.5" : {},
"libcurl3" : {}
"SHARED_FRAMEWORK_NUGET_NAME" : {}
},
"package_conflicts" : [

View file

@ -31,5 +31,9 @@
"debian_dependencies":{
"libssl-dev" : {},
"libcurl3" : {}
},
"symlinks": {
"dotnet" : "/usr/bin/dotnet"
}
}

View file

@ -29,6 +29,7 @@
},
"debian_dependencies":{
"dotnet-host" : {},
"libssl1.0.0" : {},
"libcurl3" : {}
}

View file

@ -0,0 +1,172 @@
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]
[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>("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 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", Dirs.Stage2, "-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 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");
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();
}
[Target(nameof(InstallPackages),
nameof(RunE2ETest),
nameof(RemovePackages))]
[BuildPlatforms(BuildPlatform.Ubuntu)]
public static BuildTargetResult TestDebInstaller(BuildTargetContext c)
{
return c.Success();
}
[Target]
[BuildPlatforms(BuildPlatform.Ubuntu)]
public static BuildTargetResult InstallPackages(BuildTargetContext c)
{
IEnumerable<string> orderedPackageFiles = new List<string>()
{
c.BuildContext.Get<string>("SharedHostInstallerFile"),
c.BuildContext.Get<string>("SharedFrameworkInstallerFile"),
c.BuildContext.Get<string>("SdkInstallerFile")
};
foreach(var fileName in orderedPackageFiles)
{
Cmd("sudo", "dpkg", "-i", fileName)
.Execute()
.EnsureSuccessful();
}
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> orderedPackageFiles = new List<string>()
{
Monikers.GetDebianPackageName(c),
Monikers.GetDebianSharedFrameworkPackageName(c),
Monikers.GetDebianSharedHostPackageName(c)
};
foreach(var packageFile in orderedPackageFiles)
{
Cmd("sudo", "dpkg", "-r", packageFile)
.Execute()
.EnsureSuccessful();
}
return c.Success();
}
}
}

View file

@ -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();
}
}
}

View file

@ -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)

View file

@ -47,6 +47,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 = "";

View file

@ -62,6 +62,14 @@ parseargs(){
PREVIOUS_VERSION_URL=$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
@ -118,6 +126,7 @@ rm -f "$PACKAGE_OUTPUT_DIR/*.deb"
execute_build(){
create_empty_debian_layout
copy_files_to_debian_layout
update_debian_json
create_debian_package
}
@ -158,15 +167,18 @@ create_debian_package(){
"$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_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
}
test_debian_package(){
header "Testing debian package"
install_bats
run_package_integrity_tests
install_debian_package
run_e2e_test
remove_debian_package
}
install_bats() {
@ -174,14 +186,6 @@ 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"
@ -189,17 +193,6 @@ run_package_integrity_tests() {
$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")

View file

@ -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

View file

@ -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
@ -99,11 +104,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

View file

@ -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"

View file

@ -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))