Skip to content

Commit

Permalink
- Added GitVersion support
Browse files Browse the repository at this point in the history
- Added solutioninfo.cs file
- Cleaned up build script
- Automated release process
- Set shallow clone to false for appveyor inorder to gitversion to work.
  • Loading branch information
larzw committed Jan 1, 2017
1 parent d4ea9cf commit b14d8ca
Show file tree
Hide file tree
Showing 26 changed files with 226 additions and 183 deletions.
15 changes: 0 additions & 15 deletions .github/ISSUE_TEMPLATE.md

This file was deleted.

7 changes: 4 additions & 3 deletions .travis.yml
Original file line number Diff line number Diff line change
@@ -1,16 +1,17 @@
language: csharp
sudo: false

git:
depth: 1000000

os:
- linux
- osx

branches:
only:
- master
- develop
- /^testing.*/
- /^travis.*/

script:
- ./build.sh
- ./build.sh --target TravisCI --configuration Debug
13 changes: 4 additions & 9 deletions Source/Cake.Paket.Addin/paket.template
Original file line number Diff line number Diff line change
Expand Up @@ -9,14 +9,9 @@ licenseUrl https://github.com/larzw/Cake.Paket/blob/master/LICENSE
projectUrl https://github.com/larzw/Cake.Paket
iconUrl https://raw.githubusercontent.com/larzw/Cake.Paket/master/docs/images/CakePaketLogo.png
requireLicenseAcceptance false
releaseNotes
* Using DocFX instead of read the docs for documentation.
* Cleaned up dependencies.
* Added Maintainer documentation.
* Using SolutionInfo.cs file now.
copyright Copyright (c) 2016 Larz White
copyright Copyright (c) 2017 Larz White
tags Cake Script Build paket
files
bin/Release/Cake.Paket.Addin.dll ==> lib/net45
bin/Release/Cake.Paket.Addin.xml ==> lib/net45
bin/Release/Cake.Paket.Addin.pdb ==> lib/net45
bin/*/Cake.Paket.Addin.dll ==> lib/net45
bin/*/Cake.Paket.Addin.xml ==> lib/net45
bin/*/Cake.Paket.Addin.pdb ==> lib/net45
13 changes: 4 additions & 9 deletions Source/Cake.Paket.Module/paket.template
Original file line number Diff line number Diff line change
Expand Up @@ -9,14 +9,9 @@ licenseUrl https://github.com/larzw/Cake.Paket/blob/master/LICENSE
projectUrl https://github.com/larzw/Cake.Paket
iconUrl https://raw.githubusercontent.com/larzw/Cake.Paket/master/docs/images/CakePaketLogo.png
requireLicenseAcceptance false
releaseNotes
* Using DocFX instead of read the docs for documentation.
* Cleaned up dependencies.
* Added Maintainer documentation.
* Using SolutionInfo.cs file now.
copyright Copyright (c) 2016 Larz White
copyright Copyright (c) 2017 Larz White
tags Cake Script Build paket
files
bin/Release/Cake.Paket.Module.dll ==> lib/net45
bin/Release/Cake.Paket.Module.xml ==> lib/net45
bin/Release/Cake.Paket.Module.pdb ==> lib/net45
bin/*/Cake.Paket.Module.dll ==> lib/net45
bin/*/Cake.Paket.Module.xml ==> lib/net45
bin/*/Cake.Paket.Module.pdb ==> lib/net45
14 changes: 10 additions & 4 deletions Source/SolutionInfo.cs
Original file line number Diff line number Diff line change
@@ -1,8 +1,14 @@
using System.Reflection;
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by Cake.
// </auto-generated>
//------------------------------------------------------------------------------
using System.Reflection;
using System.Runtime.InteropServices;

[assembly: AssemblyProduct("Cake.Paket")]
[assembly: AssemblyVersion("1.0.0")]
[assembly: AssemblyFileVersion("1.0.0")]
[assembly: AssemblyCopyright("Copyright (c) 2016 Larz White")]
[assembly: AssemblyVersion("1.1.0.0")]
[assembly: AssemblyFileVersion("1.1.0.0")]
[assembly: AssemblyCopyright("Copyright (c) 2017 Larz White")]
[assembly: ComVisible(false)]

11 changes: 2 additions & 9 deletions appveyor.yml
Original file line number Diff line number Diff line change
@@ -1,13 +1,12 @@
image: Visual Studio 2015
version: '{build}'

environment:
COVERALLS_REPO_TOKEN:
secure: 6MvLG18tMc0654Hpv1jt00lP2xwaCmjQQ0b0xbW//EjbjKF8Su+XxCuds/GqSrTU
MYGET_API_TOKEN:
secure: AkVuHBLFZISuM+BYCrFiUEroGNmUViLXBoty1WD5+UbD+oo3/n0W6ojRshtLY3sD

