Skip to content

Commit a45fe82

Browse files
authored
Merge branch 'master' into feature/merge-message-refactor
2 parents b6c6e2c + f7b10f1 commit a45fe82

File tree

67 files changed

+604
-299
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

67 files changed

+604
-299
lines changed

.travis.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
language: csharp
22
sudo: required
33
dist: trusty
4-
dotnet: 2.1.504
4+
dotnet: 2.1.505
55
mono:
66
- latest
77
os:

azure-pipelines.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
variables:
2-
DOTNET_SDK_VERSION: '2.1.504'
2+
DOTNET_SDK_VERSION: '2.1.505'
33
DOTNET_PACKAGE_TYPE: 'sdk'
44
RUBY_VERSION: '2.5'
55

build.cake

Lines changed: 70 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,24 @@
11
// Install modules
2-
#module nuget:?package=Cake.DotNetTool.Module&version=0.1.0
2+
#module nuget:?package=Cake.DotNetTool.Module&version=0.2.0
33

44
// Install addins.
5-
#addin "nuget:?package=Cake.Gitter&version=0.9.0"
6-
#addin "nuget:?package=Cake.Docker&version=0.9.6"
7-
#addin "nuget:?package=Cake.Npm&version=0.15.0"
8-
#addin "nuget:?package=Cake.Incubator&version=3.0.0"
5+
#addin "nuget:?package=Cake.Gitter&version=0.10.0"
6+
#addin "nuget:?package=Cake.Docker&version=0.9.9"
7+
#addin "nuget:?package=Cake.Npm&version=0.16.0"
8+
#addin "nuget:?package=Cake.Incubator&version=4.0.2"
99
#addin "nuget:?package=Cake.Json&version=3.0.0"
1010
#addin "nuget:?package=Cake.Tfx&version=0.8.0"
1111
#addin "nuget:?package=Cake.Gem&version=0.7.0"
1212
#addin "nuget:?package=Cake.Coverlet&version=2.2.1"
1313
#addin "nuget:?package=Cake.Codecov&version=0.5.0"
1414
#addin "nuget:?package=Newtonsoft.Json&version=9.0.1"
15+
#addin "nuget:?package=xunit.assert&version=2.4.1"
1516

1617
// Install tools.
17-
#tool "nuget:?package=NUnit.ConsoleRunner&version=3.9.0"
18-
#tool "nuget:?package=GitReleaseNotes&version=0.7.1"
18+
#tool "nuget:?package=NUnit.ConsoleRunner&version=3.10.0"
1919
#tool "nuget:?package=ILRepack&version=2.0.16"
20-
#tool "nuget:?package=Codecov&version=1.1.0"
21-
#tool "nuget:?package=nuget.commandline&version=4.9.2"
20+
#tool "nuget:?package=Codecov&version=1.4.0"
21+
#tool "nuget:?package=nuget.commandline&version=4.9.4"
2222

2323
// Install .NET Core Global tools.
2424
#tool "dotnet:?package=GitReleaseManager.Tool&version=0.8.0"
@@ -27,6 +27,7 @@
2727
#load "./build/parameters.cake"
2828
#load "./build/utils.cake"
2929

