Skip to content

Commit 6378553

Browse files
committed
Merge pull request #689 from onovotny/vso-build-name
Enable use of GitVersion variables in the VSO BuildNumber
2 parents fd77425 + 44a1cfe commit 6378553

19 files changed

+95
-27
lines changed

.gitignore

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ ForSample/
3939
*NugetTaskBuild*
4040
*NugetRefBuild*
4141
*NugetExeBuild*
42-
*GitVersionVsoTaskBuild*
42+
*GitVersionTfsTaskBuild*
4343
*GemBuild*
4444

4545
# Visual Studio profiler

docs/more-info/build-server-setup/tfs-build-vnext.md

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,13 +30,26 @@ From a TFS build definition, select "Add a Step" and then in the Build category,
3030

3131
If you want the GitVersionTask to update AssemblyInfo files, check the box in the task configuration. For advanced usage, you can pass additional options to the GitVersion exe in the Additional arguments section.
3232

33-
The VSO build step updates the build number automatically to the GitVersion number.
33+
The VSO build step can update your build number with GitVersion variables. See below for details.
34+
3435

3536
## Running inside TFS
3637
### Using the GitVersion Variables
3738
GitVersion passes variables in the form of `GitVersion.*` (Eg: `GitVersion.Major`) to TFS Build and also writes `GITVERSION_*` (Eg: `GITVERSION_MAJOR`) environment variables that are available for any subsequent build step.
3839
See [Variables](/more-info/variables/) for an overview of available variables.
3940

41+
42+
#### Using GitVersion variables in build name
43+
To use GitVersion's variables in the build name, just add them in the form `$(GITVERSION_FullSemVer)` into the Build definition's build number string. Then just ensure GitVersion is called with
44+
`/output buildserver` and it will replace those variables with the calculated version.
45+
The TFS GitVersion Build Step (above) handles this too, so if you're already using that, there's nothing extra to configure.
46+
47+
If you currently use `$(rev:.r)` in your build number, that won't work correctly if you
48+
use GitVersion variables as well due to the delayed expansion of the GitVersion vars. Instead,
49+
You might be able to use `$(GitVersion_BuildMetaData)` to achieve a similar result.
50+
See [Variables](/more-info/variables/) for more info on the variables.
51+
52+
4053
#### Known limitations
4154
* Due to [current limitations in TFS2015 On-Prem](https://github.com/Microsoft/vso-agent-tasks/issues/380) it's currently not possible to automatically set the build version in TFS2015 On-Prem. Instead a warning similar to `##[warning]Unable to process logging event:##vso[build.updatebuildnumber 1.0.0-unstable.1` is logged.
4255
* Due to a know limitation in TFS 2015 On-Prem it's currently not possible to use variables added during build in inputs of subsequent build tasks, since the variables are processed at the beginning of the build.

src/GitVersionCore.Tests/BuildServers/BuildServerBaseTests.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,9 +39,9 @@ public override bool CanApplyToCurrentContext()
3939
throw new NotImplementedException();
4040
}
4141

42-
public override string GenerateSetVersionMessage(string versionToUseForBuildNumber)
42+
public override string GenerateSetVersionMessage(VersionVariables variables)
4343
{
44-
return versionToUseForBuildNumber;
44+
return variables.FullSemVer;
4545
}
4646

4747
public override string[] GenerateSetParameterMessage(string name, string value)

src/GitVersionCore.Tests/BuildServers/ContinuaCiTests.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using GitVersion;
2+
using GitVersionCore.Tests;
23
using NUnit.Framework;
34

45
[TestFixture]
@@ -9,7 +10,8 @@ public class ContinuaCiTests
910
public void GenerateBuildVersion()
1011
{
1112
var versionBuilder = new ContinuaCi();
12-
var continuaCiVersion = versionBuilder.GenerateSetVersionMessage("0.0.0-Beta4.7");
13+
var vars = new TestableVersionVariables(fullSemVer: "0.0.0-Beta4.7");
14+
var continuaCiVersion = versionBuilder.GenerateSetVersionMessage(vars);
1315
Assert.AreEqual("@@continua[setBuildVersion value='0.0.0-Beta4.7']", continuaCiVersion);
1416
}
1517

src/GitVersionCore.Tests/BuildServers/JenkinsMessageGenerationTests.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,8 @@ public class JenkinsMessageGenerationTests
1313
public void GenerateSetVersionMessageReturnsVersionAsIs_AlthoughThisIsNotUsedByJenkins()
1414
{
1515
var j = new Jenkins();
16-
j.GenerateSetVersionMessage("0.0.0-Beta4.7").ShouldBe("0.0.0-Beta4.7");
16+
var vars = new TestableVersionVariables(fullSemVer: "0.0.0-Beta4.7");
17+
j.GenerateSetVersionMessage(vars).ShouldBe("0.0.0-Beta4.7");
1718
}
1819