shallow_clone: true
shallow_clone: false

build: off
test: off
Expand All @@ -16,13 +15,7 @@ deploy: off
branches:
only:
- master
- develop
- /^testing.*/
- /^appveyor.*/

build_script:
- ps: .\build.ps1

artifacts:
- path: .\Reports
- path: .\NuGet
- ps: .\build.ps1 -Target AppVeyor -Configuration Debug
177 changes: 119 additions & 58 deletions build.cake
Original file line number Diff line number Diff line change
@@ -1,75 +1,107 @@
/*
For local builds
$ .\build.ps1 -Configuration Debug
To Create a release
Create the BODY of the release notes (say releasenotes.md). Note, don't put this in the repository.
$ git checkout -b release-1.0.0
$ .\build.ps1 -Target Pre-Release -Configuration Release -ScriptArgs "-releaseNotes='C:\Users\larz\Desktop\releasenotes.md'"
$ git add .
$ git commit -m '[skip ci] Release setup.'
$ git push origin head
* Merge into master
$ git checkout master
$ git tag -s -a 'v1.0.0' -m 'versoin 1.0.0' (enter passphrase)
$ git push origin v1.0.0
$ .\build.ps1 -Target Release-On-Github -ScriptArgs "-releaseNotes='C:\Users\larz\Desktop\releasenotes.md' -gitHubUserName='username' -gitHubPassword='password'"
$ .\build.ps1 -Target Paket-Push -ScriptArgs "-nuGetUrl='https://www.nuget.org/api/v2/package' -nuGetApiKey='00000000-0000-0000-0000-000000000000'"
*/

// Tools
#tool paket:?package=xunit.runner.console
#tool paket:?package=OpenCover
#tool paket:?package=coveralls.net
#tool paket:?package=JetBrains.ReSharper.CommandLineTools
#tool paket:?package=ReSharperReports
#tool "paket:?package=docfx.console"
#tool paket:?package=docfx.console
#tool paket:?package=GitVersion.CommandLine
#tool paket:?package=gitreleasemanager

// Addins
#addin paket:?package=Cake.ReSharperReports
#addin paket:?package=Cake.Figlet
#addin paket:?package=Cake.Coveralls
#addin paket:?package=Cake.Paket
#addin "paket:?package=Cake.DocFx"
#addin paket:?package=Cake.DocFx
#addin paket:?package=Cake.FileHelpers

// Cake script arguments
// .\build.ps1 -Target Default -Configuration Debug -ScriptArgs "-buildVersion='1.0.0' -nuGetUrl='https://www.myget.org/F/mathphysics/api/v2/package' -nuGetApiKey='00000000-0000-0000-0000-000000000000'"
// Arguments
var target = Argument("target", "Default");
var configuration = Argument("configuration", "Release");
var buildVersion = Argument("buildVersion", "1.1.0");
var nuGetUrl = Argument("nuGetUrl","https://www.myget.org/F/mathphysics/api/v2/package");
var nuGetApiKey = Argument("nuGetApiKey", string.Empty);
var releaseNotes = Argument("releaseNotes", string.Empty);
var gitHubUserName = Argument("gitHubUserName", string.Empty);
var gitHubRepoOwner = Argument("gitHubRepoOwner", gitHubUserName);
var gitHubPassword = Argument("gitHubPassword", string.Empty);

// Solution and projects
var source = "./Source";
var cakePaket = source + "/Cake.Paket.sln";
var cakePaketAddin = source + "/Cake.Paket.Addin/bin/" + configuration;
var cakePaketModule = source + "/Cake.Paket.Module/bin/" + configuration;
var cakePaketUnitTests = source + "/Cake.Paket.UnitTests/bin/" + configuration + "/*.UnitTests.dll";
var solutionInfo = source + "/SolutionInfo.cs";
var cakePaket = string.Format("{0}/Cake.Paket.sln", source);
var cakePaketAddin = string.Format("{0}/Cake.Paket.Addin/bin/{1}", source, configuration);
var cakePaketModule = string.Format("{0}/Cake.Paket.Module/bin/{1}", source, configuration);
var cakePaketUnitTests = string.Format("{0}/Cake.Paket.UnitTests/bin/{1}/*.UnitTests.dll", source, configuration);
var solutionInfo = string.Format("{0}/SolutionInfo.cs", source);

// Reports and Coding standards.
var reports = "./Reports";
var coverage = reports + "/coverage.xml";
var resharperSettings = source + "/Cake.Paket.sln.DotSettings";
var inspectCodeXml = reports + "/inspectCode.xml";
var inspectCodeHtml = reports + "/inspectCode.html";
var dupFinderXml = reports + "/dupFinder.xml";
var dupFinderHtml = reports + "/dupFinder.html";