30+
using Xunit;
3031
//////////////////////////////////////////////////////////////////////
3132
// PARAMETERS
3233
//////////////////////////////////////////////////////////////////////
@@ -208,19 +209,19 @@ Task("Copy-Files")
208209
.Does<BuildParameters>((parameters) =>
209210
{
210211
// .NET Core
211-
var netCoreDir = parameters.Paths.Directories.ArtifactsBinNetCore.Combine("tools");
212+
var coreFxDir = parameters.Paths.Directories.ArtifactsBinCoreFx.Combine("tools");
212213
DotNetCorePublish("./src/GitVersionExe/GitVersionExe.csproj", new DotNetCorePublishSettings
213214
{
214-
Framework = parameters.NetCoreVersion,
215+
Framework = parameters.CoreFxVersion,
215216
NoRestore = true,
216217
Configuration = parameters.Configuration,
217-
OutputDirectory = netCoreDir,
218+
OutputDirectory = coreFxDir,
218219
MSBuildSettings = parameters.MSBuildSettings
219220
});
220221

221222
// Copy license & Copy GitVersion.XML (since publish does not do this anymore)
222-
CopyFileToDirectory("./LICENSE", netCoreDir);
223-
CopyFileToDirectory($"./src/GitVersionExe/bin/{parameters.Configuration}/{parameters.NetCoreVersion}/GitVersion.xml", netCoreDir);
223+
CopyFileToDirectory("./LICENSE", coreFxDir);
224+
CopyFileToDirectory($"./src/GitVersionExe/bin/{parameters.Configuration}/{parameters.CoreFxVersion}/GitVersion.xml", coreFxDir);
224225

225226
// .NET 4.0
226227
DotNetCorePublish("./src/GitVersionExe/GitVersionExe.csproj", new DotNetCorePublishSettings
@@ -233,14 +234,14 @@ Task("Copy-Files")
233234
MSBuildSettings = parameters.MSBuildSettings
234235
});
235236

236-
var ilMergDir = parameters.Paths.Directories.ArtifactsBinFullFxILMerge;
237+
var ilMergeDir = parameters.Paths.Directories.ArtifactsBinFullFxILMerge;
237238
var portableDir = parameters.Paths.Directories.ArtifactsBinFullFxPortable.Combine("tools");
238239
var cmdlineDir = parameters.Paths.Directories.ArtifactsBinFullFxCmdline.Combine("tools");
239240

240241
// Portable
241-
PublishILRepackedGitVersionExe(true, parameters.Paths.Directories.ArtifactsBinFullFx, ilMergDir, portableDir, parameters.Configuration, parameters.FullFxVersion);
242+
PublishILRepackedGitVersionExe(true, parameters.Paths.Directories.ArtifactsBinFullFx, ilMergeDir, portableDir, parameters.Configuration, parameters.FullFxVersion);
242243
// Commandline
243-
PublishILRepackedGitVersionExe(false, parameters.Paths.Directories.ArtifactsBinFullFx, ilMergDir, cmdlineDir, parameters.Configuration, parameters.FullFxVersion);
244+
PublishILRepackedGitVersionExe(false, parameters.Paths.Directories.ArtifactsBinFullFx, ilMergeDir, cmdlineDir, parameters.Configuration, parameters.FullFxVersion);
244245

245246
// Vsix
246247
var tfsPath = new DirectoryPath("./src/GitVersionTfsTask/GitVersionTask");
@@ -250,9 +251,9 @@ Task("Copy-Files")
250251
CopyDirectory(portableDir.Combine("lib"), tfsPath.Combine("lib"));
251252

252253
// Vsix dotnet core
253-
var tfsNetCorePath = new DirectoryPath("./src/GitVersionTfsTask/GitVersionNetCoreTask");
254-
EnsureDirectoryExists(tfsNetCorePath);
255-
CopyDirectory(netCoreDir, tfsNetCorePath.Combine("netcore"));
254+
var tfsCoreFxPath = new DirectoryPath("./src/GitVersionTfsTask/GitVersionNetCoreTask");
255+
EnsureDirectoryExists(tfsCoreFxPath);
256+
CopyDirectory(coreFxDir, tfsCoreFxPath.Combine("netcore"));
256257

257258
// Ruby Gem
258259
var gemPath = new DirectoryPath("./src/GitVersionRubyGem/bin");
@@ -398,9 +399,9 @@ Task("Zip-Files")
398399
Zip(cmdlineDir, parameters.Paths.Files.ZipArtifactPathDesktop, fullFxFiles);
399400

400401
// .NET Core
401-
var netCoreDir = parameters.Paths.Directories.ArtifactsBinNetCore.Combine("tools");
402-
var coreclrFiles = GetFiles(netCoreDir.FullPath + "/**/*");
403-
Zip(netCoreDir, parameters.Paths.Files.ZipArtifactPathCoreClr, coreclrFiles);
402+
var coreFxDir = parameters.Paths.Directories.ArtifactsBinCoreFx.Combine("tools");
403+
var coreclrFiles = GetFiles(coreFxDir.FullPath + "/**/*");
404+
Zip(coreFxDir, parameters.Paths.Files.ZipArtifactPathCoreClr, coreclrFiles);
404405
});
405406

