Skip to content

Commit 27d5e53

Browse files
committed
Add support for GitLab CI
1 parent 2bbe5bb commit 27d5e53

File tree

5 files changed

+140
-0
lines changed

5 files changed

+140
-0
lines changed
Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.IO;
4+
using GitVersion;
5+
using GitVersionCore.Tests;
6+
using NUnit.Framework;
7+
using Shouldly;
8+
9+
[TestFixture]
10+
public class GitLabCiMessageGenerationTests
11+
{
12+
[Test]
13+
public void GenerateSetVersionMessageReturnsVersionAsIs_AlthoughThisIsNotUsedByJenkins()
14+
{
15+
var j = new GitLabCi();
16+
var vars = new TestableVersionVariables(fullSemVer: "0.0.0-Beta4.7");
17+
j.GenerateSetVersionMessage(vars).ShouldBe("0.0.0-Beta4.7");
18+
}
19+
20+
[Test]
21+
public void GenerateMessageTest()
22+
{
23+
var j = new GitLabCi();
24+
var generatedParameterMessages = j.GenerateSetParameterMessage("name", "value");
25+
generatedParameterMessages.Length.ShouldBe(1);
26+
generatedParameterMessages[0].ShouldBe("GitVersion_name=value");
27+
}
28+
29+
[Test, Explicit]
30+
public void WriteAllVariablesToTheTextWriter()
31+
{
32+
// this test method writes to disc, hence marked explicit
33+
var f = "this_file_should_be_deleted.properties";
34+
35+
try
36+
{
37+
AssertVariablesAreWrittenToFile(f);
38+
}
39+
finally
40+
{
41+
File.Delete(f);
42+
}
43+
}
44+
45+
static void AssertVariablesAreWrittenToFile(string f)
46+
{
47+
var writes = new List<string>();
48+
var semanticVersion = new SemanticVersion
49+
{
50+
Major = 1,
51+
Minor = 2,
52+
Patch = 3,
53+
PreReleaseTag = "beta1",
54+
BuildMetaData = "5"
55+
};
56+
57+
semanticVersion.BuildMetaData.CommitDate = DateTimeOffset.Parse("2014-03-06 23:59:59Z");
58+
semanticVersion.BuildMetaData.Sha = "commitSha";
59+
60+
var config = new TestEffectiveConfiguration();
61+
62+
var variables = VariableProvider.GetVariablesFor(semanticVersion, config, false);
63+
64+
var j = new GitLabCi(f);
65+
66+
j.WriteIntegration(writes.Add, variables);
67+
68+
writes[1].ShouldBe("1.2.3-beta.1+5");
69+
70+
File.Exists(f).ShouldBe(true);
71+
72+
var props = File.ReadAllText(f);
73+
74+
props.ShouldContain("GitVersion_Major=1");
75+
props.ShouldContain("GitVersion_Minor=2");
76+
}
77+
}

src/GitVersionCore.Tests/GitVersionCore.Tests.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,7 @@
9393
<Compile Include="BuildServers\BuildServerBaseTests.cs" />
9494
<Compile Include="BuildServers\ContinuaCiTests.cs" />
9595
<Compile Include="BuildServers\EnvironmentVariableJenkinsTests.cs" />
96+
<Compile Include="BuildServers\GitLabCiMessageGenerationTest.cs" />
9697
<Compile Include="BuildServers\JenkinsMessageGenerationTests.cs" />
9798
<Compile Include="BuildServers\MyGetTests.cs" />
9899
<Compile Include="BuildServers\VsoAgentTests.cs" />

src/GitVersionCore/BuildServers/BuildServerList.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ public static class BuildServerList
1212
new AppVeyor(),
1313
new MyGet(),
1414
new Jenkins(),
15+
new GitLabCi(),
1516
new VsoAgent()
1617
};
1718

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
namespace GitVersion
2+
{
3+
using System;
4+
using System.IO;
5+
6+
public class GitLabCi : BuildServerBase
7+
{
8+
string _file;
9+
10+
public GitLabCi()
11+
: this("gitversion.properties")
12+
{
13+
}
14+
15+
public GitLabCi(string propertiesFileName)
16+
{
17+
_file = propertiesFileName;
18+
}
19+
20+
public override bool CanApplyToCurrentContext()
21+
{
22+
return !string.IsNullOrEmpty(Environment.GetEnvironmentVariable("GITLAB_CI"));
23+
}
24+
25+
public override string GenerateSetVersionMessage(VersionVariables variables)
26+
{
27+
return variables.FullSemVer;
28+
}
29+
30+
public override string[] GenerateSetParameterMessage(string name, string value)
31+
{
32+
return new[]
33+
{
34+
string.Format("GitVersion_{0}={1}", name, value)
35+
};
36+
}
37+
38+
public override string GetCurrentBranch(bool usingDynamicRepos)
39+
{
40+
return Environment.GetEnvironmentVariable("CI_BUILD_REF_NAME");
41+
}
42+
43+
public override bool PreventFetch()
44+
{
45+
return true;
46+
}
47+
48+
public override void WriteIntegration(Action<string> writer, VersionVariables variables)
49+
{
50+
base.WriteIntegration(writer, variables);
51+
writer(string.Format("Outputting variables to '{0}' ... ", _file));
52+
WriteVariablesFile(variables);
53+
}
54+
55+
void WriteVariablesFile(VersionVariables variables)
56+
{
57+
File.WriteAllLines(_file, BuildOutputFormatter.GenerateBuildLogOutput(this, variables));
58+
}
59+
}
60+
}

src/GitVersionCore/GitVersionCore.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@
7272
<Compile Include="BuildServers\BuildServerList.cs" />
7373
<Compile Include="BuildServers\ContinuaCi.cs" />
7474
<Compile Include="BuildServers\GitHelper.cs" />
75+
<Compile Include="BuildServers\GitLabCi.cs" />
7576
<Compile Include="BuildServers\IBuildServer.cs" />
7677
<Compile Include="BuildServers\Jenkins.cs" />
7778
<Compile Include="BuildServers\MyGet.cs" />

0 commit comments

Comments
 (0)