// NuGet
var nuGet = "./NuGet";
var coverage = string.Format("{0}/coverage.xml", reports);
var resharperSettings = string.Format("{0}/Cake.Paket.sln.DotSettings", source);
var inspectCodeXml = string.Format("{0}/inspectCode.xml", reports);
var inspectCodeHtml = string.Format("{0}/inspectCode.html", reports);
var dupFinderXml = string.Format("{0}/dupFinder.xml", reports);
var dupFinderHtml = string.Format("{0}/dupFinder.html", reports);

// Docs
var docs = "./docs";
var docfx = docs + "/docfx.json";
var api = docs + "/api";
var site = docs + "/site";
var docfx = string.Format("{0}/docfx.json", docs);
var api = string.Format("{0}/api", docs);
var site = string.Format("{0}/site", docs);
var docCache = "/obj/xdoc";
var cakeNuGetDocCache = source + "/Cake.NuGet/" + docCache;
var cakePaketAddinDocCache = source + "/Cake.Paket.Addin/" + docCache;
var cakePaketModuleDocCache = source + "/Cake.Paket.Module/" + docCache;
var cakeNuGetDocCache = string.Format("{0}/Cake.NuGet/{1}", source, docCache);
var cakePaketAddinDocCache = string.Format("{0}/Cake.Paket.Addin/{1}", source, docCache);
var cakePaketModuleDocCache = string.Format("{0}/Cake.Paket.Module/{1}", source, docCache);

// NuGet
var nuGet = "./NuGet";
var paketTemplate = string.Format("{0}/**/paket.template", source);

// Copyright
var copyright = string.Format("Copyright (c) {0} Larz White", DateTime.Now.Year);

// Version
var version = GitVersion();
Setup(context =>
{
Information(Figlet("Cake.Paket"));
Information("\t\tMIT License");
Information(string.Format("\tCopyright (c) {0} Larz White", DateTime.Now.Year));
Information(string.Format("\t{0}\n", copyright));
CleanDirectories(reports);
EnsureDirectoryExists(reports);
});

Teardown(context =>
{
DeleteFiles(reports + "/*.xml");
DeleteFiles(string.Format("{0}/*.xml", reports));
});