406407
Task("Docker-Build")
@@ -409,17 +410,45 @@ Task("Docker-Build")
409410
.IsDependentOn("Copy-Files")
410411
.Does<BuildParameters>((parameters) =>
411412
{
412-
if (parameters.IsRunningOnWindows)
413+
var images = parameters.IsRunningOnWindows
414+
? parameters.Docker.Windows
415+
: parameters.IsRunningOnLinux
416+
? parameters.Docker.Linux
417+
: Array.Empty<DockerImage>();
418+
419+
foreach(var dockerImage in images)
413420
{
414-
DockerBuild("windows", "nano", "netcoreapp2.1", parameters);
415-
DockerBuild("windows", "windowsservercore", "net472", parameters);
421+
DockerBuild(dockerImage, parameters);
416422
}
417-
else if (parameters.IsRunningOnLinux)
423+
});
424+
425+
Task("Docker-Test")
426+
.WithCriteria<BuildParameters>((context, parameters) => !parameters.IsRunningOnMacOS, "Docker can be tested only on Windows or Linux agents.")
427+
.WithCriteria<BuildParameters>((context, parameters) => parameters.IsStableRelease() || parameters.IsPreRelease(), "Docker-Test works only for releases.")
428+
.IsDependentOn("Docker-Build")
429+
.Does<BuildParameters>((parameters) =>
430+
{
431+
var currentDir = MakeAbsolute(Directory("."));
432+
var containerDir = parameters.IsRunningOnWindows ? "c:/repo" : "/repo";
433+
var settings = new DockerContainerRunSettings
418434
{
419-
DockerBuild("linux", "debian", "netcoreapp2.1", parameters);
420-
DockerBuild("linux", "debian", "net472", parameters);
421-
DockerBuild("linux", "centos7", "netcoreapp2.1", parameters);
422-
DockerBuild("linux", "fedora27", "netcoreapp2.1", parameters);
435+
Rm = true,
436+
Volume = new[] { $"{currentDir}:{containerDir}" }
437+
};
438+
439+
var images = parameters.IsRunningOnWindows
440+
? parameters.Docker.Windows
441+
: parameters.IsRunningOnLinux
442+
? parameters.Docker.Linux
443+
: Array.Empty<DockerImage>();
444+
445+
foreach(var dockerImage in images)
446+
{
447+
var tags = GetDockerTags(dockerImage, parameters);
448+
foreach (var tag in tags)
449+
{
450+
DockerTestRun(settings, parameters, tag, containerDir);
451+
}
423452
}
424453
});
425454

@@ -585,7 +614,7 @@ Task("Publish-Tfs")
585614
};
586615

