Browse Source

add cake script to build managed side.

pull/1977/head
Dan Walmsley 7 years ago
parent
commit
f48ade4ed5
  1. 9
      .gitignore
  2. 12
      azure-pipelines.yml
  3. 144
      build.cake
  4. 69
      parameters.cake

9
.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

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

144
build.cake

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

69
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" )
};
}
}
Loading…
Cancel
Save