Skip to content

Commit 1dbf248

Browse files
committed
(build) publish docker images to GitHubPackages and DockerHub
1 parent 892a31f commit 1dbf248

File tree

5 files changed

+45
-26
lines changed

5 files changed

+45
-26
lines changed

.github/workflows/ci.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -269,9 +269,9 @@ jobs:
269269
name: nuget
270270
path: ${{ github.workspace }}/artifacts/packages/nuget
271271
-
272-
name: '[Test Artifacts]'
272+
name: '[Docker Build/Test/Publish]'
273273
shell: pwsh
274-
run: dotnet run/docker.dll --target=Docker --docker_dotnetversion=${{ matrix.targetFramework }} --docker_distro=${{ matrix.distro }}
274+
run: dotnet run/docker.dll --target=DockerPublish --docker_dotnetversion=${{ matrix.targetFramework }} --docker_distro=${{ matrix.distro }}
275275

276276
publish:
277277
name: Publish

build/docker/BuildLifetime.cs

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,20 +16,16 @@ public override void Setup(BuildContext context)
1616

1717
context.IsDockerOnLinux = context.DockerCustomCommand("info --format '{{.OSType}}'").First().Replace("'", "") == "linux";
1818

19-
var dockerRegistry = context.Argument("docker_registry", "github").ToLower();
2019
var dotnetVersion = context.Argument("docker_dotnetversion", "").ToLower();
2120
var dockerDistro = context.Argument("docker_distro", "").ToLower();
2221

2322
var versions = string.IsNullOrWhiteSpace(dotnetVersion) ? Constants.VersionsToBuild : new[] { dotnetVersion };
2423
var distros = string.IsNullOrWhiteSpace(dockerDistro) ? Constants.DockerDistrosToBuild : new[] { dockerDistro };
2524

26-
context.DockerRegistryPrefix = dockerRegistry == "github" ? Constants.GitHubContainerRegistry : Constants.DockerHubRegistry;
2725
context.Images = from version in versions
2826
from distro in distros
2927
select new DockerImage(distro, version);
3028

31-
context.Credentials = Credentials.GetCredentials(context, dockerRegistry);
32-
3329
context.StartGroup("Build Setup");
3430

3531
LogBuildInformation(context);

build/docker/Tasks/Docker.cs

Lines changed: 0 additions & 11 deletions
This file was deleted.

build/docker/Tasks/DockerPublish.cs

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,27 @@
22
using Cake.Common.Diagnostics;
33
using Cake.Frosting;
44
using Common.Utilities;
5+
using Docker.Utilities;
56

67
namespace Docker.Tasks
78
{
89
[TaskName(nameof(DockerPublish))]
910
[TaskDescription("Publish the docker images containing the GitVersion Tool")]
10-
[IsDependentOn(typeof(DockerTest))]
11+
[IsDependentOn(typeof(DockerPublishInternal))]
1112
public class DockerPublish : FrostingTask<BuildContext>
13+
{
14+
public override bool ShouldRun(BuildContext context)
15+
{
16+
var shouldRun = true;
17+
shouldRun &= context.ShouldRun(context.IsGitHubActionsBuild, $"{nameof(DockerPublish)} works only on GitHub Actions.");
18+
return shouldRun;
19+
}
20+
}
21+
22+
[TaskName(nameof(DockerPublishInternal))]
23+
[TaskDescription("Publish the docker images containing the GitVersion Tool")]
24+
[IsDependentOn(typeof(DockerTest))]
25+
public class DockerPublishInternal : FrostingTask<BuildContext>
1226
{
1327
public override bool ShouldRun(BuildContext context)
1428
{
@@ -22,6 +36,16 @@ public override bool ShouldRun(BuildContext context)
2236

2337
public override void Run(BuildContext context)
2438
{
39+
DockerPublish(context, DockerRegistry.GitHub);
40+
DockerPublish(context, DockerRegistry.DockerHub);
41+
}
42+
private static void DockerPublish(BuildContext context, DockerRegistry dockerRegistry)
43+
{
44+
context.Credentials = Credentials.GetCredentials(context, dockerRegistry);
45+
context.DockerRegistryPrefix = dockerRegistry == DockerRegistry.GitHub
46+
? Constants.GitHubContainerRegistry
47+
: Constants.DockerHubRegistry;
48+
2549
context.Information($"Docker image prefix: {context.DockerRegistryPrefix}");
2650
var username = context.Credentials?.Docker?.UserName;
2751
if (string.IsNullOrEmpty(username))

build/docker/Utilities/Credentials.cs

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,31 @@
11
using Cake.Common;
22
using Cake.Core;
3+
using Cake.Incubator.LoggingExtensions;
34
using Common.Utilities;
45

56
namespace Docker.Utilities
67
{
8+
public enum DockerRegistry
9+
{
10+
GitHub = 0,
11+
DockerHub = 1
12+
}
713
public class Credentials
814
{
915
public DockerCredentials? Docker { get; private set; }
10-
public static Credentials GetCredentials(ICakeContext context, string dockerRegistry) => new()
16+
public static Credentials GetCredentials(ICakeContext context, DockerRegistry dockerRegistry) => new()
1117
{
12-
Docker = dockerRegistry == "github"
13-
? new DockerCredentials(
14-
context.EnvironmentVariable("GITHUB_USERNAME"),
15-
context.EnvironmentVariable("GITHUB_TOKEN"))
16-
: new DockerCredentials(
17-
context.EnvironmentVariable("DOCKER_USERNAME"),
18-
context.EnvironmentVariable("DOCKER_PASSWORD"))
18+
Docker = dockerRegistry switch
19+
{
20+
DockerRegistry.GitHub =>
21+
new DockerCredentials(
22+
context.EnvironmentVariable("GITHUB_USERNAME"),
23+
context.EnvironmentVariable("GITHUB_TOKEN")),
24+
_ =>
25+
new DockerCredentials(
26+
context.EnvironmentVariable("DOCKER_USERNAME"),
27+
context.EnvironmentVariable("DOCKER_PASSWORD"))
28+
}
1929
};
2030
}
2131
}

0 commit comments

Comments
 (0)