Skip to content

Commit 51193c2

Browse files
committed
We're now outputting a NuGet compliant version string as a TC build
parameter
1 parent 902537b commit 51193c2

File tree

3 files changed

+77
-15
lines changed

3 files changed

+77
-15
lines changed

CommonAssemblyInfo.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,6 @@
33

44
[assembly: AssemblyTitle("GitFlowVersion")]
55
[assembly: AssemblyProduct("GitFlowVersion")]
6-
[assembly: AssemblyVersion("0.1.23")]
7-
[assembly: AssemblyFileVersion("0.1.23")]
6+
[assembly: AssemblyVersion("0.1.24")]
7+
[assembly: AssemblyFileVersion("0.1.24")]
88
[assembly: InternalsVisibleTo("Tests")]

GitFlowVersion/TeamCity.cs

Lines changed: 32 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -6,35 +6,47 @@
66
public class TeamCity
77
{
88
public static string GenerateBuildVersion(VersionAndBranch versionAndBranch)
9+
{
10+
var versionString = CreateVersionString(versionAndBranch);
11+
12+
return string.Format("##teamcity[buildNumber '{0}']", versionString);
13+
}
14+
15+
static string CreateVersionString(VersionAndBranch versionAndBranch,bool padPreReleaseNumber = false)
916
{
1017
var prereleaseString = "";
1118

1219
if (versionAndBranch.Version.Stability != Stability.Final)
1320
{
14-
switch (versionAndBranch.BranchType )
21+
var preReleaseNumber = versionAndBranch.Version.PreReleaseNumber.ToString();
22+
23+
if (padPreReleaseNumber)
24+
{
25+
preReleaseNumber = versionAndBranch.Version.PreReleaseNumber.Value.ToString("D4");
26+
}
27+
28+
switch (versionAndBranch.BranchType)
1529
{
16-
case BranchType.Develop:
17-
prereleaseString = "-" + versionAndBranch.Version.Stability + versionAndBranch.Version.PreReleaseNumber;
30+
case BranchType.Develop:
31+
prereleaseString = "-" + versionAndBranch.Version.Stability + preReleaseNumber;
1832
break;
1933

20-
case BranchType.Release:
21-
prereleaseString = "-" + versionAndBranch.Version.Stability + versionAndBranch.Version.PreReleaseNumber;
34+
case BranchType.Release:
35+
prereleaseString = "-" + versionAndBranch.Version.Stability + preReleaseNumber;
2236
break;
2337

24-
case BranchType.Hotfix:
25-
prereleaseString = "-" + versionAndBranch.Version.Stability + versionAndBranch.Version.PreReleaseNumber;
38+
case BranchType.Hotfix:
39+
prereleaseString = "-" + versionAndBranch.Version.Stability + preReleaseNumber;
2640
break;
27-
case BranchType.PullRequest:
41+
case BranchType.PullRequest:
2842
prereleaseString = "-PullRequest-" + versionAndBranch.Version.Suffix;
2943
break;
30-
case BranchType.Feature:
44+
case BranchType.Feature:
3145
prereleaseString = "-Feature-" + versionAndBranch.BranchName + "-" + versionAndBranch.Sha;
3246
break;
3347
}
34-
3548
}
36-
37-
return string.Format("##teamcity[buildNumber '{0}.{1}.{2}{3}']", versionAndBranch.Version.Major, versionAndBranch.Version.Minor, versionAndBranch.Version.Patch, prereleaseString);
49+
return string.Format("{0}.{1}.{2}{3}",versionAndBranch.Version.Major, versionAndBranch.Version.Minor, versionAndBranch.Version.Patch, prereleaseString);
3850
}
3951

4052

@@ -71,14 +83,21 @@ public static int CurrentPullRequestNo()
7183

7284
public static IEnumerable<string> GenerateBuildLogOutput(VersionAndBranch versionAndBranch)
7385
{
74-
yield return GenerateBuildVersion(versionAndBranch);
7586
var semanticVersion = versionAndBranch.Version;
87+
88+
yield return GenerateBuildVersion(versionAndBranch);
7689
yield return GenerateBuildParameter("Major", semanticVersion.Major.ToString());
7790
yield return GenerateBuildParameter("Minor", semanticVersion.Minor.ToString());
7891
yield return GenerateBuildParameter("Patch", semanticVersion.Patch.ToString());
7992
yield return GenerateBuildParameter("Stability", semanticVersion.Stability.ToString());
8093
yield return GenerateBuildParameter("PreReleaseNumber", semanticVersion.PreReleaseNumber.ToString());
94+
yield return GenerateBuildParameter("Version", CreateVersionString(versionAndBranch));
95+
yield return GenerateBuildParameter("NugetVersion", GenerateNugetVersion(versionAndBranch));
96+
}
8197

98+
public static string GenerateNugetVersion(VersionAndBranch versionAndBranch)
99+
{
100+
return CreateVersionString(versionAndBranch, true);
82101
}
83102

84103
static string GenerateBuildParameter(string name, string value)

Tests/TeamcityVersionNumberTests.cs

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,49 @@ public void Master_branch()
106106
}
107107

108108

109+
[Test]
110+
public void NuGet_version_should_be_padded_to_workaround_stupid_nuget_issue_with_sorting()
111+
{
112+
Assert.True(TeamCity.GenerateNugetVersion(new VersionAndBranch
113+
{
114+
BranchType = BranchType.Develop,
115+
Version = new SemanticVersion
116+
{
117+
PreReleaseNumber = 4
118+
}
119+
}).Contains("0.0.0-Unstable0004"));
120+
121+
122+
Assert.True(TeamCity.GenerateNugetVersion(new VersionAndBranch
123+
{
124+
BranchType = BranchType.Develop,
125+
Version = new SemanticVersion
126+
{
127+
PreReleaseNumber = 40
128+
}
129+
}).Contains("0.0.0-Unstable0040"));
130+
131+
Assert.True(TeamCity.GenerateNugetVersion(new VersionAndBranch
132+
{
133+
BranchType = BranchType.Develop,
134+
Version = new SemanticVersion
135+
{
136+
PreReleaseNumber = 400
137+
}
138+
}).Contains("0.0.0-Unstable0400"));
139+
140+
Assert.True(TeamCity.GenerateNugetVersion(new VersionAndBranch
141+
{
142+
BranchType = BranchType.Develop,
143+
Version = new SemanticVersion
144+
{
145+
PreReleaseNumber = 4000
146+
}
147+
}).Contains("0.0.0-Unstable4000"));
148+
149+
}
150+
151+
109152
void VerifyOutput(string versionString, VersionAndBranch version)
110153
{
111154
var tcVersion = TeamCity.GenerateBuildVersion(version);

0 commit comments

Comments
 (0)