Skip to content

Commit d469bc9

Browse files
authored
Merge pull request #653 from ap0llo/cloud-cake-alias
Add Cake alias for the "cloud" command
2 parents 0fe816e + 2760f83 commit d469bc9

12 files changed

+429
-72
lines changed

azure-pipelines.yml

+15-2
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@ stages:
120120
--no-build $(testModifier)
121121
-c $(BuildConfiguration)
122122
--filter "TestCategory!=FailsOnAzurePipelines"
123-
--logger "trx;LogFileName=$(Build.ArtifactStagingDirectory)/TestLogs/TestResults.trx"
123+
--logger "trx;LogFileName=$(Build.ArtifactStagingDirectory)/TestLogs/TestResults.x64.trx"
124124
--results-directory $(Build.ArtifactStagingDirectory)/CodeCoverage/
125125
--collect:"XPlat Code Coverage"
126126
--
@@ -133,7 +133,7 @@ stages:
133133
--no-build $(testModifier)
134134
-c $(BuildConfiguration)
135135
--filter "TestCategory!=FailsOnAzurePipelines"
136-
--logger "trx;LogFileName=$(Build.ArtifactStagingDirectory)/TestLogs/TestResults.trx"
136+
--logger "trx;LogFileName=$(Build.ArtifactStagingDirectory)/TestLogs/TestResults.x86.trx"
137137
--results-directory $(Build.ArtifactStagingDirectory)/CodeCoverage/
138138
--collect:"XPlat Code Coverage"
139139
--
@@ -142,6 +142,19 @@ stages:
142142
workingDirectory: src
143143
condition: ne(variables['dotnet32'], '')
144144
145+
- script: >
146+
dotnet test Cake.GitVersioning.Tests
147+
--no-build $(testModifier)
148+
-c $(BuildConfiguration)
149+
--filter "TestCategory!=FailsOnAzurePipelines"
150+
--logger "trx;LogFileName=$(Build.ArtifactStagingDirectory)/TestLogs/TestResults.cake.trx"
151+
--results-directory $(Build.ArtifactStagingDirectory)/CodeCoverage/
152+
--collect:"XPlat Code Coverage"
153+
--
154+
RunConfiguration.DisableAppDomain=true
155+
displayName: Run cake tests
156+
workingDirectory: src
157+
145158
- task: PublishCodeCoverageResults@1
146159
displayName: Publish code coverage results
147160
inputs:
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
<Project Sdk="Microsoft.NET.Sdk">
2+
3+
<PropertyGroup>
4+
<TargetFrameworks>net5.0;net461</TargetFrameworks>
5+
<SignAssembly>false</SignAssembly>
6+
<IsTestProject>true</IsTestProject>
7+
<IsPackable>false</IsPackable>
8+
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
9+
<GenerateBindingRedirectsOutputType>true</GenerateBindingRedirectsOutputType>
10+
<DebugType>full</DebugType>
11+
</PropertyGroup>
12+
13+
<ItemGroup>
14+
<ProjectReference Include="..\Cake.GitVersioning\Cake.GitVersioning.csproj" />
15+
<ProjectReference Include="..\NerdBank.GitVersioning\NerdBank.GitVersioning.csproj" />
16+
</ItemGroup>
17+
<ItemGroup>
18+
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.11.0" />
19+
<PackageReference Include="Nerdbank.GitVersioning.LKG" Version="3.4.173-alpha" />
20+
<PackageReference Include="xunit" Version="2.4.1" />
21+
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.3">
22+
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
23+
<PrivateAssets>all</PrivateAssets>
24+
</PackageReference>
25+
<PackageReference Include="coverlet.collector" Version="1.3.0" />
26+
</ItemGroup>
27+
28+
</Project>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
using System;
2+
using System.Linq;
3+
using Cake.GitVersioning;
4+
using Nerdbank.GitVersioning;
5+
using Xunit;
6+
7+
/// <summary>
8+
/// Tests to verify the <see cref="GitVersioningCloudProvider"/> enum (part of the Cake integration) is up-to-date
9+
/// </summary>
10+
public class GitVersioningCloudProviderTests
11+
{
12+
[Fact]
13+
public void HasExpectedValues()
14+
{
15+
var expectedValues = CloudBuild.SupportedCloudBuilds.Select(cb => cb.GetType().Name);
16+
var actualValues = Enum.GetNames(typeof(GitVersioningCloudProvider));
17+
18+
var missingValues = expectedValues.Except(actualValues);
19+
Assert.True(
20+
!missingValues.Any(),
21+
$"Enumeration is missing the following values of supported cloud build providers: {string.Join(", ", missingValues)}"
22+
);
23+
24+
var redundantValues = actualValues.Except(expectedValues);
25+
Assert.True(
26+
!redundantValues.Any(),
27+
$"Enumeration contains values which were not found among supported cloud build providers: {string.Join(",", redundantValues)}"
28+
);
29+
}
30+
}

src/Cake.GitVersioning/Cake.GitVersioning.csproj

-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
<PropertyGroup>
44
<TargetFramework>netstandard2.0</TargetFramework>
5-
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
65
<GenerateDocumentationFile>true</GenerateDocumentationFile>
76
<Authors>Chris Crutchfield, Andrew Arnott</Authors>
87
<Company>andarno</Company>

src/Cake.GitVersioning/GitVersioningAliases.cs

