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:
Bryan Thornbury 2016-03-22 18:21:03 -07:00
commit 34ca32ebaf
23 changed files with 387 additions and 166 deletions

View file

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

View file

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

View file

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

View file

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

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

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,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")]

View file

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

View file

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

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

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

View file

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

View file

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

View file

@ -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[@]}"