-
Notifications
You must be signed in to change notification settings - Fork 24
/
Copy pathBuild.Base.cs
106 lines (93 loc) · 3.11 KB
/
Build.Base.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
using System;
using System.Linq;
using Nuke.Common;
using Nuke.Common.ProjectModel;
using static Nuke.Common.EnvironmentInfo;
using static Nuke.Common.IO.FileSystemTasks;
using static Nuke.Common.IO.PathConstruction;
using static Nuke.Docker.DockerTasks;
using Nuke.Docker;
using Nuke.Common.Tooling;
using System.Collections.Generic;
partial class Build : NukeBuild
{
[Parameter("Docker image sitecore version")]
public readonly string BaseSitecoreVersion = "9.2.0";
// Docker image naming
[Parameter("Docker image prefix for Sitecore base")]
readonly string BaseImagePrefix = "sitecore-base-";
private string[] BaseNames = new string[]
{
"openjdk",
"sitecore",
"solr-builder",
"redis"
};
private string BaseFullImageName(string name) => string.IsNullOrEmpty(BuildVersion) ?
$"{RepoImagePrefix}/{BaseImageName(name)}" :
$"{RepoImagePrefix}/{BaseImageName(name)}-{BuildVersion}";
private string BaseImageName(string name) => $"{BaseNakedImageName(name)}:{BaseSitecoreVersion}";
private string BaseNakedImageName(string name) => $"{BaseImagePrefix}{name}";
private IEnumerable<string> BaseRepositoryNames => BaseNames.Select(BaseNakedImageName);
Target BaseOpenJdk => _ => _
.Executes(() =>
{
DockerBuild(x => x
.SetPath(".")
.SetFile("base/openjdk/Dockerfile")
.SetTag(BaseImageName("openjdk"))
);
});
Target BaseSitecore => _ => _
.Executes(() =>
{
DockerBuild(x => x
.SetPath(".")
.SetFile("base/sitecore/Dockerfile")
.SetTag(BaseImageName("sitecore"))
);
});
Target BaseSolrBuilder => _ => _
.DependsOn(BaseSitecore)
.Executes(() =>
{
var baseImage = BaseImageName("sitecore");
DockerBuild(x => x
.SetPath(".")
.SetFile("base/solr-builder/Dockerfile")
.SetTag(BaseImageName("solr-builder"))
.SetBuildArg(new string[] {
$"BASE_IMAGE={baseImage}"
})
);
});
Target BaseRedis => _ => _
.Executes(() =>
{
DockerBuild(x => x
.SetPath(".")
.SetFile("base/redis/Dockerfile")
.SetTag(BaseImageName("redis"))
);
});
Target Base => _ => _
.DependsOn(BaseOpenJdk, BaseSitecore);
Target PushBase => _ => _
.Requires(() => !string.IsNullOrEmpty(RepoImagePrefix))
.OnlyWhenDynamic(() => HasGitTag() || ForcePush)
.Executes(() => {
foreach (var name in BaseNames)
{
PushBaseImage(name);
}
});
private void PushBaseImage(string name)
{
var source = BaseImageName(name);
var target = BaseFullImageName(name);
DockerTasks.DockerImageTag(x => x
.SetSourceImage(source)
.SetTargetImage(target));
DockerTasks.DockerImagePush(x => x.SetName(target));
}
}