Skip to content

Commit b4a64c2

Browse files
committed
build: fix docker image output/manifest dirs
1 parent 80657a0 commit b4a64c2

3 files changed

Lines changed: 28 additions & 21 deletions

File tree

buildSrc/src/main/groovy/com/thoughtworks/go/build/docker/BuildDockerImageTask.groovy

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -29,10 +29,7 @@ import org.gradle.api.file.*
2929
import org.gradle.api.plugins.BasePlugin
3030
import org.gradle.api.provider.Property
3131
import org.gradle.api.provider.Provider
32-
import org.gradle.api.tasks.Input
33-
import org.gradle.api.tasks.InputFile
34-
import org.gradle.api.tasks.Internal
35-
import org.gradle.api.tasks.TaskAction
32+
import org.gradle.api.tasks.*
3633
import org.gradle.api.tasks.bundling.Zip
3734
import org.gradle.process.ExecOperations
3835

@@ -70,9 +67,10 @@ abstract class BuildDockerImageTask extends DefaultTask {
7067
@Input DistroVersion distroVersion
7168
@Input String tiniVersion
7269

73-
// We don't declare an output here, only an input. We dont want it to be cached.
74-
// Multiple tasks share dir from parent with unique tarballs per distribution, so they are not "owned" by the task.
75-
@Internal abstract DirectoryProperty getOutputDir()
70+
// We don't declare an output here and multiple tasks share dir from parent with unique tarballs per
71+
// distribution, so the dirs are not "owned" by the task.
72+
@Internal abstract DirectoryProperty getDistributionDir()
73+
@Internal final goVersions = project.goVersions as GoVersions
7674

7775
@Internal Closure templateHelper
7876
@Internal Closure verifyHelper
@@ -86,8 +84,6 @@ abstract class BuildDockerImageTask extends DefaultTask {
8684
private final boolean keepImages = project.hasProperty('dockerBuildKeepImages')
8785
private final String gitPush = project.findProperty('dockerGitPush')
8886

89-
private final goVersions = project.goVersions as GoVersions
90-
9187
BuildDockerImageTask() {
9288
dependsOn ':docker:initializeBuildx'
9389
group = BasePlugin.BUILD_GROUP
@@ -154,11 +150,11 @@ abstract class BuildDockerImageTask extends DefaultTask {
154150
logger.lifecycle("Building ${distro} image for ${distro.supportedArchitectures}. (Current build architecture is ${Architecture.current()}).")
155151

156152
// build image
157-
imageTarFile.parentFile.mkdirs()
153+
imageOciTarFile.parentFile.mkdirs()
158154
executeInGitRepo("docker", "buildx", "build",
159155
"--pull",
160156
"--platform", supportedPlatforms.join(","),
161-
"--output", "type=oci,dest=${imageTarFile}",
157+
"--output", "type=oci,dest=${imageOciTarFile}",
162158
"--progress=plain",
163159
".",
164160
"--tag", imageNameWithTag
@@ -266,9 +262,14 @@ abstract class BuildDockerImageTask extends DefaultTask {
266262
"v${goVersions.fullVersion}"
267263
}
268264

265+
@OutputFile
266+
Provider<RegularFile> getImageOciTarOutput() {
267+
distributionDir.map { it.file("gocd-${imageType.get().name()}-${dockerImageName}-v${goVersions.fullVersion}.tar") }
268+
}
269+
269270
@Internal
270-
File getImageTarFile() {
271-
outputDir.get().file("gocd-${imageType.get().name()}-${dockerImageName}-v${goVersions.fullVersion}.tar").asFile
271+
File getImageOciTarFile() {
272+
imageOciTarOutput.get().asFile
272273
}
273274

274275
void writeTemplateToFile(String templateFile, String outputFile) {

docker/gocd-agent/build.gradle

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -33,17 +33,19 @@ plugins {
3333
id 'base'
3434
}
3535

36+
def distributionsDir = layout.buildDirectory.dir("distributions")
37+
3638
subprojects {
3739
apply plugin: 'base'
38-
layout.buildDirectory = parent.layout.buildDirectory.dir("docker")
40+
layout.buildDirectory = parent.layout.buildDirectory.dir(project.name)
3941
def (distro, distroVersion) = Distro.fromProjectName(project.name)
4042

4143
def docker = tasks.register("docker", BuildDockerImageTask.class) { BuildDockerImageTask task ->
4244
task.configureFor(ImageType.agent)
4345
task.distro = distro
4446
task.distroVersion = distroVersion
4547
task.tiniVersion = project.versions.tini
46-
task.outputDir = parent.layout.buildDirectory.dir("docker")
48+
task.distributionDir = distributionsDir
4749

4850
def licenseSourceFile = rootProject.file("LICENSE")
4951

@@ -130,14 +132,15 @@ subprojects {
130132

131133
tasks.register('generateManifest') {
132134
def dockerTasks = subprojects.tasks*.named('docker') as Collection<TaskProvider<? extends BuildDockerImageTask>>
133-
def manifest = layout.buildDirectory.file("manifest.json")
135+
dependsOn(dockerTasks)
136+
def manifest = distributionsDir.map { it.file("manifest.json") }
134137
outputs.file(manifest)
135138

136139
doLast {
137140
def meta = []
138141
dockerTasks.collect { it.get() }.each { dockerTask ->
139142
meta << [
140-
file : "${dockerTask.imageTarFile.name}",
143+
file : "${dockerTask.imageOciTarFile.name}",
141144
format : 'oci',
142145
imageName: dockerTask.dockerImageName,
143146
tag : dockerTask.imageTag,

docker/gocd-server/build.gradle

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -33,17 +33,19 @@ plugins {
3333
id 'base'
3434
}
3535

36+
def distributionsDir = layout.buildDirectory.dir("distributions")
37+
3638
subprojects {
3739
apply plugin: 'base'
38-
layout.buildDirectory = parent.layout.buildDirectory.dir("docker")
40+
layout.buildDirectory = parent.layout.buildDirectory.dir(project.name)
3941
def (distro, distroVersion) = Distro.fromProjectName(project.name)
4042

4143
def docker = tasks.register("docker", BuildDockerImageTask.class) { BuildDockerImageTask task ->
4244
task.configureFor(ImageType.server)
4345
task.distro = distro
4446
task.distroVersion = distroVersion
4547
task.tiniVersion = project.versions.tini
46-
task.outputDir = parent.layout.buildDirectory.dir("docker")
48+
task.distributionDir = distributionsDir
4749

4850
def licenseSourceFile = rootProject.file("LICENSE")
4951

@@ -120,14 +122,15 @@ subprojects {
120122

121123
tasks.register('generateManifest') {
122124
def dockerTasks = subprojects.tasks*.named('docker') as Collection<TaskProvider<? extends BuildDockerImageTask>>
123-
def manifest = layout.buildDirectory.file("manifest.json")
125+
dependsOn(dockerTasks)
126+
def manifest = distributionsDir.map { it.file("manifest.json") }
124127
outputs.file(manifest)
125128

126129
doLast {
127130
def meta = []
128131
dockerTasks.collect { it.get() }.each { dockerTask ->
129132
meta << [
130-
file : "${dockerTask.imageTarFile.name}",
133+
file : "${dockerTask.imageOciTarFile.name}",
131134
format : 'oci',
132135
imageName: dockerTask.dockerImageName,
133136
tag : dockerTask.imageTag,

0 commit comments

Comments
 (0)