Skip to content

Commit 91ba1e7

Browse files
committed
Add CodeBuild support
Add CodeBuild support based on the CODEBUILD_WEBHOOK_HEAD_REF environment variables as documented here: https://docs.aws.amazon.com/codebuild/latest/userguide/build-env-ref-env-vars.html Currently this is the only way to determine the branch name in CodeBuild.
1 parent bc04fad commit 91ba1e7

File tree

3 files changed

+140
-1
lines changed

3 files changed

+140
-1
lines changed
Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.IO;
4+
using System.Reflection;
5+
using GitVersion;
6+
using NUnit.Framework;
7+
using Shouldly;
8+
using GitVersion.BuildServers;
9+
using GitVersion.Common;
10+
using GitVersion.OutputVariables;
11+
12+
namespace GitVersionCore.Tests.BuildServers
13+
{
14+
[TestFixture]
15+
public sealed class CodeBuildTests : TestBase
16+
{
17+
private IEnvironment environment;
18+
19+
[SetUp]
20+
public void SetUp()
21+
{
22+
environment = new TestEnvironment();
23+
}
24+
25+
[Test]
26+
public void CorrectlyIdentifiesCodeBuildPresence()
27+
{
28+
environment.SetEnvironmentVariable(CodeBuild.HeadRefEnvironmentName, "a value");
29+
var cb = new CodeBuild(environment);
30+
cb.CanApplyToCurrentContext().ShouldBe(true);
31+
}
32+
33+
[Test]
34+
public void PicksUpBranchNameFromEnvironment()
35+
{
36+
environment.SetEnvironmentVariable(CodeBuild.HeadRefEnvironmentName, "refs/heads/master");
37+
var cb = new CodeBuild(environment);
38+
cb.GetCurrentBranch(false).ShouldBe("refs/heads/master");
39+
}
40+
41+
[Test]
42+
public void WriteAllVariablesToTheTextWriter()
43+
{
44+
var assemblyLocation = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
45+
var f = Path.Combine(assemblyLocation, "codebuild_this_file_should_be_deleted.properties");
46+
47+
try
48+
{
49+
AssertVariablesAreWrittenToFile(f);
50+
}
51+
finally
52+
{
53+
File.Delete(f);
54+
}
55+
}
56+
57+
private void AssertVariablesAreWrittenToFile(string f)
58+
{
59+
var writes = new List<string>();
60+
var semanticVersion = new SemanticVersion
61+
{
62+
Major = 1,
63+
Minor = 2,
64+
Patch = 3,
65+
PreReleaseTag = "beta1",
66+
BuildMetaData = "5"
67+
};
68+
69+
semanticVersion.BuildMetaData.CommitDate = DateTimeOffset.Parse("2014-03-06 23:59:59Z");
70+
semanticVersion.BuildMetaData.Sha = "commitSha";
71+
72+
var config = new TestEffectiveConfiguration();
73+
74+
var variables = VariableProvider.GetVariablesFor(semanticVersion, config, false);
75+
76+
var j = new CodeBuild(environment, f);
77+
78+
j.WriteIntegration(writes.Add, variables);
79+
80+
writes[1].ShouldBe("1.2.3-beta.1+5");
81+
82+
File.Exists(f).ShouldBe(true);
83+
84+
var props = File.ReadAllText(f);
85+
86+
props.ShouldContain("GitVersion_Major=1");
87+
props.ShouldContain("GitVersion_Minor=2");
88+
}
89+
}
90+
}

src/GitVersionCore/BuildServers/BuildServerList.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,8 @@ public static void Init(IEnvironment environment)
4545
new VsoAgent(environment),
4646
new TravisCI(environment),
4747
new EnvRun(environment),
48-
new Drone(environment)
48+
new Drone(environment),
49+
new CodeBuild(environment)
4950
};
5051
}
5152
}
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
using System;
2+
using System.IO;
3+
using GitVersion.Common;
4+
using GitVersion.OutputFormatters;
5+
using GitVersion.OutputVariables;
6+
7+
namespace GitVersion.BuildServers
8+
{
9+
public sealed class CodeBuild : BuildServerBase
10+
{
11+
public const string HeadRefEnvironmentName = "CODEBUILD_WEBHOOK_HEAD_REF";
12+
private readonly string propertiesFileName;
13+
14+
public CodeBuild(IEnvironment environment, string propertiesFileName = "gitversion.properties") : base(environment)
15+
{
16+
this.propertiesFileName = propertiesFileName;
17+
}
18+
19+
protected override string EnvironmentVariable { get; } = HeadRefEnvironmentName;
20+
21+
public override string GenerateSetVersionMessage(VersionVariables variables)
22+
{
23+
return variables.FullSemVer;
24+
}
25+
26+
public override string[] GenerateSetParameterMessage(string name, string value)
27+
{
28+
return new[]
29+
{
30+
$"GitVersion_{name}={value}"
31+
};
32+
}
33+
34+
public override string GetCurrentBranch(bool usingDynamicRepos)
35+
{
36+
return Environment.GetEnvironmentVariable(HeadRefEnvironmentName);
37+
}
38+
39+
public override void WriteIntegration(Action<string> writer, VersionVariables variables)
40+
{
41+
base.WriteIntegration(writer, variables);
42+
writer($"Outputting variables to '{propertiesFileName}' ... ");
43+
File.WriteAllLines(propertiesFileName, BuildOutputFormatter.GenerateBuildLogOutput(this, variables));
44+
}
45+
46+
public override bool PreventFetch() => true;
47+
}
48+
}

0 commit comments

Comments
 (0)