587616
TfxExtensionPublish(parameters.Paths.Files.VsixOutputFilePath, settings);
588-
TfxExtensionPublish(parameters.Paths.Files.VsixNetCoreOutputFilePath, settings);
617+
TfxExtensionPublish(parameters.Paths.Files.VsixCoreFxOutputFilePath, settings);
589618
})
590619
.OnError(exception =>
591620
{
@@ -628,6 +657,7 @@ Task("Publish-DockerHub")
628657
.WithCriteria<BuildParameters>((context, parameters) => parameters.IsRunningOnAzurePipeline, "Publish-DockerHub works only on AzurePipeline.")
629658
.WithCriteria<BuildParameters>((context, parameters) => parameters.IsStableRelease() || parameters.IsPreRelease(), "Publish-DockerHub works only for releases.")
630659
.IsDependentOn("Docker-Build")
660+
.IsDependentOn("Docker-Test")
631661
.Does<BuildParameters>((parameters) =>
632662
{
633663
var username = parameters.Credentials.Docker.UserName;
@@ -642,17 +672,15 @@ Task("Publish-DockerHub")
642672

643673
DockerLogin(parameters.Credentials.Docker.UserName, parameters.Credentials.Docker.Password);
644674

645-
if (parameters.IsRunningOnWindows)
646-
{
647-
DockerPush("windows", "nano", "netcoreapp2.1", parameters);
648-
DockerPush("windows", "windowsservercore", "net472", parameters);
649-
}
650-
else if (parameters.IsRunningOnLinux)
675+
var images = parameters.IsRunningOnWindows
676+
? parameters.Docker.Windows
677+
: parameters.IsRunningOnLinux
678+
? parameters.Docker.Linux
679+
: Array.Empty<DockerImage>();
680+
681+
foreach(var dockerImage in images)
651682
{
652-
DockerPush("linux", "debian", "netcoreapp2.1", parameters);
653-
DockerPush("linux", "debian", "net472", parameters);
654-
DockerPush("linux", "centos7", "netcoreapp2.1", parameters);
655-
DockerPush("linux", "fedora27", "netcoreapp2.1", parameters);
683+
DockerPush(dockerImage, parameters);
656684
}
657685

658686
DockerLogout();

build.config

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
#!/usr/bin/env bash
2-
CAKE_VERSION=0.32.1
3-
DOTNET_VERSION=2.1.504
2+
CAKE_VERSION=0.33.0
3+
DOTNET_VERSION=2.1.505

build/artifacts.cake

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,3 +93,60 @@ public class BuildArtifact
9393
ArtifactName = ArtifactPath.GetFilename().ToString();
9494
}
9595
}
96+
97+
public class DockerImages
98+
{
99+
public ICollection<DockerImage> Windows { get; private set; }
100+
public ICollection<DockerImage> Linux { get; private set; }
101+
102+
public static DockerImages GetDockerImages(ICakeContext context, FilePath[] dockerfiles)
103+
{
104+
foreach (var file in dockerfiles)
105+
{
106+
var segments = file.Segments.Reverse().ToArray();
107+
var targetFramework = segments[1];
108+
var distro = segments[2];
109+
var os = segments[3];
110+
context.Information($"{os}-{distro}-{targetFramework}");
111+
}
112+
var toDockerImage = DockerImage();
113+
var dockerImages = dockerfiles.Select(toDockerImage).ToArray();
114+
115+
return new DockerImages {
116+
Windows = dockerImages.Where(x => x.OS == "windows").ToArray(),
117+
Linux = dockerImages.Where(x => x.OS == "linux").ToArray(),
118+
};
119+
}
120+
121+
private static Func<FilePath, DockerImage> DockerImage()
122+
{
123+
return dockerFile => {
124+
var segments = dockerFile.Segments.Reverse().ToArray();
125+
var targetFramework = segments[1];
126+
var distro = segments[2];
127+
var os = segments[3];
128+
return new DockerImage(os: os, distro: distro, targetFramework: targetFramework);
129+
};
130+
}
131+
}
132+
133+
public class DockerImage
134+
{
135+
public string OS { get; private set; }
136+
public string Distro { get; private set; }
137+
public string TargetFramework { get; private set; }
138+
139+
public DockerImage(string os, string distro, string targetFramework)
140+
{
141+
OS = os;
142+
Distro = distro;
143+
TargetFramework = targetFramework;
144+
}
145+
146+
public void Deconstruct(out string os, out string distro, out string targetFramework)
147+
{
148+
os = OS;
149+
distro = Distro;
150+
targetFramework = TargetFramework;
151+
}
152+
}

build/parameters.cake

Lines changed: 12 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ public class BuildParameters
88
public string Target { get; private set; }
99
public string Configuration { get; private set; }
1010

11-
public string NetCoreVersion { get; private set; } = "netcoreapp2.1";
11+
public string CoreFxVersion { get; private set; } = "netcoreapp2.1";
1212
public string FullFxVersion { get; private set; } = "net461";
1313

1414
public bool EnabledUnitTests { get; private set; }
@@ -40,6 +40,7 @@ public class BuildParameters
4040
public BuildPaths Paths { get; private set; }
4141
public BuildPackages Packages { get; private set; }
4242
public BuildArtifacts Artifacts { get; private set; }
43+
public DockerImages Docker { get; private set; }
4344
public Dictionary<string, DirectoryPath> PackagesBuildMap { get; private set; }
4445

4546
public bool IsStableRelease() => !IsLocalBuild && IsMainRepo && IsMainBranch && !IsPullRequest && IsTagged;
@@ -76,11 +77,11 @@ public class BuildParameters
7677
IsLocalBuild = buildSystem.IsLocalBuild,
7778
IsRunningOnAppVeyor = buildSystem.IsRunningOnAppVeyor,
7879
IsRunningOnTravis = buildSystem.IsRunningOnTravisCI,
79-
IsRunningOnAzurePipeline = buildSystem.IsRunningOnVSTS,
80+
IsRunningOnAzurePipeline = buildSystem.IsRunningOnAzurePipelinesHosted,
8081

82+
IsPullRequest = buildSystem.IsPullRequest,
8183
IsMainRepo = IsOnMainRepo(context),
8284
IsMainBranch = IsOnMainBranch(context),
83-
IsPullRequest = IsPullRequestBuild(context),
8485
IsTagged = IsBuildTagged(context),
8586
};
8687
}
@@ -91,6 +92,9 @@ public class BuildParameters
9192

