From d12a1ab32fd7455bca7467473e9b92e1a245de4d Mon Sep 17 00:00:00 2001 From: Nikita Tsukanov Date: Wed, 3 Oct 2018 21:12:14 +0300 Subject: [PATCH 01/12] Update azure-pipelines.yml --- azure-pipelines.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index e47c6513b00..6794b9f2fe0 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -3,11 +3,12 @@ pool: vmImage: 'macOS 10.13' steps: +- bash: 'xcodebuild -showsdks' - task: Xcode@5 inputs: actions: 'build' scheme: '' - sdk: 'macosx10.12' + sdk: 'macosx10.13' configuration: 'Release' xcWorkspacePath: '**/*.xcodeproj/project.xcworkspace' xcodeVersion: 'default' # Options: 8, 9, default, specifyPath From f48ade4ed520450d7377e4f27fba72bb480beec2 Mon Sep 17 00:00:00 2001 From: Dan Walmsley Date: Wed, 3 Oct 2018 19:59:46 +0100 Subject: [PATCH 02/12] add cake script to build managed side. --- .gitignore | 9 +-- azure-pipelines.yml | 12 ++++ build.cake | 144 ++++++++++++++++++++++++++++++++++++++++++++ parameters.cake | 69 +++++++++++++++++++++ 4 files changed, 230 insertions(+), 4 deletions(-) create mode 100644 build.cake create mode 100644 parameters.cake diff --git a/.gitignore b/.gitignore index 2695f2a71eb..9caef6f3fdb 100644 --- a/.gitignore +++ b/.gitignore @@ -6,6 +6,7 @@ [Bb]in/ packages/ TestResults/ +artifacts/ # globs Makefile.in @@ -39,7 +40,7 @@ Thumbs.db # dotCover *.dotCover - -src/Avalonia\.Native\.OSX/Avalonia\.Native\.OSX\.xcodeproj/project\.xcworkspace/xcshareddata/IDEWorkspaceChecks\.plist - -src/Avalonia\.Native\.OSX/Avalonia\.Native\.OSX\.xcodeproj/project\.xcworkspace/xcshareddata/WorkspaceSettings\.xcsettings + +src/Avalonia\.Native\.OSX/Avalonia\.Native\.OSX\.xcodeproj/project\.xcworkspace/xcshareddata/IDEWorkspaceChecks\.plist + +src/Avalonia\.Native\.OSX/Avalonia\.Native\.OSX\.xcodeproj/project\.xcworkspace/xcshareddata/WorkspaceSettings\.xcsettings diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 6794b9f2fe0..b0182e0c9ac 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -12,3 +12,15 @@ steps: configuration: 'Release' xcWorkspacePath: '**/*.xcodeproj/project.xcworkspace' xcodeVersion: 'default' # Options: 8, 9, default, specifyPath +- task: DotNetCoreInstaller@0 + inputs: + version: '2.1.401' +- script: | + export COREHOST_TRACE=0 + export DOTNET_SKIP_FIRST_TIME_EXPERIENCE=1 + export DOTNET_CLI_TELEMETRY_OPTOUT=1 + which dotnet + dotnet --info + dotnet tool install -g Cake.Tool --version 0.30.0 + export PATH="$PATH:$HOME/.dotnet/tools" + dotnet cake build.cake -Target="Azure-Linux" -Platform="Any CPU" -Configuration="Release" diff --git a/build.cake b/build.cake new file mode 100644 index 00000000000..8b4ee5cfd8a --- /dev/null +++ b/build.cake @@ -0,0 +1,144 @@ +#load "./parameters.cake" + +Setup(context => +{ + Information("Running tasks..."); + return new Parameters(context); +}); + +Teardown((context, parameters) => +{ + Information("Finished running tasks."); +}); + +Task("Clean") + .Does(parameters => +{ + foreach(var project in parameters.BuildProjects) + { + (string path, string name) = project; + Information($"Clean: {name}"); + DotNetCoreClean($"{path}/{name}/{name}.csproj", new DotNetCoreCleanSettings { + Configuration = parameters.Configuration, + Verbosity = DotNetCoreVerbosity.Minimal + }); + } +}); + +Task("Build") + .Does(parameters => +{ + foreach(var project in parameters.BuildProjects) + { + (string path, string name) = project; + Information($"Build: {name}"); + DotNetCoreBuild($"{path}/{name}/{name}.csproj", new DotNetCoreBuildSettings { + Configuration = parameters.Configuration, + VersionSuffix = parameters.VersionSuffix + }); + } +}); + +Task("Test") + .Does(parameters => +{ + foreach(var project in parameters.TestProjects) + { + (string path, string name) = project; + Information($"Test: {name}"); + DotNetCoreTest($"{path}/{name}/{name}.csproj", new DotNetCoreTestSettings { + Configuration = parameters.Configuration + }); + } +}); + +Task("Publish") + .Does(parameters => +{ + CleanDirectory($"{parameters.Artifacts}/zip"); + var redistVersion = "14.15.26706"; + var redistPath = $"C:\\Program Files (x86)\\Microsoft Visual Studio\\2017\\Community\\VC\\Redist\\MSVC\\{redistVersion}\\x64\\Microsoft.VC141.CRT\\"; + var redistRuntime = "win7-x64"; + foreach(var project in parameters.PublishProjects) + { + (string path, string name, string framework, string runtime) = project; + var output = $"./{parameters.Artifacts}/publish/{name}-{framework}-{runtime}"; + Information($"Publish: {name}, {framework}, {runtime}"); + DotNetCorePublish($"{path}/{name}/{name}.csproj", new DotNetCorePublishSettings { + Configuration = parameters.Configuration, + VersionSuffix = parameters.VersionSuffix, + Framework = framework, + Runtime = runtime, + OutputDirectory = output + }); + if (string.Compare(runtime, redistRuntime, StringComparison.OrdinalIgnoreCase) == 0) + { + CopyFileToDirectory($"{redistPath}msvcp140.dll", output); + CopyFileToDirectory($"{redistPath}vcruntime140.dll", output); + } + Zip($"{parameters.Artifacts}/publish/{name}-{framework}-{runtime}", $"{parameters.Artifacts}/zip/{name}-{framework}-{runtime}.zip"); + } +}); + +Task("Pack") + .Does(parameters => +{ + CleanDirectory($"{parameters.Artifacts}/nuget"); + foreach(var project in parameters.PackProjects) + { + (string path, string name) = project; + Information($"Pack: {name}"); + DotNetCorePack($"{path}/{name}/{name}.csproj", new DotNetCorePackSettings { + Configuration = parameters.Configuration, + VersionSuffix = parameters.VersionSuffix, + OutputDirectory = $"{parameters.Artifacts}/nuget" + }); + } +}); + +Task("Push") + .WithCriteria((context, parameters) => parameters.PushNuGet) + .Does(parameters => +{ + var apiKey = EnvironmentVariable(parameters.IsNugetRelease ? "NUGET_API_KEY" : "MYGET_API_KEY"); + var apiUrl = EnvironmentVariable(parameters.IsNugetRelease ? "NUGET_API_URL" : "MYGET_API_URL"); + var packages = GetFiles($"{parameters.Artifacts}/nuget/*.nupkg"); + foreach (var package in packages) + { + DotNetCoreNuGetPush(package.FullPath, new DotNetCoreNuGetPushSettings { + Source = apiUrl, + ApiKey = apiKey + }); + } +}); + +Task("Default") + .IsDependentOn("Build"); + +Task("AppVeyor") + .IsDependentOn("Clean") + .IsDependentOn("Build") + .IsDependentOn("Test") + .IsDependentOn("Publish") + .IsDependentOn("Pack") + .IsDependentOn("Push"); + +Task("Travis") + .IsDependentOn("Test"); + +Task("CircleCI") + .IsDependentOn("Test"); + +Task("Azure") + .IsDependentOn("Clean") + .IsDependentOn("Build") + .IsDependentOn("Pack") + .IsDependentOn("Push"); + +Task("Azure-macOS") + .IsDependentOn("Test"); + +Task("Azure-Linux") + .IsDependentOn("Test"); + +RunTarget(Context.Argument("target", "Default")); \ No newline at end of file diff --git a/parameters.cake b/parameters.cake new file mode 100644 index 00000000000..1dd1b853750 --- /dev/null +++ b/parameters.cake @@ -0,0 +1,69 @@ + +public class Parameters +{ + public string Configuration { get; private set; } + public string Artifacts { get; private set; } + public string VersionSuffix { get; private set; } + public string NuGetPushBranch { get; private set; } + public string NuGetPushRepoName { get; private set; } + public bool PushNuGet { get; private set; } + public bool IsNugetRelease { get; private set; } + public (string path, string name)[] BuildProjects { get; private set; } + public (string path, string name)[] TestProjects { get; private set; } + public (string path, string name, string framework, string runtime)[] PublishProjects { get; private set; } + public (string path, string name)[] PackProjects { get; private set; } + + public Parameters(ICakeContext context) + { + Configuration = context.Argument("configuration", "Release"); + Artifacts = context.Argument("artifacts", "./artifacts"); + + VersionSuffix = context.Argument("suffix", default(string)); + if (VersionSuffix == null) + { + var build = context.EnvironmentVariable("APPVEYOR_BUILD_VERSION"); + VersionSuffix = build != null ? $"-build{build}" : ""; + } + + NuGetPushBranch = "master"; + NuGetPushRepoName = "AvaloniaUI/Avalonia.Native"; + + var repoName = context.EnvironmentVariable("APPVEYOR_REPO_NAME"); + var repoBranch = context.EnvironmentVariable("APPVEYOR_REPO_BRANCH"); + var repoTag = context.EnvironmentVariable("APPVEYOR_REPO_TAG"); + var repoTagName = context.EnvironmentVariable("APPVEYOR_REPO_TAG_NAME"); + var pullRequestTitle = context.EnvironmentVariable("APPVEYOR_PULL_REQUEST_TITLE"); + + if (pullRequestTitle == null + && string.Compare(repoName, NuGetPushRepoName, StringComparison.OrdinalIgnoreCase) == 0 + && string.Compare(repoBranch, NuGetPushBranch, StringComparison.OrdinalIgnoreCase) == 0) + { + PushNuGet = true; + } + + if (pullRequestTitle == null + && string.Compare(repoTag, "True", StringComparison.OrdinalIgnoreCase) == 0 + && repoTagName != null) + { + IsNugetRelease = true; + } + + BuildProjects = new [] + { + ( "./src", "Avalonia.Native" ) + }; + + TestProjects = new (string path, string name) [] + { + }; + + PublishProjects = new (string path, string name, string framework, string runtime) [] + { + }; + + PackProjects = new [] + { + ( "./src", "Avalonia.Native" ) + }; + } +} \ No newline at end of file From 0b70105d58dc1478a7bef8c2037e7446ab86e18b Mon Sep 17 00:00:00 2001 From: Dan Walmsley Date: Wed, 3 Oct 2018 20:02:14 +0100 Subject: [PATCH 03/12] fix build --- azure-pipelines.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index b0182e0c9ac..246aad3bd5b 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -23,4 +23,4 @@ steps: dotnet --info dotnet tool install -g Cake.Tool --version 0.30.0 export PATH="$PATH:$HOME/.dotnet/tools" - dotnet cake build.cake -Target="Azure-Linux" -Platform="Any CPU" -Configuration="Release" + dotnet cake build.cake -Target="Azure" -Platform="Any CPU" -Configuration="Release" From 8e0bee384d88484fbccbb48ccc670a9c7057ad38 Mon Sep 17 00:00:00 2001 From: Dan Walmsley Date: Wed, 3 Oct 2018 20:04:42 +0100 Subject: [PATCH 04/12] build installs castxml --- azure-pipelines.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 246aad3bd5b..d49991f792c 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -16,6 +16,7 @@ steps: inputs: version: '2.1.401' - script: | + brew install castxml export COREHOST_TRACE=0 export DOTNET_SKIP_FIRST_TIME_EXPERIENCE=1 export DOTNET_CLI_TELEMETRY_OPTOUT=1 From 2a2de46384cee162ba6e0aeb268858bc1fbc49c3 Mon Sep 17 00:00:00 2001 From: Dan Walmsley Date: Wed, 3 Oct 2018 20:41:39 +0100 Subject: [PATCH 05/12] fix build number --- parameters.cake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parameters.cake b/parameters.cake index 1dd1b853750..1ebc599ce50 100644 --- a/parameters.cake +++ b/parameters.cake @@ -21,7 +21,7 @@ public class Parameters VersionSuffix = context.Argument("suffix", default(string)); if (VersionSuffix == null) { - var build = context.EnvironmentVariable("APPVEYOR_BUILD_VERSION"); + var build = context.EnvironmentVariable("AZURE_BUILD_VERSION"); VersionSuffix = build != null ? $"-build{build}" : ""; } From 05fec71a727fbf3df6b099eedc21ba11c0533e16 Mon Sep 17 00:00:00 2001 From: Dan Walmsley Date: Wed, 3 Oct 2018 20:46:20 +0100 Subject: [PATCH 06/12] fix build number and force publish package. --- build.cake | 2 +- parameters.cake | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/build.cake b/build.cake index 8b4ee5cfd8a..8f055180de6 100644 --- a/build.cake +++ b/build.cake @@ -97,7 +97,7 @@ Task("Pack") }); Task("Push") - .WithCriteria((context, parameters) => parameters.PushNuGet) + //.WithCriteria((context, parameters) => parameters.PushNuGet) .Does(parameters => { var apiKey = EnvironmentVariable(parameters.IsNugetRelease ? "NUGET_API_KEY" : "MYGET_API_KEY"); diff --git a/parameters.cake b/parameters.cake index 1ebc599ce50..ea679abc31b 100644 --- a/parameters.cake +++ b/parameters.cake @@ -21,7 +21,7 @@ public class Parameters VersionSuffix = context.Argument("suffix", default(string)); if (VersionSuffix == null) { - var build = context.EnvironmentVariable("AZURE_BUILD_VERSION"); + var build = context.EnvironmentVariable("Build.BuildNumber"); VersionSuffix = build != null ? $"-build{build}" : ""; } From 24a4cdd576fcfb1dd8659b3558bea772a44a9188 Mon Sep 17 00:00:00 2001 From: Dan Walmsley Date: Wed, 3 Oct 2018 21:05:25 +0100 Subject: [PATCH 07/12] fix package naming --- build.cake | 8 ++++++-- parameters.cake | 3 ++- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/build.cake b/build.cake index 8f055180de6..d6ab7e5f3f9 100644 --- a/build.cake +++ b/build.cake @@ -91,13 +91,17 @@ Task("Pack") DotNetCorePack($"{path}/{name}/{name}.csproj", new DotNetCorePackSettings { Configuration = parameters.Configuration, VersionSuffix = parameters.VersionSuffix, - OutputDirectory = $"{parameters.Artifacts}/nuget" + OutputDirectory = $"{parameters.Artifacts}/nuget", + EnvironmentVariables = new Dictionary + { + { "VERSION", parameters.Version } + } }); } }); Task("Push") - //.WithCriteria((context, parameters) => parameters.PushNuGet) + .WithCriteria((context, parameters) => parameters.PushNuGet) .Does(parameters => { var apiKey = EnvironmentVariable(parameters.IsNugetRelease ? "NUGET_API_KEY" : "MYGET_API_KEY"); diff --git a/parameters.cake b/parameters.cake index ea679abc31b..f1825591758 100644 --- a/parameters.cake +++ b/parameters.cake @@ -4,6 +4,7 @@ public class Parameters public string Configuration { get; private set; } public string Artifacts { get; private set; } public string VersionSuffix { get; private set; } + public string Version { get; private set; } = "0.7.0"; public string NuGetPushBranch { get; private set; } public string NuGetPushRepoName { get; private set; } public bool PushNuGet { get; private set; } @@ -21,7 +22,7 @@ public class Parameters VersionSuffix = context.Argument("suffix", default(string)); if (VersionSuffix == null) { - var build = context.EnvironmentVariable("Build.BuildNumber"); + var build = context.EnvironmentVariable("BUILD_BUILDNUMBER"); VersionSuffix = build != null ? $"-build{build}" : ""; } From 6eef74bfa83ac92b49f8af5c3495260e389765a6 Mon Sep 17 00:00:00 2001 From: Dan Walmsley Date: Wed, 3 Oct 2018 21:14:10 +0100 Subject: [PATCH 08/12] build number in nuget package. --- build.cake | 2 +- parameters.cake | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/build.cake b/build.cake index d6ab7e5f3f9..0b356ec9bdf 100644 --- a/build.cake +++ b/build.cake @@ -90,7 +90,7 @@ Task("Pack") Information($"Pack: {name}"); DotNetCorePack($"{path}/{name}/{name}.csproj", new DotNetCorePackSettings { Configuration = parameters.Configuration, - VersionSuffix = parameters.VersionSuffix, + VersionSuffix = "parameters.VersionSuffix", OutputDirectory = $"{parameters.Artifacts}/nuget", EnvironmentVariables = new Dictionary { diff --git a/parameters.cake b/parameters.cake index f1825591758..780ab36d4b2 100644 --- a/parameters.cake +++ b/parameters.cake @@ -26,6 +26,8 @@ public class Parameters VersionSuffix = build != null ? $"-build{build}" : ""; } + Version += "-build" + context.EnvironmentVariable("BUILD_BUILDNUMBER"); + NuGetPushBranch = "master"; NuGetPushRepoName = "AvaloniaUI/Avalonia.Native"; From 10559441dc7c66a084664296f3b924276f5bbe37 Mon Sep 17 00:00:00 2001 From: Dan Walmsley Date: Wed, 3 Oct 2018 21:22:02 +0100 Subject: [PATCH 09/12] fix package name. and force push to test --- build.cake | 2 +- parameters.cake | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/build.cake b/build.cake index 0b356ec9bdf..49c7b040397 100644 --- a/build.cake +++ b/build.cake @@ -101,7 +101,7 @@ Task("Pack") }); Task("Push") - .WithCriteria((context, parameters) => parameters.PushNuGet) + //.WithCriteria((context, parameters) => parameters.PushNuGet) .Does(parameters => { var apiKey = EnvironmentVariable(parameters.IsNugetRelease ? "NUGET_API_KEY" : "MYGET_API_KEY"); diff --git a/parameters.cake b/parameters.cake index 780ab36d4b2..5cecf21facd 100644 --- a/parameters.cake +++ b/parameters.cake @@ -26,7 +26,7 @@ public class Parameters VersionSuffix = build != null ? $"-build{build}" : ""; } - Version += "-build" + context.EnvironmentVariable("BUILD_BUILDNUMBER"); + Version += "-build" + context.EnvironmentVariable("BUILD_BUILDNUMBER").Replace(".",""); NuGetPushBranch = "master"; NuGetPushRepoName = "AvaloniaUI/Avalonia.Native"; From 931331c33a7bddf3509db6aed91e5d3961a0b08b Mon Sep 17 00:00:00 2001 From: Dan Walmsley Date: Thu, 4 Oct 2018 10:37:28 +0100 Subject: [PATCH 10/12] fix logic for pushing nuget package --- build.cake | 2 +- parameters.cake | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/build.cake b/build.cake index 49c7b040397..0b356ec9bdf 100644 --- a/build.cake +++ b/build.cake @@ -101,7 +101,7 @@ Task("Pack") }); Task("Push") - //.WithCriteria((context, parameters) => parameters.PushNuGet) + .WithCriteria((context, parameters) => parameters.PushNuGet) .Does(parameters => { var apiKey = EnvironmentVariable(parameters.IsNugetRelease ? "NUGET_API_KEY" : "MYGET_API_KEY"); diff --git a/parameters.cake b/parameters.cake index 5cecf21facd..4c5332741db 100644 --- a/parameters.cake +++ b/parameters.cake @@ -29,13 +29,13 @@ public class Parameters Version += "-build" + context.EnvironmentVariable("BUILD_BUILDNUMBER").Replace(".",""); NuGetPushBranch = "master"; - NuGetPushRepoName = "AvaloniaUI/Avalonia.Native"; + NuGetPushRepoName = "https://github.com/AvaloniaUI/Avalonia.Native"; - var repoName = context.EnvironmentVariable("APPVEYOR_REPO_NAME"); - var repoBranch = context.EnvironmentVariable("APPVEYOR_REPO_BRANCH"); + var repoName = context.EnvironmentVariable("BUILD_REPOSITORY_URI"); + var repoBranch = context.EnvironmentVariable("BUILD_SOURCEBRANCHNAME"); var repoTag = context.EnvironmentVariable("APPVEYOR_REPO_TAG"); var repoTagName = context.EnvironmentVariable("APPVEYOR_REPO_TAG_NAME"); - var pullRequestTitle = context.EnvironmentVariable("APPVEYOR_PULL_REQUEST_TITLE"); + var pullRequestTitle = context.EnvironmentVariable("SYSTEM_PULLREQUEST_SOURCEBRANCH"); if (pullRequestTitle == null && string.Compare(repoName, NuGetPushRepoName, StringComparison.OrdinalIgnoreCase) == 0 From 5980c068dc8f041625ec0b645feb6a380ccb7510 Mon Sep 17 00:00:00 2001 From: Dan Walmsley Date: Thu, 4 Oct 2018 10:39:26 +0100 Subject: [PATCH 11/12] post information --- parameters.cake | 2 ++ 1 file changed, 2 insertions(+) diff --git a/parameters.cake b/parameters.cake index 4c5332741db..cb16cd5360b 100644 --- a/parameters.cake +++ b/parameters.cake @@ -37,6 +37,8 @@ public class Parameters var repoTagName = context.EnvironmentVariable("APPVEYOR_REPO_TAG_NAME"); var pullRequestTitle = context.EnvironmentVariable("SYSTEM_PULLREQUEST_SOURCEBRANCH"); + Information($"RepoName: {repoName}, RepoBranch: {repoBranch}, PR Title: {pullRequestTitle}"); + if (pullRequestTitle == null && string.Compare(repoName, NuGetPushRepoName, StringComparison.OrdinalIgnoreCase) == 0 && string.Compare(repoBranch, NuGetPushBranch, StringComparison.OrdinalIgnoreCase) == 0) From e9310c8d6a715b1788a44fd0b4e427780e85a0af Mon Sep 17 00:00:00 2001 From: Dan Walmsley Date: Thu, 4 Oct 2018 10:46:34 +0100 Subject: [PATCH 12/12] print info --- parameters.cake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parameters.cake b/parameters.cake index cb16cd5360b..191620aa701 100644 --- a/parameters.cake +++ b/parameters.cake @@ -37,7 +37,7 @@ public class Parameters var repoTagName = context.EnvironmentVariable("APPVEYOR_REPO_TAG_NAME"); var pullRequestTitle = context.EnvironmentVariable("SYSTEM_PULLREQUEST_SOURCEBRANCH"); - Information($"RepoName: {repoName}, RepoBranch: {repoBranch}, PR Title: {pullRequestTitle}"); + System.Console.WriteLine($"RepoName: {repoName}, RepoBranch: {repoBranch}, PR Title: {pullRequestTitle}/."); if (pullRequestTitle == null && string.Compare(repoName, NuGetPushRepoName, StringComparison.OrdinalIgnoreCase) == 0