Skip to content

Commit

Permalink
First draft teamcity support
Browse files Browse the repository at this point in the history
  • Loading branch information
csMACnz committed May 23, 2018
1 parent c11eb9f commit 47c186c
Show file tree
Hide file tree
Showing 13 changed files with 179 additions and 17 deletions.
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
using Beefeater;
using csmacnz.Coveralls.Data;
using csmacnz.Coveralls.GitDataResolvers;
using csmacnz.Coveralls.Ports;
Expand Down Expand Up @@ -62,7 +63,8 @@ public void GenerateDataNoEnviromentDataReturnsEmptyGitData()

var gitData = sut.GenerateData();

Assert.NotNull(gitData);
Assert.True(gitData.HasValue);
Assert.True(gitData.IsItem1);
}

public class GenerateData
Expand Down Expand Up @@ -94,7 +96,7 @@ public GenerateData()

var sut = new AppVeyorGitDataResolver(variables);

_gitData = sut.GenerateData();
_gitData = sut.GenerateData().Match(g => g, c => null);
}

[Fact]
Expand Down
2 changes: 1 addition & 1 deletion src/csmacnz.Coveralls.Tests/csmacnz.Coveralls.Tests.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
</PropertyGroup>

<ItemGroup>
<PackageReference Include="Beefeater" Version="0.3.0" />
<PackageReference Include="Beefeater" Version="0.4.0" />
<PackageReference Include="coverlet.msbuild" Version="2.0.0" />
<PackageReference Include="csMACnz.Caps" Version="1.0.7" />
<PackageReference Include="csMACnz.EmbedRes" Version="1.0.8" />
Expand Down
13 changes: 11 additions & 2 deletions src/csmacnz.Coveralls/CoverallsPublisher.cs
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ public class CoverallsPublisher

public Result<Unit, string> Run(
ConfigurationSettings settings,
GitData gitData,
Either<GitData, CommitSha> gitData,
CoverageMetadata metadata)
{
var outputFile = ResolveOutpuFile(settings);
Expand All @@ -50,9 +50,18 @@ public class CoverallsPublisher
PullRequestId = metadata.PullRequestId,
SourceFiles = files.Value.ToArray(),
Parallel = metadata.Parallel,
Git = gitData
};

gitData.Match(
git =>
{
data.Git = git;
},
sha =>
{
data.CommitSha = sha.Value;
});

var fileData = JsonConvert.SerializeObject(data);
if (!string.IsNullOrWhiteSpace(outputFile))
{
Expand Down
14 changes: 14 additions & 0 deletions src/csmacnz.Coveralls/Data/CommitSha.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
namespace csmacnz.Coveralls.Data
{
public class CommitSha
{
private readonly string _value;

public CommitSha(string value)
{
_value = value;
}

public string Value => _value;
}
}
3 changes: 3 additions & 0 deletions src/csmacnz.Coveralls/Data/CoverallData.cs
Original file line number Diff line number Diff line change
Expand Up @@ -27,5 +27,8 @@ public sealed class CoverallData

[JsonProperty("git", DefaultValueHandling = DefaultValueHandling.Ignore)]
public GitData Git { get; set; }

[JsonProperty("commit_sha", DefaultValueHandling = DefaultValueHandling.Ignore)]
public string CommitSha { get; set; }
}
}
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
using Beefeater;
using csmacnz.Coveralls.Data;
using csmacnz.Coveralls.Ports;

Expand All @@ -19,7 +20,7 @@ public bool CanProvideData()
return _variables.GetBooleanVariable("APPVEYOR");
}