1920
[Test]

src/GitVersionCore.Tests/BuildServers/MyGetTests.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using GitVersion;
2+
using GitVersionCore.Tests;
23
using NUnit.Framework;
34

45
[TestFixture]
@@ -8,7 +9,8 @@ public class MyGetTests
89
public void Develop_branch()
910
{
1011
var versionBuilder = new MyGet();
11-
var message = versionBuilder.GenerateSetVersionMessage("0.0.0-Unstable4");
12+
var vars = new TestableVersionVariables(fullSemVer: "0.0.0-Unstable4");
13+
var message = versionBuilder.GenerateSetVersionMessage(vars);
1214
Assert.AreEqual(null, message);
1315
}
1416

src/GitVersionCore.Tests/BuildServers/TeamCityTests.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using GitVersion;
2+
using GitVersionCore.Tests;
23
using NUnit.Framework;
34

45
[TestFixture]
@@ -8,7 +9,8 @@ public class TeamCityTests
89
public void Develop_branch()
910
{
1011
var versionBuilder = new TeamCity();
11-
var tcVersion = versionBuilder.GenerateSetVersionMessage("0.0.0-Unstable4");
12+
var vars = new TestableVersionVariables(fullSemVer: "0.0.0-Unstable4");
13+
var tcVersion = versionBuilder.GenerateSetVersionMessage(vars);
1214
Assert.AreEqual("##teamcity[buildNumber '0.0.0-Unstable4']", tcVersion);
1315
}
1416

src/GitVersionCore.Tests/BuildServers/VsoAgentTests.cs

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,36 @@
1-
using GitVersion;
1+
using System;
2+
using GitVersion;
3+
using GitVersionCore.Tests;
24
using NUnit.Framework;
35
using Shouldly;
46

57
[TestFixture]
68
public class VsoAgentTests
79
{
10+
11+
string key = "BUILD_BUILDNUMBER";
12+
13+
14+
[SetUp]
15+
public void SetEnvironmentVariableForTest()
16+
{
17+
Environment.SetEnvironmentVariable(key, "Some Build_Value $(GitVersion_FullSemVer) 20151310.3 $(UnknownVar) Release", EnvironmentVariableTarget.Process);
18+
}
19+
20+
[TearDown]
21+
public void ClearEnvironmentVariableForTest()
22+
{
23+
Environment.SetEnvironmentVariable(key, null, EnvironmentVariableTarget.Process);
24+
}
25+
826
[Test]
927
public void Develop_branch()
1028
{
1129
var versionBuilder = new VsoAgent();
12-
var vsVersion = versionBuilder.GenerateSetVersionMessage("0.0.0-Unstable4");
13-
vsVersion.ShouldBe("##vso[build.updatebuildnumber]0.0.0-Unstable4");
30+
var vars = new TestableVersionVariables(fullSemVer: "0.0.0-Unstable4");
31+
var vsVersion = versionBuilder.GenerateSetVersionMessage(vars);
32+
33+
vsVersion.ShouldBe("##vso[build.updatebuildnumber]Some Build_Value 0.0.0-Unstable4 20151310.3 $(UnknownVar) Release");
1434
}
1535

1636
[Test]

src/GitVersionCore.Tests/GitVersionCore.Tests.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -169,6 +169,7 @@
169169
<Compile Include="ApprovalTestsConfig.cs" />
170170
<Compile Include="Fixtures\RepositoryFixtureBase.cs" />
171171
<Compile Include="SemanticVersionTests.cs" />
172+
<Compile Include="TestableVersionVariables.cs" />
172173
<Compile Include="TestEffectiveConfiguration.cs" />
173174
<Compile Include="TestFileSystem.cs" />
174175
<Compile Include="TestStream.cs" />
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Linq;
4+
using System.Text;
5+
using System.Threading.Tasks;
6+
7+
namespace GitVersionCore.Tests
8+
{
9+
using GitVersion;
10+
class TestableVersionVariables : VersionVariables
11+
{
12+
public TestableVersionVariables(string major = "", string minor = "", string patch = "", string buildMetaData = "", string buildMetaDataPadded = "", string fullBuildMetaData = "", string branchName = "", string sha = "", string majorMinorPatch = "", string semVer = "", string legacySemVer = "", string legacySemVerPadded = "", string fullSemVer = "", string assemblySemVer = "", string preReleaseTag = "", string preReleaseTagWithDash = "", string informationalVersion = "", string commitDate = "") : base(major, minor, patch, buildMetaData, buildMetaDataPadded, fullBuildMetaData, branchName, sha, majorMinorPatch, semVer, legacySemVer, legacySemVerPadded, fullSemVer, assemblySemVer, preReleaseTag, preReleaseTagWithDash, informationalVersion, commitDate)
13+
{
14+
}
15+
}
16+
}

0 commit comments

Comments
 (0)