Skip to content

Commit

Permalink
Added tools
Browse files Browse the repository at this point in the history
  • Loading branch information
FlorianRappl committed May 18, 2019
1 parent 246f382 commit 3fdf871
Show file tree
Hide file tree
Showing 2 changed files with 211 additions and 0 deletions.
205 changes: 205 additions & 0 deletions tools/anglesharp.cake
@@ -0,0 +1,205 @@
#addin "Cake.FileHelpers"
#addin "Octokit"
using Octokit;

var configuration = Argument("configuration", "Release");
var isRunningOnUnix = IsRunningOnUnix();
var isRunningOnWindows = IsRunningOnWindows();
var isRunningOnAppVeyor = AppVeyor.IsRunningOnAppVeyor;
var isPullRequest = AppVeyor.Environment.PullRequest.IsPullRequest;
var buildNumber = AppVeyor.Environment.Build.Number;
var releaseNotes = ParseReleaseNotes("./CHANGELOG.md");
var version = releaseNotes.Version.ToString();
var buildDir = Directory($"./src/{projectName}/bin") + Directory(configuration);
var buildResultDir = Directory("./bin") + Directory(version);
var nugetRoot = buildResultDir + Directory("nuget");

if (target == "PrePublish")
{
version = $"{version}-alpha-{buildNumber}";
}

if (!isRunningOnWindows)
{
frameworks.Remove("net46");
}

// Initialization
// ----------------------------------------

Setup(_ =>
{
Information($"Building version {version} of {projectName}.");
Information("For the publish target the following environment variables need to be set:");
Information("- NUGET_API_KEY");
Information("- GITHUB_API_TOKEN");
});

// Tasks
// ----------------------------------------

Task("Clean")
.Does(() =>
{
CleanDirectories(new DirectoryPath[] { buildDir, buildResultDir, nugetRoot });
});

Task("Restore-Packages")
.IsDependentOn("Clean")
.Does(() =>
{
NuGetRestore($"./src/{solutionName}.sln", new NuGetRestoreSettings
{
ToolPath = "tools/nuget.exe",
});
});

Task("Build")
.IsDependentOn("Restore-Packages")
.Does(() =>
{
ReplaceRegexInFiles("./src/Directory.Build.props", "(?<=<Version>)(.+?)(?=</Version>)", version);
DotNetCoreBuild($"./src/{solutionName}.sln", new DotNetCoreBuildSettings
{
Configuration = configuration,
});
});

Task("Run-Unit-Tests")
.IsDependentOn("Build")
.Does(() =>
{
var settings = new DotNetCoreTestSettings
{
Configuration = configuration,
};
if (isRunningOnAppVeyor)
{
settings.TestAdapterPath = Directory(".");
settings.Logger = "Appveyor";
// TODO Finds a way to exclude tests not allowed to run on appveyor
// Not used in current code
//settings.Where = "cat != ExcludeFromAppVeyor";
}
DotNetCoreTest($"./src/{solutionName}.Tests/", settings);
});

Task("Copy-Files")
.IsDependentOn("Build")
.Does(() =>
{
foreach (var item in frameworks)
{
var targetDir = nugetRoot + Directory("lib") + Directory(item.Key);
CreateDirectory(targetDir);
CopyFiles(new FilePath[]
{
buildDir + Directory(item.Value) + File($"{projectName}.dll"),
buildDir + Directory(item.Value) + File($"{projectName}.xml"),
}, targetDir);
}
CopyFiles(new FilePath[] { $"src/{projectName}.nuspec" }, nugetRoot);
});

Task("Create-Package")
.IsDependentOn("Copy-Files")
.Does(() =>
{
var nugetExe = GetFiles("./tools/**/nuget.exe").FirstOrDefault()
?? (isRunningOnAppVeyor ? GetFiles("C:\\Tools\\NuGet3\\nuget.exe").FirstOrDefault() : null)
?? throw new InvalidOperationException("Could not find nuget.exe.");
var nuspec = nugetRoot + File($"{projectName}.nuspec");
NuGetPack(nuspec, new NuGetPackSettings
{
Version = version,
OutputDirectory = nugetRoot,
Symbols = false,
Properties = new Dictionary<String, String>
{
{ "Configuration", configuration },
},
});
});

Task("Publish-Package")
.IsDependentOn("Create-Package")
.IsDependentOn("Run-Unit-Tests")
.Does(() =>
{
var apiKey = EnvironmentVariable("NUGET_API_KEY");
if (String.IsNullOrEmpty(apiKey))
{
throw new InvalidOperationException("Could not resolve the NuGet API key.");
}
foreach (var nupkg in GetFiles(nugetRoot.Path.FullPath + "/*.nupkg"))
{
NuGetPush(nupkg, new NuGetPushSettings
{
Source = "https://nuget.org/api/v2/package",
ApiKey = apiKey,
});
}
});

Task("Publish-Release")
.IsDependentOn("Publish-Package")
.IsDependentOn("Run-Unit-Tests")
.Does(() =>
{
var githubToken = EnvironmentVariable("GITHUB_API_TOKEN");
if (String.IsNullOrEmpty(githubToken))
{
throw new InvalidOperationException("Could not resolve GitHub token.");
}
var github = new GitHubClient(new ProductHeaderValue("AngleSharpCakeBuild"))
{
Credentials = new Credentials(githubToken),
};
var newRelease = github.Repository.Release;
newRelease.Create("AngleSharp", projectName, new NewRelease("v" + version)
{
Name = version,
Body = String.Join(Environment.NewLine, releaseNotes.Notes),
Prerelease = false,
TargetCommitish = "master",
}).Wait();
});

Task("Update-AppVeyor-Build-Number")
.WithCriteria(() => isRunningOnAppVeyor)
.Does(() =>
{
var num = AppVeyor.Environment.Build.Number;
AppVeyor.UpdateBuildVersion($"{version}-{num}");
});

// Targets
// ----------------------------------------

Task("Package")
.IsDependentOn("Run-Unit-Tests")
.IsDependentOn("Create-Package");

Task("Default")
.IsDependentOn("Package");

Task("Publish")
.IsDependentOn("Publish-Package")
.IsDependentOn("Publish-Release");

Task("PrePublish")
.IsDependentOn("Publish-Package");

Task("AppVeyor")
.IsDependentOn("Run-Unit-Tests")
.IsDependentOn("Update-AppVeyor-Build-Number");
6 changes: 6 additions & 0 deletions tools/packages.config
@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Cake" version="0.30.0" />
<package id="NUnit.ConsoleRunner" version="3.9.0" />
<package id="Octokit" version="0.17.0" />
</packages>

0 comments on commit 3fdf871

Please sign in to comment.