9293
Paths = BuildPaths.GetPaths(context, this, Configuration, Version);
9394

95+
var dockerFiles = context.GetFiles("./src/**/Dockerfile").ToArray();
96+
Docker = DockerImages.GetDockerImages(context, dockerFiles);
97+
9498
Packages = BuildPackages.GetPackages(
9599
Paths.Directories.NugetRoot,
96100
Version.SemVersion,
@@ -104,16 +108,16 @@ public class BuildParameters
104108
files.TestCoverageOutputFilePath,
105109
files.ReleaseNotesOutputFilePath,
106110
files.VsixOutputFilePath,
107-
files.VsixNetCoreOutputFilePath,
111+
files.VsixCoreFxOutputFilePath,
108112
files.GemOutputFilePath
109113
});
110114

111115
PackagesBuildMap = new Dictionary<string, DirectoryPath>
112116
{
113-
["GitVersion.CommandLine.DotNetCore"] = Paths.Directories.ArtifactsBinNetCore,
117+
["GitVersion.CommandLine.DotNetCore"] = Paths.Directories.ArtifactsBinCoreFx,
114118
["GitVersion.CommandLine"] = Paths.Directories.ArtifactsBinFullFxCmdline,
115119
["GitVersion.Portable"] = Paths.Directories.ArtifactsBinFullFxPortable,
116-
["GitVersion.Tool"] = Paths.Directories.ArtifactsBinNetCore,
120+
["GitVersion.Tool"] = Paths.Directories.ArtifactsBinCoreFx,
117121
};
118122

119123
Credentials = BuildCredentials.GetCredentials(context);
@@ -162,7 +166,7 @@ public class BuildParameters
162166
{
163167
repositoryName = buildSystem.TravisCI.Environment.Repository.Slug;
164168
}
165-
else if (buildSystem.IsRunningOnVSTS)
169+
else if (buildSystem.IsRunningOnAzurePipelinesHosted)
166170
{
167171
repositoryName = buildSystem.TFBuild.Environment.Repository.RepoName;
168172
}
@@ -184,7 +188,7 @@ public class BuildParameters
184188
{
185189
repositoryBranch = buildSystem.TravisCI.Environment.Build.Branch;
186190
}
187-
else if (buildSystem.IsRunningOnVSTS)
191+
else if (buildSystem.IsRunningOnAzurePipelinesHosted)
188192
{
189193
repositoryBranch = buildSystem.TFBuild.Environment.Repository.Branch;
190194
}
@@ -194,26 +198,6 @@ public class BuildParameters
194198
return !string.IsNullOrWhiteSpace(repositoryBranch) && StringComparer.OrdinalIgnoreCase.Equals("master", repositoryBranch);
195199
}
196200

197-
private static bool IsPullRequestBuild(ICakeContext context)
198-
{
199-
var buildSystem = context.BuildSystem();
200-
if (buildSystem.IsRunningOnAppVeyor)
201-
{
202-
return buildSystem.AppVeyor.Environment.PullRequest.IsPullRequest;
203-
}
204-
if (buildSystem.IsRunningOnTravisCI)
205-
{
206-
var value = buildSystem.TravisCI.Environment.Repository.PullRequest;
207-
return !string.IsNullOrWhiteSpace(value) && !string.Equals(value, false.ToString(), StringComparison.InvariantCultureIgnoreCase);
208-
}
209-
else if (buildSystem.IsRunningOnVSTS)
210-
{
211-
var value = context.EnvironmentVariable("SYSTEM_PULLREQUEST_ISFORK");
212-
return !string.IsNullOrWhiteSpace(value) && !string.Equals(value, false.ToString(), StringComparison.InvariantCultureIgnoreCase);
213-
}
214-
return false;
215-
}
216-
217201
private static bool IsBuildTagged(ICakeContext context)
218202
{
219203
var gitPath = context.Tools.Resolve(context.IsRunningOnWindows() ? "git.exe" : "git");

0 commit comments

Comments
 (0)