Skip to content

Commit

Permalink
migrate to new dotnet-format tool in build script (run on local build)
Browse files Browse the repository at this point in the history
  • Loading branch information
shiftkey committed Sep 24, 2019
1 parent 7c31109 commit a687ded
Show file tree
Hide file tree
Showing 4 changed files with 6 additions and 76 deletions.
1 change: 1 addition & 0 deletions build/Context.cs
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ public class Context : FrostingContext

public Project[] Projects { get; set; }

public FilePath DotNetFormatToolPath { get; set; }
public FilePath GitVersionToolPath { get; set; }

public DotNetCoreTestSettings GetTestSettings()
Expand Down
13 changes: 1 addition & 12 deletions build/Lifetime.cs
Original file line number Diff line number Diff line change
Expand Up @@ -56,18 +56,7 @@ public override void Setup(Context context)
new Project { Name = "Octokit.Tests.Integration", Path = "./Octokit.Tests.Integration/Octokit.Tests.Integration.csproj", IntegrationTests = true }
};

// Install tools
if (context.CoreOnly)
{
context.Information("Skipping tool installation for core-only build");
}
else
{
context.Information("Installing tools...");
ToolInstaller.Install(context, "Octokit.CodeFormatter", "1.0.0-preview");
}


context.DotNetFormatToolPath = ToolInstaller.DotNetCoreToolInstall(context, "dotnet-format", "3.1.37601", "dotnet-format");
context.GitVersionToolPath = ToolInstaller.DotNetCoreToolInstall(context, "GitVersion.Tool", "5.0.0", "dotnet-gitversion");

// Calculate semantic version.
Expand Down
1 change: 1 addition & 0 deletions build/Tasks/Build.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
using Cake.Frosting;

[Dependency(typeof(Restore))]
[Dependency(typeof(FormatCode))]
public class Build : FrostingTask<Context>
{
public override void Run(Context context)
Expand Down
67 changes: 3 additions & 64 deletions build/Tasks/FormatCode.cs
Original file line number Diff line number Diff line change
@@ -1,76 +1,15 @@
using System;
using System.IO;
using System.Linq;
using Cake.Common;
using Cake.Common.Diagnostics;
using Cake.Core;
using Cake.Core.IO;
using Cake.Common.Tools.DotNetCore;
using Cake.Frosting;

public sealed class FormatCode : FrostingTask<Context>
{
public override void Run(Context context)
{
var codeFormatterExe = context.FileSystem
.GetDirectory("tools")
.GetFiles("CodeFormatter.exe", SearchScope.Recursive)
.First()
.Path
.MakeAbsolute(context.Environment);

foreach (var project in context.Projects)
{
context.Information("Formatting code of {0}", project.Name);

var tempCsprojFile = CreateTempCsproj(context, project.Name);
context.Information("Generated temporary {0} file to run the formatter", new FilePath(tempCsprojFile).GetFilename());

var exitCode = context.StartProcess(
codeFormatterExe,
$"{tempCsprojFile} /nocopyright /nounicode");

if (exitCode != 0)
{
throw new CakeException($"An error occured while formatting code of {project.Name}");
}
}

context.Information("Successfully formatted code of all the projects");
context.DotNetCoreTool("format");
}

public override bool ShouldRun(Context context)
{
// Core only builds do not download the formatter exe
// Only windows is guaranteed to be able to run exe files in the first place
return context.IsRunningOnWindows() && !context.CoreOnly;
}

private static string CreateTempCsproj(Context context, string projectName)
{
DirectoryPath tempFolder = System.IO.Path.GetTempPath();
var projectCsproj = tempFolder.CombineWithFilePath($"{projectName}.csproj").FullPath;

var files = context.FileSystem
.GetDirectory(projectName)
.GetFiles("*.cs", SearchScope.Recursive)
.Select(x => x.Path.MakeAbsolute(context.Environment))
.ToArray();

var compileElements = files
.Select(x => $"<Compile Include=\"{x}\" />")
.ToArray();

var csprojContent =
$@"<?xml version=""1.0"" encoding=""utf-8""?>
<Project ToolsVersion=""4.0"" DefaultTargets=""Build"" xmlns=""http://schemas.microsoft.com/developer/msbuild/2003"">
<ItemGroup>
{string.Join(Environment.NewLine, compileElements)}
</ItemGroup>
<Import Project=""$(MSBuildToolsPath)\Microsoft.CSharp.targets"" />
</Project>";

File.WriteAllText(projectCsproj, csprojContent);

return projectCsproj;
return context.IsLocalBuild;
}
}

0 comments on commit a687ded

Please sign in to comment.