Skip to content

Commit

Permalink
Add build system provider property
Browse files Browse the repository at this point in the history
  • Loading branch information
gitfool committed Jan 8, 2019
1 parent d5bb52c commit 7e76f73
Show file tree
Hide file tree
Showing 8 changed files with 402 additions and 497 deletions.
9 changes: 6 additions & 3 deletions src/Cake.Common.Tests/Fixtures/Build/TFBuildFixture.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@

using Cake.Common.Build.TFBuild;
using Cake.Core;
using Cake.Core.Diagnostics;
using Cake.Core.IO;
using Cake.Testing;
using NSubstitute;
Expand All @@ -26,13 +25,17 @@ public TFBuildFixture()
Log = new FakeLog();
}

public void IsRunningOnTFS()
public void IsRunningOnTFS() => IsRunningOnAzurePipelines();

public void IsRunningOnVSTS() => IsRunningOnAzurePipelinesHosted();

public void IsRunningOnAzurePipelines()
{
Environment.GetEnvironmentVariable("TF_BUILD").Returns("True");
Environment.GetEnvironmentVariable("AGENT_NAME").Returns("On Premises");
}

public void IsRunningOnVSTS()
public void IsRunningOnAzurePipelinesHosted()
{
Environment.GetEnvironmentVariable("TF_BUILD").Returns("True");
Environment.GetEnvironmentVariable("AGENT_NAME").Returns("Hosted Agent");
Expand Down
581 changes: 114 additions & 467 deletions src/Cake.Common.Tests/Unit/Build/BuildSystemTests.cs

Large diffs are not rendered by default.

100 changes: 86 additions & 14 deletions src/Cake.Common.Tests/Unit/Build/TFBuild/TFBuildProviderTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,42 @@ public void Should_Throw_If_Log_Is_Null()
}
}

public sealed class TheIsRunningOnTFSProperty
{
[Fact]
public void Should_Return_True_If_Running_On_TFS()
{
// Given
var fixture = new TFBuildFixture();
fixture.IsRunningOnTFS();
var tfBuild = fixture.CreateTFBuildService();

// When
#pragma warning disable 618
var result = tfBuild.IsRunningOnTFS;
#pragma warning restore 618

// Then
Assert.True(result);
}

[Fact]
public void Should_Return_False_If_Not_Running_On_TFS()
{
// Given
var fixture = new TFBuildFixture();
var tfBuild = fixture.CreateTFBuildService();

// When
#pragma warning disable 618
var result = tfBuild.IsRunningOnTFS;
#pragma warning restore 618

// Then
Assert.False(result);
}
}

public sealed class TheIsRunningOnVSTSProperty
{
[Fact]
Expand All @@ -44,10 +80,12 @@ public void Should_Return_True_If_Running_On_VSTS()
// Given
var fixture = new TFBuildFixture();
fixture.IsRunningOnVSTS();
var vsts = fixture.CreateTFBuildService();
var tfBuild = fixture.CreateTFBuildService();

// When
var result = vsts.IsRunningOnVSTS;
#pragma warning disable 618
var result = tfBuild.IsRunningOnVSTS;
#pragma warning restore 618

// Then
Assert.True(result);
Expand All @@ -58,42 +96,76 @@ public void Should_Return_False_If_Not_Running_On_VSTS()
{
// Given
var fixture = new TFBuildFixture();
var vsts = fixture.CreateTFBuildService();
var tfBuild = fixture.CreateTFBuildService();

// When
var result = vsts.IsRunningOnVSTS;
#pragma warning disable 618
var result = tfBuild.IsRunningOnVSTS;
#pragma warning restore 618

// Then
Assert.False(result);
}
}

public sealed class TheIsRunningOnTFSProperty
public sealed class TheIsRunningOnAzurePipelinesProperty
{
[Fact]
public void Should_Return_True_If_Running_On_TFS()
public void Should_Return_True_If_Running_On_AzurePipelines()
{
// Given
var fixture = new TFBuildFixture();
fixture.IsRunningOnTFS();
var vsts = fixture.CreateTFBuildService();
fixture.IsRunningOnAzurePipelines();
var tfBuild = fixture.CreateTFBuildService();

// When
var result = vsts.IsRunningOnTFS;
var result = tfBuild.IsRunningOnAzurePipelines;

// Then
Assert.True(result);
}

[Fact]
public void Should_Return_False_If_Not_Running_On_TFS()
public void Should_Return_False_If_Not_Running_On_AzurePipelines()
{
// Given
var fixture = new TFBuildFixture();
var tfBuild = fixture.CreateTFBuildService();

// When
var result = tfBuild.IsRunningOnAzurePipelines;

// Then
Assert.False(result);
}
}