Task("Clean").Does(() =>
Task("Build").Does(() =>
{
CleanDirectories(new[] {cakePaketAddin, cakePaketModule, reports, nuGet});
});
CleanDirectories(new[] {cakePaketAddin, cakePaketModule});
Task("Build").IsDependentOn("Clean").Does(() =>
{
if(IsRunningOnWindows())
{
MSBuild(cakePaket, settings => settings.SetConfiguration(configuration));
Expand All @@ -82,24 +114,28 @@ Task("Build").IsDependentOn("Clean").Does(() =>

Task("Run-Unit-Tests").IsDependentOn("Build").Does(() =>
{
EnsureDirectoryExists(reports);
if(HasEnvironmentVariable("COVERALLS_REPO_TOKEN") && IsRunningOnWindows())
if(IsRunningOnWindows())
{
OpenCover(tool => tool.XUnit2(cakePaketUnitTests, new XUnit2Settings {ShadowCopy = false}), new FilePath(coverage), new OpenCoverSettings().WithFilter("+[Cake.Paket.Addin]*").WithFilter("+[Cake.Paket.Module]*").WithFilter("-[Cake.Paket.UnitTests]*"));
CoverallsNet(coverage, CoverallsNetReportType.OpenCover, new CoverallsNetSettings{RepoToken = EnvironmentVariable("COVERALLS_REPO_TOKEN")});
}
else
{
XUnit2(cakePaketUnitTests, new XUnit2Settings {ShadowCopy = false});
}
});

Task("Publish-Coverage-Report").IsDependentOn("Run-Unit-Tests").Does(() =>
{
if(HasEnvironmentVariable("COVERALLS_REPO_TOKEN"))
{
CoverallsNet(coverage, CoverallsNetReportType.OpenCover, new CoverallsNetSettings{RepoToken = EnvironmentVariable("COVERALLS_REPO_TOKEN")});
}
});

Task("Run-InspectCode").IsDependentOn("Build").Does(() =>
{
if(IsRunningOnWindows())
{
EnsureDirectoryExists(reports);
InspectCode(cakePaket, new InspectCodeSettings{ SolutionWideAnalysis = true, Profile = resharperSettings, OutputFile = inspectCodeXml });
ReSharperReports(inspectCodeXml, inspectCodeHtml);
}
Expand All @@ -109,44 +145,60 @@ Task("Run-DupFinder").IsDependentOn("Build").Does(() =>
{
if(IsRunningOnWindows())
{
EnsureDirectoryExists(reports);
DupFinder(cakePaket, new DupFinderSettings { ShowStats = true, ShowText = true, OutputFile = dupFinderXml });
ReSharperReports(dupFinderXml, dupFinderHtml);
}
});

Task("Paket-Pack").IsDependentOn("Build").Does(() =>
Task("Update-Paket-Template-Copyright").Does(() =>
{
var copyright2Find = @"Copyright \(c\) \d{4}.*";
ReplaceRegexInFiles(paketTemplate,copyright2Find, copyright);
});

Task("Paket-Pack").IsDependentOn("Build").IsDependentOn("Update-Paket-Template-Copyright").Does(() =>
{
CleanDirectories(nuGet);
EnsureDirectoryExists(nuGet);
if(IsRunningOnWindows())
if(configuration.Equals("Release"))
{
PaketPack(nuGet, new PaketPackSettings { Version = version.MajorMinorPatch, ReleaseNotes = FileReadText(releaseNotes), BuildConfig = configuration });
}
else
{
var buildVersion = string.Format("{0}-build{1}", version.MajorMinorPatch, version.BuildMetaData);
PaketPack(nuGet, new PaketPackSettings { Version = buildVersion, BuildConfig = configuration });
}
});

Task("Paket-Push").Does(() =>
{
if(HasEnvironmentVariable("MYGET_API_TOKEN"))
{
if(HasEnvironmentVariable("APPVEYOR_BUILD_VERSION"))
{
buildVersion = buildVersion + "-build" + EnvironmentVariable("APPVEYOR_BUILD_VERSION");
}
nuGetApiKey = EnvironmentVariable("MYGET_API_TOKEN");
}
Information("package version " + buildVersion);
PaketPack(nuGet, new PaketPackSettings { Version = buildVersion });
if(!string.IsNullOrWhiteSpace(nuGetApiKey))
{
PaketPush(GetFiles(string.Format("{0}/*.nupkg",nuGet)), new PaketPushSettings { Url = nuGetUrl, ApiKey = nuGetApiKey });
}
});

Task("Paket-Push").IsDependentOn("Paket-Pack").Does(() =>
Task("Upload-AppVeyor-Artifacts").Does(() =>
{
if(IsRunningOnWindows())
if(AppVeyor.IsRunningOnAppVeyor)
{
if(HasEnvironmentVariable("MYGET_API_TOKEN"))
{
nuGetApiKey = EnvironmentVariable("MYGET_API_TOKEN");
}
if(!string.IsNullOrWhiteSpace(nuGetApiKey))
{
PaketPush(GetFiles(nuGet + "/*.nupkg"), new PaketPushSettings { Url = nuGetUrl, ApiKey = nuGetApiKey });
}
AppVeyor.UploadArtifact(inspectCodeHtml);
AppVeyor.UploadArtifact(dupFinderHtml);
}
});

Task("Update-SolutionInfo").Does(() =>
{
CreateAssemblyInfo(solutionInfo, new AssemblyInfoSettings { Product = "Cake.Paket", Version = version.AssemblySemVer, FileVersion = version.AssemblySemVer, Copyright = copyright, ComVisible = false });
});

Task("Generate-Docs").Does(() =>
{
CleanDirectories(new[] {api, cakeNuGetDocCache, cakePaketAddinDocCache, cakePaketModuleDocCache});
Expand All @@ -157,5 +209,14 @@ Task("Generate-Docs").Does(() =>
DocFx(docfx, new DocFxSettings{ ToolPath = "./packages/tools/docfx.console/tools/docfx.exe" });
});

Task("Default").IsDependentOn("Run-Unit-Tests").IsDependentOn("Run-InspectCode").IsDependentOn("Run-DupFinder").IsDependentOn("Paket-Push");
Task("Release-On-Github").Does(() =>
{
GitReleaseManagerCreate(gitHubUserName, gitHubPassword, gitHubRepoOwner,"Cake.Paket", new GitReleaseManagerCreateSettings{Name = string.Format("v{0}", version.MajorMinorPatch), InputFilePath = releaseNotes});
GitReleaseManagerPublish(gitHubUserName, gitHubPassword, gitHubRepoOwner,"Cake.Paket", string.Format("v{0}", version.MajorMinorPatch));
});

Task("TravisCI").IsDependentOn("Run-Unit-Tests");
Task("Default").IsDependentOn("Run-Unit-Tests").IsDependentOn("Run-InspectCode").IsDependentOn("Run-DupFinder").IsDependentOn("Paket-Pack");
Task("AppVeyor").IsDependentOn("Update-SolutionInfo").IsDependentOn("Default").IsDependentOn("Publish-Coverage-Report").IsDependentOn("Paket-Push").IsDependentOn("Upload-AppVeyor-Artifacts");
Task("Pre-Release").IsDependentOn("Update-SolutionInfo").IsDependentOn("Generate-Docs").IsDependentOn("Paket-Pack");
RunTarget(target);
Loading

0 comments on commit b14d8ca

Please sign in to comment.