4 changed files with 230 additions and 4 deletions
@ -0,0 +1,144 @@ |
|||||
|
#load "./parameters.cake" |
||||
|
|
||||
|
Setup<Parameters>(context => |
||||
|
{ |
||||
|
Information("Running tasks..."); |
||||
|
return new Parameters(context); |
||||
|
}); |
||||
|
|
||||
|
Teardown<Parameters>((context, parameters) => |
||||
|
{ |
||||
|
Information("Finished running tasks."); |
||||
|
}); |
||||
|
|
||||
|
Task("Clean") |
||||
|
.Does<Parameters>(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>(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>(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>(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>(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<Parameters>((context, parameters) => parameters.PushNuGet) |
||||
|
.Does<Parameters>(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")); |
||||
@ -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" ) |
||||
|
}; |
||||
|
} |
||||
|
} |
||||
Loading…
Reference in new issue