public GitData GenerateData()
public Either<GitData, CommitSha> GenerateData()
{
var generateData = new GitData
{
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using BCLExtensions;
using Beefeater;
using csmacnz.Coveralls.Data;

namespace csmacnz.Coveralls.GitDataResolvers
Expand All @@ -20,7 +21,7 @@ public bool CanProvideData()
return commitId.IsNotNullOrWhitespace();
}

public GitData GenerateData()
public Either<GitData, CommitSha> GenerateData()
{
GitData gitData = null;
var commitId = _args.OptCommitid;
Expand Down
7 changes: 4 additions & 3 deletions src/csmacnz.Coveralls/GitDataResolvers/IGitDataResolver.cs
Original file line number Diff line number Diff line change
@@ -1,13 +1,14 @@
using csmacnz.Coveralls.Data;
using Beefeater;
using csmacnz.Coveralls.Data;

namespace csmacnz.Coveralls.GitDataResolvers
{
public interface IGitDataResolver
{
bool CanProvideData();

GitData GenerateData();
Either<GitData, CommitSha> GenerateData();

string DisplayName { get; }
}
}
}
64 changes: 64 additions & 0 deletions src/csmacnz.Coveralls/GitDataResolvers/TeamCityGitDataResolver.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
using BCLExtensions;
using Beefeater;
using csmacnz.Coveralls.Data;
using csmacnz.Coveralls.Ports;

namespace csmacnz.Coveralls.GitDataResolvers
{
public class TeamCityGitDataResolver : IGitDataResolver
{
private readonly IEnvironmentVariables _variables;
private readonly IConsole _console;

public TeamCityGitDataResolver(IEnvironmentVariables variables, IConsole console)
{
_variables = variables;
_console = console;
}

public string DisplayName => "Teamcity Environment Variables";

public bool CanProvideData()
{
return _variables.GetBooleanVariable("TEAMCITY_VERSION");
}

public Either<GitData, CommitSha> GenerateData()
{
var customVariablesSha = _variables.GetEnvironmentVariable("TEAMCITY_BUILD_COMMIT");

if (customVariablesSha.IsNotNullOrWhitespace())
{
var generateData = new GitData
{
Head = new GitHead
{
Id = customVariablesSha,
},
Branch = _variables.GetEnvironmentVariable("TEAMCITY_BUILD_BRANCH") ?? string.Empty
};

return generateData;
}
else
{
_console.WriteLine("Teamcity does not automatically make build parameters available as environment variables.");
_console.WriteLine("Add the following environment parameters to the build configuration");
_console.WriteLine("env.TEAMCITY_BUILD_BRANCH = %teamcity.build.vcs.branch.<YOUR TEAMCITY VCS NAME>%");
_console.WriteLine("env.TEAMCITY_BUILD_COMMIT = %build.vcs.number%");
_console.WriteLine("env.TEAMCITY_BUILD_NUMBER = %build.counter%");
_console.WriteLine("env.TEAMCITY_PULL_REQUEST = %teamcity.build.branch%");
var noCustomVariablesSha = _variables.GetEnvironmentVariable("BUILD_VCS_NUMBER");
if (noCustomVariablesSha.IsNotNullOrWhitespace())
{
_console.WriteLine("Using env.BUILD_VCS_NUMBER to submit commit sha only");
return new CommitSha(noCustomVariablesSha);
}
else
{
return Either<GitData, CommitSha>.OfResult1(null);
}
}
}
}
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using csmacnz.Coveralls.Data;
using Beefeater;
using csmacnz.Coveralls.Data;
using csmacnz.Coveralls.Ports;

namespace csmacnz.Coveralls.GitDataResolvers
Expand All @@ -19,7 +20,7 @@ public bool CanProvideData()
return _variables.GetBooleanVariable("TRAVIS");
}

public GitData GenerateData()
public Either<GitData, CommitSha> GenerateData()
{
var generateData = new GitData
{
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
using BCLExtensions;
using Beefeater;
using csmacnz.Coveralls.Ports;

namespace csmacnz.Coveralls.MetaDataResolvers
{
public class TeamCityMetaDataResolver : IMetaDataResolver
{
private readonly IEnvironmentVariables _variables;

public TeamCityMetaDataResolver(IEnvironmentVariables variables)
{
_variables = variables;
}

public bool IsActive()
{
return _variables.GetBooleanVariable("TEAMCITY_VERSION");
}

public Option<string> ResolveServiceName()
{
return "teamcity";
}

public Option<string> ResolveServiceJobId()
{
return Option<string>.None;
}

public Option<string> ResolveServiceBuildNumber()
{
// %build.counter%
return GetFromVariable("TEAMCITY_BUILD_NUMBER");
}

public Option<string> ResolvePullRequestId()
{
var value = GetFromVariable("TEAMCITY_PULL_REQUEST");

// TODO: regex for `refs/pull/86/merge` && `refs/pull/86/head`
return value.Match(
val => bool.TryParse(val?.Trim(), out bool _) ? val : Option<string>.None,
() => Option<string>.None);
}

private Option<string> GetFromVariable(string variableName)
{
var prId = _variables.GetEnvironmentVariable(variableName);

if (prId.IsNotNullOrWhitespace())
{
return prId;
}

return Option<string>.None;
}
}
}
15 changes: 11 additions & 4 deletions src/csmacnz.Coveralls/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -104,7 +104,7 @@ private static NotNull<string> GetDisplayVersion()
}
}

private Option<GitData> ResolveGitData(IConsole console, MainArgs args)
private Option<Either<GitData, CommitSha>> ResolveGitData(IConsole console, MainArgs args)
{
var providers = new List<IGitDataResolver>
{
Expand All @@ -116,11 +116,18 @@ private Option<GitData> ResolveGitData(IConsole console, MainArgs args)
if (provider is null)
{
console.WriteLine("No git data available");
return Option<GitData>.None;
}
else
{
console.WriteLine($"Using Git Data Provider '{provider.DisplayName}'");
var data = provider.GenerateData();
if (data.HasValue)
{
return data;
}
}

console.WriteLine($"Using Git Data Provider '{provider.DisplayName}'");
return provider.GenerateData();
return Option<Either<GitData, CommitSha>>.None;
}

private ConfigurationSettings LoadSettings(MainArgs args)
Expand Down
2 changes: 1 addition & 1 deletion src/csmacnz.Coveralls/csmacnz.Coveralls.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@

<ItemGroup>
<PackageReference Include="BCLExtensions" Version="1.2.0" />
<PackageReference Include="Beefeater" Version="0.3.0" />
<PackageReference Include="Beefeater" Version="0.4.0" />
<PackageReference Include="docopt.net" Version="0.6.1.9" />
<PackageReference Include="System.Collections.NonGeneric" Version="4.3.0" />
<PackageReference Include="JetBrains.Annotations" Version="11.1.0" />
Expand Down

0 comments on commit 47c186c

Please sign in to comment.