Skip to content

Commit

Permalink
add travis environment support
Browse files Browse the repository at this point in the history
  • Loading branch information
csMACnz committed May 21, 2018
1 parent ae38eda commit ad04d8b
Show file tree
Hide file tree
Showing 7 changed files with 255 additions and 64 deletions.
86 changes: 23 additions & 63 deletions src/csmacnz.Coveralls/CoverageMetadataResolver.cs
Original file line number Diff line number Diff line change
@@ -1,17 +1,23 @@
using BCLExtensions;
using System;
using System.Collections.Generic;
using System.Linq;
using BCLExtensions;
using Beefeater;
using csmacnz.Coveralls.Adapters;
using csmacnz.Coveralls.MetaDataResolvers;
using csmacnz.Coveralls.Ports;

namespace csmacnz.Coveralls
{
public static class CoverageMetadataResolver
{
public static CoverageMetadata Resolve(MainArgs args)
public static CoverageMetadata Resolve(MainArgs args, IEnvironmentVariables variables)
{
var serviceName = ResolveServiceName(args);
var serviceJobId = ResolveServiceJobId(args);
var serviceNumber = ResolveServiceNumber(args);
var pullRequestId = ResolvePullRequestId(args);
var resolvers = CreateResolvers(args, variables);
var serviceName = Resolve(resolvers, r => r.ResolveServiceName());
var serviceJobId = Resolve(resolvers, r => r.ResolveServiceJobId());
var serviceNumber = Resolve(resolvers, r => r.ResolveServiceNumber());
var pullRequestId = Resolve(resolvers, r => r.ResolvePullRequestId());
var parallel = args.OptParallel;

return new CoverageMetadata
Expand All @@ -24,68 +30,22 @@ public static CoverageMetadata Resolve(MainArgs args)
};
}

private static Option<string> ResolveServiceName(MainArgs args)
private static List<IMetaDataResolver> CreateResolvers(MainArgs args, IEnvironmentVariables variables)
{
if (args.IsProvided("--serviceName"))
return new List<IMetaDataResolver>
{
return args.OptServicename;
}

var isAppVeyor = new EnvironmentVariables().GetEnvironmentVariable("APPVEYOR");
if (isAppVeyor == "True")
{
return "appveyor";
}

return null;
}

private static Option<string> ResolveServiceJobId(MainArgs args)
{
if (args.IsProvided("--jobId"))
{
return args.OptJobid;
}

var jobId = new EnvironmentVariables().GetEnvironmentVariable("APPVEYOR_JOB_ID");
if (jobId.IsNotNullOrWhitespace())
{
return jobId;
}

return null;
}

private static Option<string> ResolveServiceNumber(MainArgs args)
{
if (args.IsProvided("--serviceNumber"))
{
return args.OptServicenumber;
}

var jobId = new EnvironmentVariables().GetEnvironmentVariable("APPVEYOR_BUILD_NUMBER");
if (jobId.IsNotNullOrWhitespace())
{
return jobId;
}

return null;
new CommandLineMetaDataResolver(args),
new AppVeyorMetaDataResolver(variables),
new TravisMetaDataResolver(variables)
};
}

private static Option<string> ResolvePullRequestId(MainArgs args)
private static Option<string> Resolve(List<IMetaDataResolver> resolvers, Func<IMetaDataResolver, Option<string>> resolve)
{
if (args.IsProvided("--pullRequest"))
{
return args.OptPullrequest;
}

var prId = new EnvironmentVariables().GetEnvironmentVariable("APPVEYOR_PULL_REQUEST_NUMBER");
if (prId.IsNotNullOrWhitespace())
{
return prId;
}

return null;
return resolvers
.Where(r => r.IsActive())
.Select(r => resolve?.Invoke(r) ?? Option<string>.None)
.FirstOrDefault(v => v.HasValue);
}
}
}
42 changes: 42 additions & 0 deletions src/csmacnz.Coveralls/GitDataResolvers/TravisGitDataResolver.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
using csmacnz.Coveralls.Data;
using csmacnz.Coveralls.Ports;

