From ad04d8bd62d50c72e79176ae349f581881af6fdd Mon Sep 17 00:00:00 2001 From: Mark Clearwater Date: Mon, 21 May 2018 09:59:51 +0100 Subject: [PATCH] add travis environment support --- .../CoverageMetadataResolver.cs | 86 +++++-------------- .../GitDataResolvers/TravisGitDataResolver.cs | 42 +++++++++ .../AppVeyorMetaDataResolver.cs | 54 ++++++++++++ .../CommandLineMetaDataResolver.cs | 61 +++++++++++++ .../MetaDataResolvers/IMetaDataResolver.cs | 17 ++++ .../TravisMetaDataResolver.cs | 57 ++++++++++++ src/csmacnz.Coveralls/Program.cs | 2 +- 7 files changed, 255 insertions(+), 64 deletions(-) create mode 100644 src/csmacnz.Coveralls/GitDataResolvers/TravisGitDataResolver.cs create mode 100644 src/csmacnz.Coveralls/MetaDataResolvers/AppVeyorMetaDataResolver.cs create mode 100644 src/csmacnz.Coveralls/MetaDataResolvers/CommandLineMetaDataResolver.cs create mode 100644 src/csmacnz.Coveralls/MetaDataResolvers/IMetaDataResolver.cs create mode 100644 src/csmacnz.Coveralls/MetaDataResolvers/TravisMetaDataResolver.cs diff --git a/src/csmacnz.Coveralls/CoverageMetadataResolver.cs b/src/csmacnz.Coveralls/CoverageMetadataResolver.cs index cf5eaaf..20721c5 100644 --- a/src/csmacnz.Coveralls/CoverageMetadataResolver.cs +++ b/src/csmacnz.Coveralls/CoverageMetadataResolver.cs @@ -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 @@ -24,68 +30,22 @@ public static CoverageMetadata Resolve(MainArgs args) }; } - private static Option ResolveServiceName(MainArgs args) + private static List CreateResolvers(MainArgs args, IEnvironmentVariables variables) { - if (args.IsProvided("--serviceName")) + return new List { - return args.OptServicename; - } - - var isAppVeyor = new EnvironmentVariables().GetEnvironmentVariable("APPVEYOR"); - if (isAppVeyor == "True") - { - return "appveyor"; - } - - return null; - } - - private static Option 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 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 ResolvePullRequestId(MainArgs args) + private static Option Resolve(List resolvers, Func> 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.None) + .FirstOrDefault(v => v.HasValue); } } } diff --git a/src/csmacnz.Coveralls/GitDataResolvers/TravisGitDataResolver.cs b/src/csmacnz.Coveralls/GitDataResolvers/TravisGitDataResolver.cs new file mode 100644 index 0000000..b4bdaf8 --- /dev/null +++ b/src/csmacnz.Coveralls/GitDataResolvers/TravisGitDataResolver.cs @@ -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; + } + } +} diff --git a/src/csmacnz.Coveralls/MetaDataResolvers/AppVeyorMetaDataResolver.cs b/src/csmacnz.Coveralls/MetaDataResolvers/AppVeyorMetaDataResolver.cs new file mode 100644 index 0000000..a970284 --- /dev/null +++ b/src/csmacnz.Coveralls/MetaDataResolvers/AppVeyorMetaDataResolver.cs @@ -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 ResolveServiceName() + { + return "appveyor"; + } + + public Option ResolveServiceJobId() + { + return GetFromVariable("APPVEYOR_JOB_ID"); + } + + public Option ResolveServiceNumber() + { + return GetFromVariable("APPVEYOR_BUILD_NUMBER"); + } + + public Option ResolvePullRequestId() + { + return GetFromVariable("APPVEYOR_PULL_REQUEST_NUMBER"); + } + + private Option GetFromVariable(string variableName) + { + var prId = _variables.GetEnvironmentVariable(variableName); + + if (prId.IsNotNullOrWhitespace()) + { + return prId; + } + + return Option.None; + } + } +} diff --git a/src/csmacnz.Coveralls/MetaDataResolvers/CommandLineMetaDataResolver.cs b/src/csmacnz.Coveralls/MetaDataResolvers/CommandLineMetaDataResolver.cs new file mode 100644 index 0000000..34e3866 --- /dev/null +++ b/src/csmacnz.Coveralls/MetaDataResolvers/CommandLineMetaDataResolver.cs @@ -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 ResolveServiceName() + { + if (_args.IsProvided("--serviceName")) + { + return _args.OptServicename ?? string.Empty; + } + + return Option.None; + } + + public Option ResolveServiceJobId() + { + if (_args.IsProvided("--jobId")) + { + return _args.OptJobid ?? string.Empty; + } + + return Option.None; + } + + public Option ResolveServiceNumber() + { + if (_args.IsProvided("--serviceNumber")) + { + return _args.OptServicenumber ?? string.Empty; + } + + return Option.None; + } + + public Option ResolvePullRequestId() + { + if (_args.IsProvided("--pullRequest")) + { + return _args.OptPullrequest ?? string.Empty; + } + + return Option.None; + } + } +} diff --git a/src/csmacnz.Coveralls/MetaDataResolvers/IMetaDataResolver.cs b/src/csmacnz.Coveralls/MetaDataResolvers/IMetaDataResolver.cs new file mode 100644 index 0000000..222ad0c --- /dev/null +++ b/src/csmacnz.Coveralls/MetaDataResolvers/IMetaDataResolver.cs @@ -0,0 +1,17 @@ +using Beefeater; + +namespace csmacnz.Coveralls.MetaDataResolvers +{ + public interface IMetaDataResolver + { + bool IsActive(); + + Option ResolveServiceName(); + + Option ResolveServiceJobId(); + + Option ResolveServiceNumber(); + + Option ResolvePullRequestId(); + } +} diff --git a/src/csmacnz.Coveralls/MetaDataResolvers/TravisMetaDataResolver.cs b/src/csmacnz.Coveralls/MetaDataResolvers/TravisMetaDataResolver.cs new file mode 100644 index 0000000..a448afc --- /dev/null +++ b/src/csmacnz.Coveralls/MetaDataResolvers/TravisMetaDataResolver.cs @@ -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 ResolveServiceName() + { + return "travis"; + } + + public Option ResolveServiceJobId() + { + return GetFromVariable("TRAVIS_JOB_ID"); + } + + public Option ResolveServiceNumber() + { + return GetFromVariable("TRAVIS_BUILD_NUMBER"); + } + + public Option ResolvePullRequestId() + { + var value = GetFromVariable("TRAVIS_PULL_REQUEST"); + return value.Match( + val => val == "false" ? Option.None : val, + () => Option.None); + } + + private Option GetFromVariable(string variableName) + { + var prId = _variables.GetEnvironmentVariable(variableName); + + if (prId.IsNotNullOrWhitespace()) + { + return prId; + } + + return Option.None; + } + } +} diff --git a/src/csmacnz.Coveralls/Program.cs b/src/csmacnz.Coveralls/Program.cs index 54d5f9d..53adb2a 100644 --- a/src/csmacnz.Coveralls/Program.cs +++ b/src/csmacnz.Coveralls/Program.cs @@ -58,7 +58,7 @@ private static NotNull 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);