public sealed class TheIsRunningOnAzurePipelinesHostedProperty
{
[Fact]
public void Should_Return_True_If_Running_On_AzurePipelinesHosted()
{
// Given
var fixture = new TFBuildFixture();
fixture.IsRunningOnAzurePipelinesHosted();
var tfBuild = fixture.CreateTFBuildService();

// When
var result = tfBuild.IsRunningOnAzurePipelinesHosted;

// Then
Assert.True(result);
}

[Fact]
public void Should_Return_False_If_Not_Running_On_AzurePipelinesHosted()
{
// Given
var fixture = new TFBuildFixture();
var vsts = fixture.CreateTFBuildService();
var tfBuild = fixture.CreateTFBuildService();

// When
var result = vsts.IsRunningOnTFS;
var result = tfBuild.IsRunningOnAzurePipelinesHosted;

// Then
Assert.False(result);
Expand All @@ -107,10 +179,10 @@ public void Should_Return_Non_Null_Reference()
{
// Given
var fixture = new TFBuildFixture();
var vsts = fixture.CreateTFBuildService();
var tfBuild = fixture.CreateTFBuildService();

// When
var result = vsts.Environment;
var result = tfBuild.Environment;

// Then
Assert.NotNull(result);
Expand Down
85 changes: 85 additions & 0 deletions src/Cake.Common/Build/BuildProvider.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.

using System;

namespace Cake.Common.Build
{
/// <summary>
/// Represents a build provider.
/// </summary>
[Flags]
public enum BuildProvider
{
/// <summary>
/// Local build provider.
/// </summary>
Local = 0,

/// <summary>
/// AppVeyor build provider.
/// </summary>
AppVeyor = 1,

/// <summary>
/// TeamCity build provider.
/// </summary>
TeamCity = 2,

/// <summary>
/// MyGet build provider.
/// </summary>
MyGet = 4,

/// <summary>
/// Bamboo build provider.
/// </summary>
Bamboo = 8,

/// <summary>
/// ContinuaCI build provider.
/// </summary>
ContinuaCI = 16,

/// <summary>
/// Jenkins build provider.
/// </summary>
Jenkins = 32,

/// <summary>
/// Bitrise build provider.
/// </summary>
Bitrise = 64,

/// <summary>
/// TravisCI build provider.
/// </summary>
TravisCI = 128,

/// <summary>
/// BitbucketPipelines build provider.
/// </summary>
BitbucketPipelines = 256,

/// <summary>
/// GoCD build provider.
/// </summary>
GoCD = 512,

/// <summary>
/// GitLabCI build provider.
/// </summary>
GitLabCI = 1024,

/// <summary>
/// AzurePipelines build provider.
/// </summary>
AzurePipelines = 2048,

/// <summary>
/// AzurePipelinesHosted build provider.
/// </summary>
AzurePipelinesHosted = 4096
}
}
68 changes: 63 additions & 5 deletions src/Cake.Common/Build/BuildSystem.cs
Original file line number Diff line number Diff line change
Expand Up @@ -114,6 +114,22 @@ public BuildSystem(
GoCD = goCDProvider;
GitLabCI = gitlabCIProvider;
TFBuild = tfBuildProvider;

Provider = (AppVeyor.IsRunningOnAppVeyor ? BuildProvider.AppVeyor : BuildProvider.Local)
| (TeamCity.IsRunningOnTeamCity ? BuildProvider.TeamCity : BuildProvider.Local)
| (MyGet.IsRunningOnMyGet ? BuildProvider.MyGet : BuildProvider.Local)
| (Bamboo.IsRunningOnBamboo ? BuildProvider.Bamboo : BuildProvider.Local)
| (ContinuaCI.IsRunningOnContinuaCI ? BuildProvider.ContinuaCI : BuildProvider.Local)
| (Jenkins.IsRunningOnJenkins ? BuildProvider.Jenkins : BuildProvider.Local)
| (Bitrise.IsRunningOnBitrise ? BuildProvider.Bitrise : BuildProvider.Local)
| (TravisCI.IsRunningOnTravisCI ? BuildProvider.TravisCI : BuildProvider.Local)
| (BitbucketPipelines.IsRunningOnBitbucketPipelines ? BuildProvider.BitbucketPipelines : BuildProvider.Local)
| (GoCD.IsRunningOnGoCD ? BuildProvider.GoCD : BuildProvider.Local)
| (GitLabCI.IsRunningOnGitLabCI ? BuildProvider.GitLabCI : BuildProvider.Local)
| (TFBuild.IsRunningOnAzurePipelines ? BuildProvider.AzurePipelines : BuildProvider.Local)
| (TFBuild.IsRunningOnAzurePipelinesHosted ? BuildProvider.AzurePipelinesHosted : BuildProvider.Local);

IsLocalBuild = Provider == BuildProvider.Local;
}

/// <summary>
Expand Down Expand Up @@ -463,6 +479,24 @@ public BuildSystem(
/// </value>
public bool IsRunningOnGitLabCI => GitLabCI.IsRunningOnGitLabCI;

/// <summary>
/// Gets a value indicating whether this instance is running on TFS.
/// </summary>
/// <example>
/// <code>
/// if(BuildSystem.IsRunningOnTFS)
/// {
/// // Get the build commit hash.
/// var commitHash = BuildSystem.TFBuild.Environment.Repository.SourceVersion;
/// }
/// </code>
/// </example>
/// <value>
/// <c>true</c> if this instance is running on TFS; otherwise, <c>false</c>.
/// </value>
[Obsolete("Please use BuildSystem.IsRunningOnAzurePipelines instead.")]
public bool IsRunningOnTFS => TFBuild.IsRunningOnTFS;

/// <summary>
/// Gets a value indicating whether this instance is running on VSTS.
/// </summary>
Expand All @@ -478,24 +512,42 @@ public BuildSystem(
/// <value>
/// <c>true</c> if this instance is running on VSTS; otherwise, <c>false</c>.
/// </value>
[Obsolete("Please use BuildSystem.IsRunningOnAzurePipelinesHosted instead.")]
public bool IsRunningOnVSTS => TFBuild.IsRunningOnVSTS;

/// <summary>
/// Gets a value indicating whether this instance is running on TFS.
/// Gets a value indicating whether this instance is running on Azure Pipelines.
/// </summary>
/// <example>
/// <code>
/// if(BuildSystem.IsRunningOnTFS)
/// if(BuildSystem.IsRunningOnAzurePipelines)
/// {
/// // Get the build commit hash.
/// var commitHash = BuildSystem.TFBuild.Environment.Repository.SourceVersion;
/// }
/// </code>
/// </example>
/// <value>
/// <c>true</c> if this instance is running on TFS; otherwise, <c>false</c>.
/// <c>true</c> if this instance is running on Azure Pipelines; otherwise, <c>false</c>.
/// </value>
public bool IsRunningOnTFS => TFBuild.IsRunningOnTFS;
public bool IsRunningOnAzurePipelines => TFBuild.IsRunningOnAzurePipelines;

/// <summary>
/// Gets a value indicating whether this instance is running on hosted Azure Pipelines.
/// </summary>
/// <example>
/// <code>
/// if(BuildSystem.IsRunningOnAzurePipelinesHosted)
/// {
/// // Get the build commit hash.
/// var commitHash = BuildSystem.TFBuild.Environment.Repository.SourceVersion;
/// }
/// </code>
/// </example>
/// <value>
/// <c>true</c> if this instance is running on hosted Azure Pipelines; otherwise, <c>false</c>.
/// </value>
public bool IsRunningOnAzurePipelinesHosted => TFBuild.IsRunningOnAzurePipelinesHosted;

/// <summary>
/// Gets the TF Build Provider.
Expand All @@ -511,6 +563,12 @@ public BuildSystem(
/// </example>
public ITFBuildProvider TFBuild { get; }

/// <summary>
/// Gets the current build provider.
/// </summary>
/// <value>The current build provider.</value>
public BuildProvider Provider { get; }

/// <summary>
/// Gets a value indicating whether the current build is local build.
/// </summary>
Expand All @@ -530,6 +588,6 @@ public BuildSystem(
/// <value>
/// <c>true</c> if the current build is local build; otherwise, <c>false</c>.
/// </value>
public bool IsLocalBuild => !(IsRunningOnAppVeyor || IsRunningOnTeamCity || IsRunningOnMyGet || IsRunningOnBamboo || IsRunningOnContinuaCI || IsRunningOnJenkins || IsRunningOnBitrise || IsRunningOnTravisCI || IsRunningOnBitbucketPipelines || IsRunningOnGoCD || IsRunningOnGitLabCI || IsRunningOnTFS || IsRunningOnVSTS);
public bool IsLocalBuild { get; }
}
}
Loading

0 comments on commit 7e76f73

Please sign in to comment.