-
-
Notifications
You must be signed in to change notification settings - Fork 2.1k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #19 from AvaloniaUI/pipelines
Pipelines
- Loading branch information
Showing
4 changed files
with
242 additions
and
5 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,148 @@ | ||
#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", | ||
EnvironmentVariables = new Dictionary<string, string> | ||
{ | ||
{ "VERSION", parameters.Version } | ||
} | ||
}); | ||
} | ||
}); | ||
|
||
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")); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,74 @@ | ||
|
||
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; } | ||
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("BUILD_BUILDNUMBER"); | ||
VersionSuffix = build != null ? $"-build{build}" : ""; | ||
} | ||
|
||
Version += "-build" + context.EnvironmentVariable("BUILD_BUILDNUMBER").Replace(".",""); | ||
|
||
NuGetPushBranch = "master"; | ||
NuGetPushRepoName = "https://github.com/AvaloniaUI/Avalonia.Native"; | ||
|
||
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("SYSTEM_PULLREQUEST_SOURCEBRANCH"); | ||
|
||
System.Console.WriteLine($"RepoName: {repoName}, RepoBranch: {repoBranch}, PR Title: {pullRequestTitle}/."); | ||
|
||
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" ) | ||
}; | ||
} | ||
} |