Files
octokit.net/build/Tasks/FormatCode.cs
Ryan Gribble ac49d2ad09 Migrate dotnetcore to vs2017 tooling (#1567)
* convert to VS2017

* rework cake.frosting build to latest cake vs2017 "template" example

* fix clean task and version suffix

* add arg to DotNetCorePack so it uses the correct version

* fix appveyor

* is there an easier way to test appveyor?

* ok travis, let's do this

* after reading the travis repo, this seems to be the version we want for vs201/csproj tool support

* msbuild complaining about arguments - we can use defaults anyhow so remove $@ from build.sh script

* add workaround for msbuild/travis, as mentioned on aspnet Mvc repo

* cmon travis

* perhaps tee isnt needed afterall

* travis permission denied when trying to install tools in build script... i feel dirty but need to see if sudo will fix it!

* could it be folder permissions of /build ?

* Try 777 for NuGet.exe permissions rather than 644

* remove windows platform restriction on GitVersion call

* Add a wrapper script for GitVersion on non windows

* fix wrapper script name

* add debug

* let's see if we are running the script at all!

* run mono gitversion direclty from travis.yml, for science

* see if we can run bin/sh and prepend an argument to our shell script

* remove echos from wrapper script

* Ensure full git repo include more than 50 commits and all tags are fetched, as GitVersion was failing on TravisCI

* only build netstandard framework on non windows

* revert overriding the target framework when building the solution

* Unix being case-sensitive, adjust app.config file name in csproj files

* set FrameworkPathOverride to point to different folders on macOS and Linux

* Remove NuGet.exe from the repo.

On Windows, it will be installed by the Frosting bootstrapper script.
On Unix/macOS, cake has smarts to look for mono- and Linux-specific executables

* tidy up GitVersion logic into a GitVersionRunner class

* apply workaround for osx dotnet restore "too many open files" errors

* update test project references to latest official versions

* doesnt seem to be a reason for overriding the implicit reference

* remove extra whitespace and unused namespace
2017-03-30 15:37:49 +10:00

75 lines
2.4 KiB
C#

using System;
using System.IO;
using System.Linq;
using Cake.Common;
using Cake.Common.Diagnostics;
using Cake.Core;
using Cake.Core.IO;
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");
}
public override bool ShouldRun(Context context)
{
return context.IsRunningOnWindows();
}
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;
}
}