+48-10
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,12 @@
1-
using System.IO;
2-
using System.Reflection;
3-
using Cake.Core;
4-
using Cake.Core.Annotations;
5-
using Nerdbank.GitVersioning;
6-
7-
namespace Cake.GitVersioning
1+
namespace Cake.GitVersioning
82
{
93
using System;
10-
using System.Linq;
11-
12-
using Validation;
4+
using System.IO;
5+
using System.Reflection;
6+
using Cake.Core;
7+
using Cake.Core.Annotations;
8+
using Nerdbank.GitVersioning;
9+
using Nerdbank.GitVersioning.Commands;
1310

1411
/// <summary>
1512
/// Contains functionality for using Nerdbank.GitVersioning.
@@ -45,5 +42,46 @@ public static VersionOracle GitVersioningGetVersion(this ICakeContext cakeContex
4542
var gitContext = GitContext.Create(fullProjectDirectory);
4643
return new VersionOracle(gitContext, cloudBuild: CloudBuild.Active);
4744
}
45+
46+
/// <summary>
47+
/// Adds versioning information to the current build environment's variables.
48+
/// </summary>
49+
/// <example>
50+
/// Task("SetBuildVersion")
51+
/// .Does(() =>
52+
/// {
53+
/// GitVersioningCloud()
54+
/// });
55+
/// </example>
56+
/// <param name="cakeContext">The context.</param>
57+
/// <param name="projectDirectory">Directory to start the search for version.json.</param>
58+
/// <param name="settings">The settings to use for updating variables.</param>
59+
[CakeMethodAlias]
60+
public static void GitVersioningCloud(this ICakeContext cakeContext, string projectDirectory = ".", GitVersioningCloudSettings settings = null)
61+
{
62+
var fullProjectDirectory = (new DirectoryInfo(projectDirectory)).FullName;
63+
64+
string directoryName = Path.GetDirectoryName(Assembly.GetAssembly(typeof(GitVersioningAliases)).Location);
65+
66+
if (string.IsNullOrWhiteSpace(directoryName))
67+
{
68+
throw new InvalidOperationException("Could not locate the Cake.GitVersioning library");
69+
}
70+
71+
settings ??= new GitVersioningCloudSettings();
72+
73+
var cloudCommand = new CloudCommand(Console.Out, Console.Error);
74+
cloudCommand.SetBuildVariables(
75+
fullProjectDirectory,
76+
settings.Metadata,
77+
settings.Version,
78+
settings.CISystem?.ToString(),
79+
settings.AllVariables,
80+
settings.CommonVariables,
81+
settings.AdditionalVariables,
82+
false
83+
);
84+
}
85+
4886
}
4987
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
namespace Cake.GitVersioning
2+
{
3+
/// <summary>
4+
/// Defines the supported cloud build providers for the <see cref="GitVersioningAliases.GitVersioningCloud" /> alias.
5+
/// </summary>
6+
public enum GitVersioningCloudProvider
7+
{
8+
/// <summary>
9+
/// Use AppVeyor cloud build provider.
10+
/// </summary>
11+
AppVeyor,
12+
13+
/// <summary>
14+
/// Use Azure Pipeline / Visual Studio Team Services / TFS cloud build provider.
15+
/// </summary>
16+
VisualStudioTeamServices,
17+
18+
/// <summary>
19+
/// Use GitHub Actions cloud build provider.
20+
/// </summary>
21+
GitHubActions,
22+
23+
/// <summary>
24+
/// Use the TeamCity cloud build provider.
25+
/// </summary>
26+
TeamCity,
27+
28+
/// <summary>
29+
/// Use the Atlassian Bamboo cloud build provider.
30+
/// </summary>
31+
AtlassianBamboo,
32+
33+
/// <summary>
34+
/// Use the Jenkins cloud build provider.
35+
/// </summary>
36+
Jenkins,
37+
38+
/// <summary>
39+
/// Use the GitLab CI cloud build provider.
40+
/// </summary>
41+
GitLab,
42+
43+
/// <summary>
44+
/// Use the Travis CI cloud build provider.
45+
/// </summary>
46+
Travis,
47+
48+
/// <summary>
49+
/// Use the Jetbrains Space cloud build provider.
50+
/// </summary>
51+
SpaceAutomation,
52+
}
53+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
#nullable enable
2+
3+
namespace Cake.GitVersioning
4+
{
5+
using System;
6+
using System.Collections.Generic;
7+
8+
/// <summary>
9+
/// Defines settings for the <see cref="GitVersioningAliases.GitVersioningCloud"/> alias.
10+
/// </summary>
11+
public class GitVersioningCloudSettings
12+
{
13+
/// <summary>
14+
/// The string to use for the cloud build number.
15+
/// If no value is specified, the computed version will be used.
16+
/// </summary>
17+
public string? Version { get; set; }
18+
19+
/// <summary>
20+
/// Adds an identifier to the build metadata part of a semantic version.
21+
/// </summary>
22+
public List<string> Metadata { get; } = new();
23+
24+
/// <summary>
25+
/// Force activation for a particular CI system. If not specified,
26+
/// auto-detection will be used.
27+
/// </summary>
28+
public GitVersioningCloudProvider? CISystem { get; set; }
29+
30+
/// <summary>
31+
/// Defines ALL version variables as cloud build variables, with a "NBGV_" prefix.
32+
/// </summary>
33+
public bool AllVariables { get; set; }
34+
35+
/// <summary>
36+
/// Defines a few common version variables as cloud build variables, with a "Git" prefix.
37+
/// </summary>
38+
public bool CommonVariables { get; set; }
39+
40+
/// <summary>
41+
/// Additional cloud build variables to define.
42+
/// </summary>
43+
public Dictionary<string, string> AdditionalVariables { get; } = new(StringComparer.OrdinalIgnoreCase);
44+
}
45+
}

0 commit comments

Comments
 (0)