Skip to content

Commit

Permalink
Merge pull request #19 from AvaloniaUI/pipelines
Browse files Browse the repository at this point in the history
Pipelines
  • Loading branch information
danwalmsley committed Oct 4, 2018
2 parents 8aae66f + e9310c8 commit dafd24d
Show file tree
Hide file tree
Showing 4 changed files with 242 additions and 5 deletions.
9 changes: 5 additions & 4 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
[Bb]in/
packages/
TestResults/
artifacts/

# globs
Makefile.in
Expand Down Expand Up @@ -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
16 changes: 15 additions & 1 deletion azure-pipelines.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,25 @@ 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
- task: DotNetCoreInstaller@0
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
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" -Platform="Any CPU" -Configuration="Release"
148 changes: 148 additions & 0 deletions build.cake
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"));
74 changes: 74 additions & 0 deletions parameters.cake
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" )
};
}
}

0 comments on commit dafd24d

Please sign in to comment.