Skip to content

Commit a66a83c

Browse files
committed
Merge pull request #806 from dfyx/gitlab-ci-support
Gitlab CI support
2 parents 4a7cf39 + becb00d commit a66a83c

File tree

7 files changed

+145
-1
lines changed

7 files changed

+145
-1
lines changed

docs/build-server-support/build-server-support.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ GitVersion has support for quite a few build servers out of the box. Currently w
44
- [AppVeyor](build-server/appveyor.md)
55
- [Bamboo](build-server/bamboo.md)
66
- [Continua CI](build-server/continua.md)
7+
- [GitLab CI](build-server/gitlab.md)
78
- [Jenkins](build-server/jenkins.md)
89
- [MyGet](build-server/myget.md)
910
- [Octopus Deploy](build-server/octopus-deploy.md)
@@ -14,4 +15,4 @@ GitVersion has support for quite a few build servers out of the box. Currently w
1415
When GitVersion.exe is run with the `/output buildserver` flag instead of outputting Json it will export variables to the current build server.
1516
For instance if you are running in TeamCity after you run `GitVersion /output buildserver` you will have the `%system.GitVersion.SemVer%` available for you to use
1617

17-
When running in MSBuild either from the [MSBuild Task](/usage/msbuild-task) or by using the `/proj myproject.sln` parameter, GitVersion will make the MSBuild variables available in the format `$(GitVersion_SemVer)`.
18+
When running in MSBuild either from the [MSBuild Task](/usage/msbuild-task) or by using the `/proj myproject.sln` parameter, GitVersion will make the MSBuild variables available in the format `$(GitVersion_SemVer)`.
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
# GitLab CI
2+
3+
To use GitVersion with GitLab CI, either use the [MSBuild Task](/usage/msbuild-task) or put the GitVersion executable in your runner's `PATH`.
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)