namespace csmacnz.Coveralls.GitDataResolvers
{
public class TravisGitDataResolver : IGitDataResolver
{
private readonly IEnvironmentVariables _variables;

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

public string DisplayName => "Travis Environment Variables";

public bool CanProvideData()
{
return bool.TryParse(_variables.GetEnvironmentVariable("TRAVIS"), out var result) && result;
}

public GitData GenerateData()
{
var generateData = new GitData
{
Head = new GitHead
{
Id = _variables.GetEnvironmentVariable("TRAVIS_COMMIT") ?? string.Empty,
AuthorName = _variables.GetEnvironmentVariable("REPO_COMMIT_AUTHOR") ?? string.Empty,
AuthorEmail = _variables.GetEnvironmentVariable("REPO_COMMIT_AUTHOR_EMAIL") ?? string.Empty,
CommitterName = _variables.GetEnvironmentVariable("REPO_COMMIT_AUTHOR") ?? string.Empty,
ComitterEmail =
_variables.GetEnvironmentVariable("REPO_COMMIT_AUTHOR_EMAIL") ?? string.Empty,
Message = _variables.GetEnvironmentVariable("REPO_COMMIT_MESSAGE") ?? string.Empty
},
Branch = _variables.GetEnvironmentVariable("TRAVIS_BRANCH") ?? string.Empty
};

return generateData;
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
using BCLExtensions;
using Beefeater;
using csmacnz.Coveralls.Data;
using csmacnz.Coveralls.Ports;

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

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

public bool IsActive()
{
return bool.TryParse(_variables.GetEnvironmentVariable("APPVEYOR"), out var result) && result;
}

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

public Option<string> ResolveServiceJobId()
{
return GetFromVariable("APPVEYOR_JOB_ID");
}

public Option<string> ResolveServiceNumber()
{
return GetFromVariable("APPVEYOR_BUILD_NUMBER");
}

public Option<string> ResolvePullRequestId()
{
return GetFromVariable("APPVEYOR_PULL_REQUEST_NUMBER");
}

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

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

return Option<string>.None;
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
using BCLExtensions;
using Beefeater;
using csmacnz.Coveralls.Data;

namespace csmacnz.Coveralls.MetaDataResolvers
{
public class CommandLineMetaDataResolver : IMetaDataResolver
{
private readonly MainArgs _args;

public CommandLineMetaDataResolver(MainArgs args)
{
_args = args;
}

public bool IsActive()
{
return true;
}

public Option<string> ResolveServiceName()
{
if (_args.IsProvided("--serviceName"))
{
return _args.OptServicename ?? string.Empty;
}

return Option<string>.None;
}

public Option<string> ResolveServiceJobId()
{
if (_args.IsProvided("--jobId"))
{
return _args.OptJobid ?? string.Empty;
}

return Option<string>.None;
}

public Option<string> ResolveServiceNumber()
{
if (_args.IsProvided("--serviceNumber"))
{
return _args.OptServicenumber ?? string.Empty;
}

return Option<string>.None;
}

public Option<string> ResolvePullRequestId()
{
if (_args.IsProvided("--pullRequest"))
{
return _args.OptPullrequest ?? string.Empty;
}

return Option<string>.None;
}
}
}
17 changes: 17 additions & 0 deletions src/csmacnz.Coveralls/MetaDataResolvers/IMetaDataResolver.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
using Beefeater;

namespace csmacnz.Coveralls.MetaDataResolvers
{
public interface IMetaDataResolver
{
bool IsActive();

Option<string> ResolveServiceName();

Option<string> ResolveServiceJobId();

Option<string> ResolveServiceNumber();

Option<string> ResolvePullRequestId();
}
}
57 changes: 57 additions & 0 deletions src/csmacnz.Coveralls/MetaDataResolvers/TravisMetaDataResolver.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
using BCLExtensions;
using Beefeater;
using csmacnz.Coveralls.Data;
using csmacnz.Coveralls.Ports;

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

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

public bool IsActive()
{
return bool.TryParse(_variables.GetEnvironmentVariable("TRAVIS"), out var result) && result;
}

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

public Option<string> ResolveServiceJobId()
{
return GetFromVariable("TRAVIS_JOB_ID");
}

public Option<string> ResolveServiceNumber()
{
return GetFromVariable("TRAVIS_BUILD_NUMBER");
}

public Option<string> ResolvePullRequestId()
{
var value = GetFromVariable("TRAVIS_PULL_REQUEST");
return value.Match(
val => val == "false" ? Option<string>.None : val,
() => Option<string>.None);
}

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

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

return Option<string>.None;
}
}
}
2 changes: 1 addition & 1 deletion src/csmacnz.Coveralls/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ private static NotNull<string> GetDisplayVersion()

var settings = LoadSettings(args);

var metadata = CoverageMetadataResolver.Resolve(args);
var metadata = CoverageMetadataResolver.Resolve(args, new EnvironmentVariables());

var app = new CoverallsPublisher(_console, _fileSystem);
var result = app.Run(settings, gitData.ValueOrDefault(), metadata);
Expand Down

0 comments on commit ad04d8b

Please sign in to comment.