Skip to content

Commit d5ace0f

Browse files
committed
Refactor DSL to use vendor-neutral terminology
Authored-by: Leonhardt Koepsell <[email protected]>
1 parent 65da310 commit d5ace0f

File tree

24 files changed

+200
-193
lines changed

24 files changed

+200
-193
lines changed

CHANGELOG.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,12 @@ All notable changes to this project will be documented in this file.
99
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
1010
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
1111

12+
## [Unreleased]
13+
14+
### Added
15+
16+
- Refactor many parts of the DSL to use vendor-neutral terminology.
17+
1218
## [0.3.0] - 2025-04-24
1319

1420
### Added

README.md

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -33,13 +33,13 @@ import dev.codebandits.container.gradle.tasks.ContainerTask
3333
tasks {
3434
register<ContainerTask>("writeHello") {
3535
container.inputs.registryImage("alpine:latest")
36-
dockerPull { image = "alpine:latest" }
37-
dockerRun {
36+
pullImage { image = "alpine:latest" }
37+
runContainer {
3838
image = "alpine:latest"
3939
entrypoint = "sh"
40-
args = arrayOf("-c", "echo Hello from a container! > message.txt")
40+
cmd = listOf("-c", "echo Hello from a container! > message.txt")
4141
workdir = "/workdir"
42-
volumes = arrayOf(
42+
volumes = listOf(
4343
"${layout.projectDirectory}:/workdir",
4444
)
4545
}
@@ -56,40 +56,40 @@ import dev.codebandits.container.gradle.tasks.ContainerTask
5656
tasks {
5757
register<ContainerTask>("buildWithDocker") {
5858
inputs.file("Dockerfile")
59-
container.outputs.localImage("docker-build-image:latest")
60-
dockerPull {
59+
container.outputs.localImage("application:latest")
60+
pullImage {
6161
image = "docker:dind"
6262
}
63-
dockerRun {
63+
runContainer {
6464
image = "docker:dind"
6565
entrypoint = "docker"
66-
args = arrayOf("build", "-t", "docker-build-image:latest", ".")
66+
cmd = listOf("build", "-t", "application:latest", ".")
6767
workdir = "/workdir"
68-
volumes = arrayOf(
68+
volumes = listOf(
6969
"${layout.projectDirectory}:/workdir",
7070
"/var/run/docker.sock:/var/run/docker.sock:ro",
7171
)
7272
}
7373
doLast {
74-
container.outputs.captureLocalImage("docker-build-image:latest")
74+
container.outputs.captureLocalImage("application:latest")
7575
}
7676
}
7777

7878
register<ContainerTask>("buildImageWithPack") {
7979
inputs.file("index.html")
8080
inputs.file("project.toml")
8181
container.outputs.localImage("pack-build-image:latest")
82-
dockerPull {
82+
pullImage {
8383
image = "buildpacksio/pack:latest"
8484
}
85-
dockerRun {
85+
runContainer {
8686
image = "buildpacksio/pack:latest"
87-
args = arrayOf(
87+
cmd = listOf(
8888
"build", "pack-build-image:latest",
8989
"--builder", "paketobuildpacks/builder-jammy-base:latest",
9090
)
9191
workdir = "/workdir"
92-
volumes = arrayOf(
92+
volumes = listOf(
9393
"${layout.projectDirectory}:/workdir",
9494
"/var/run/docker.sock:/var/run/docker.sock:ro",
9595
)

examples/basic-groovy/build.gradle

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,24 +5,24 @@ plugins {
55
}
66

77
tasks.register('sayHello', ContainerTask) {
8-
dockerPull {
8+
pullImage {
99
it.image.set('alpine:latest')
1010
}
11-
dockerRun {
11+
runContainer {
1212
it.image.set('alpine:latest')
13-
it.args.set(['echo', 'Hello from a container!'] as String[])
13+
it.cmd.set(['echo', 'Hello from a container!'])
1414
}
1515
}
1616

1717
tasks.register('writeHello', ContainerTask) {
18-
dockerPull {
18+
pullImage {
1919
it.image.set('alpine:latest')
2020
}
21-
dockerRun {
21+
runContainer {
2222
it.image.set('alpine:latest')
2323
it.entrypoint.set('sh')
24-
it.args.set(['-c', "echo Hello from a container! > message.txt"] as String[])
24+
it.cmd.set(['-c', "echo Hello from a container! > message.txt"])
2525
it.workdir.set('/workdir')
26-
it.volumes.set(["${layout.projectDirectory}:/workdir"] as String[])
26+
it.volumes.set(["${layout.projectDirectory}:/workdir"])
2727
}
2828
}

examples/basic-kotlin/build.gradle.kts

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,25 +6,25 @@ plugins {
66

77
tasks {
88
register<ContainerTask>("sayHello") {
9-
dockerPull {
9+
pullImage {
1010
image = "alpine:latest"
1111
}
12-
dockerRun {
12+
runContainer {
1313
image = "alpine:latest"
14-
args = arrayOf("echo", "Hello from a container!")
14+
cmd = listOf("echo", "Hello from a container!")
1515
}
1616
}
1717

1818
register<ContainerTask>("writeHello") {
19-
dockerPull {
19+
pullImage {
2020
image = "alpine:latest"
2121
}
22-
dockerRun {
22+
runContainer {
2323
image = "alpine:latest"
2424
entrypoint = "sh"
25-
args = arrayOf("-c", "echo Hello from a container! > message.txt")
25+
cmd = listOf("-c", "echo Hello from a container! > message.txt")
2626
workdir = "/workdir"
27-
volumes = arrayOf(
27+
volumes = listOf(
2828
"${layout.projectDirectory}:/workdir",
2929
)
3030
}

examples/buildpacks/build.gradle.kts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,17 +10,17 @@ tasks {
1010
inputs.file("index.html")
1111
inputs.file("project.toml")
1212
container.outputs.localImage("my-image:latest")
13-
dockerPull {
13+
pullImage {
1414
image = "buildpacksio/pack:latest"
1515
}
16-
dockerRun {
16+
runContainer {
1717
image = "buildpacksio/pack:latest"
18-
args = arrayOf(
18+
cmd = listOf(
1919
"build", "my-image:latest",
2020
"--builder", "paketobuildpacks/builder-jammy-base:latest",
2121
)
2222
workdir = "/workdir"
23-
volumes = arrayOf(
23+
volumes = listOf(
2424
"${layout.projectDirectory}:/workdir",
2525
"/var/run/docker.sock:/var/run/docker.sock:ro",
2626
)

examples/dind-build/build.gradle.kts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,15 +9,15 @@ tasks {
99
register<ContainerTask>("buildImage") {
1010
inputs.file("Dockerfile")
1111
container.outputs.localImage("my-image:latest")
12-
dockerPull {
12+
pullImage {
1313
image = "docker:dind"
1414
}
15-
dockerRun {
15+
runContainer {
1616
image = "docker:dind"
1717
entrypoint = "docker"
18-
args = arrayOf("build", "-t", "my-image:latest", ".")
18+
cmd = listOf("build", "-t", "my-image:latest", ".")
1919
workdir = "/workdir"
20-
volumes = arrayOf(
20+
volumes = listOf(
2121
"${layout.projectDirectory}:/workdir",
2222
"/var/run/docker.sock:/var/run/docker.sock:ro",
2323
)

examples/input-output-chaining/build.gradle.kts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,15 +20,15 @@ tasks {
2020
register<ContainerTask>("buildImage") {
2121
inputs.file("Dockerfile")
2222
container.outputs.localImage("my-image:latest")
23-
dockerPull {
23+
pullImage {
2424
image = "docker:dind"
2525
}
26-
dockerRun {
26+
runContainer {
2727
image = "docker:dind"
2828
entrypoint = "docker"
29-
args = arrayOf("build", "-t", "my-image:latest", ".")
29+
cmd = listOf("build", "-t", "my-image:latest", ".")
3030
workdir = "/workdir"
31-
volumes = arrayOf(
31+
volumes = listOf(
3232
"${layout.projectDirectory}:/workdir",
3333
"/var/run/docker.sock:/var/run/docker.sock:ro",
3434
)

src/main/kotlin/dev/codebandits/container/gradle/image/Local.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import com.github.dockerjava.httpclient5.ApacheDockerHttpClient
88

99
internal object Local {
1010
internal fun getImageId(imageReference: String): String? {
11-
val dockerClient = Local.createClient()
11+
val dockerClient = Local.createDockerClient()
1212
try {
1313
val inspectImageResponse = dockerClient.inspectImageCmd(imageReference).exec()
1414
return inspectImageResponse.id
@@ -17,9 +17,9 @@ internal object Local {
1717
}
1818
}
1919

20-
internal fun createClient(dockerHost: String? = null): DockerClient {
20+
internal fun createDockerClient(containerHost: String? = null): DockerClient {
2121
val config = DefaultDockerClientConfig.createDefaultConfigBuilder()
22-
.let { it -> if (dockerHost == null) it else it.withDockerHost(dockerHost) }
22+
.let { it -> if (containerHost == null) it else it.withDockerHost(containerHost) }
2323
.build()
2424
val httpClient = ApacheDockerHttpClient.Builder().dockerHost(config.dockerHost).build()
2525
return DockerClientImpl.getInstance(config, httpClient)

src/main/kotlin/dev/codebandits/container/gradle/tasks/ContainerTask.kt

Lines changed: 22 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import dev.codebandits.container.gradle.image.Local
1111
import org.gradle.api.DefaultTask
1212
import org.gradle.api.GradleException
1313
import org.gradle.api.model.ObjectFactory
14+
import org.gradle.api.provider.ListProperty
1415
import org.gradle.api.provider.Property
1516
import org.gradle.api.tasks.Internal
1617
import org.gradle.api.tasks.TaskAction
@@ -29,35 +30,35 @@ public abstract class ContainerTask : DefaultTask() {
2930
}
3031
}
3132

32-
public open class DockerPullSpec(objects: ObjectFactory) {
33+
public open class PullImageSpec(objects: ObjectFactory) {
3334
public val image: Property<String> = objects.property(String::class.java)
34-
public val dockerHost: Property<String> = objects.property(String::class.java)
35+
public val containerHost: Property<String> = objects.property(String::class.java)
3536
}
3637

37-
public open class DockerRemoveSpec(objects: ObjectFactory) {
38+
public open class RemoveImageSpec(objects: ObjectFactory) {
3839
public val image: Property<String> = objects.property(String::class.java)
39-
public val dockerHost: Property<String> = objects.property(String::class.java)
40+
public val containerHost: Property<String> = objects.property(String::class.java)
4041
}
4142

42-
public open class DockerRunSpec(objects: ObjectFactory) {
43+
public open class RunContainerSpec(objects: ObjectFactory) {
4344
public val image: Property<String> = objects.property(String::class.java)
44-
public val volumes: Property<Array<String>> = objects.property(Array<String>::class.java).convention(emptyArray())
45+
public val volumes: ListProperty<String> = objects.listProperty(String::class.java).convention(emptyList())
4546
public val entrypoint: Property<String> = objects.property(String::class.java)
46-
public val args: Property<Array<String>> = objects.property(Array<String>::class.java).convention(emptyArray())
47+
public val cmd: ListProperty<String> = objects.listProperty(String::class.java).convention(emptyList())
4748
public val workdir: Property<String> = objects.property(String::class.java)
4849
public val user: Property<String> = objects.property(String::class.java)
4950
public val privileged: Property<Boolean> = objects.property(Boolean::class.java).convention(false)
5051
public val autoRemove: Property<Boolean> = objects.property(Boolean::class.java).convention(true)
51-
public val dockerHost: Property<String> = objects.property(String::class.java)
52+
public val containerHost: Property<String> = objects.property(String::class.java)
5253
}
5354

54-
public fun dockerPull(configure: DockerPullSpec.() -> Unit) {
55+
public fun pullImage(configure: PullImageSpec.() -> Unit) {
5556
steps.add(
5657
ExecutionStep(
5758
action = {
58-
val spec = DockerPullSpec(project.objects).apply(configure)
59-
val dockerHost = spec.dockerHost.orNull
60-
val dockerClient = Local.createClient(dockerHost)
59+
val spec = PullImageSpec(project.objects).apply(configure)
60+
val containerHost = spec.containerHost.orNull
61+
val dockerClient = Local.createDockerClient(containerHost)
6162

6263
dockerClient
6364
.pullImageCmd(spec.image.get())
@@ -68,13 +69,13 @@ public abstract class ContainerTask : DefaultTask() {
6869
)
6970
}
7071

71-
public fun dockerRemove(configure: DockerRemoveSpec.() -> Unit) {
72+
public fun removeImage(configure: RemoveImageSpec.() -> Unit) {
7273
steps.add(
7374
ExecutionStep(
7475
action = {
75-
val spec = DockerRemoveSpec(project.objects).apply(configure)
76-
val dockerHost = spec.dockerHost.orNull
77-
val dockerClient = Local.createClient(dockerHost)
76+
val spec = RemoveImageSpec(project.objects).apply(configure)
77+
val containerHost = spec.containerHost.orNull
78+
val dockerClient = Local.createDockerClient(containerHost)
7879

7980
dockerClient
8081
.removeImageCmd(spec.image.get())
@@ -84,13 +85,13 @@ public abstract class ContainerTask : DefaultTask() {
8485
)
8586
}
8687

87-
public fun dockerRun(configure: DockerRunSpec.() -> Unit) {
88+
public fun runContainer(configure: RunContainerSpec.() -> Unit) {
8889
steps.add(
8990
ExecutionStep(
9091
action = {
91-
val spec = DockerRunSpec(project.objects).apply(configure)
92-
val dockerHost = spec.dockerHost.orNull
93-
val dockerClient = Local.createClient(dockerHost)
92+
val spec = RunContainerSpec(project.objects).apply(configure)
93+
val containerHost = spec.containerHost.orNull
94+
val dockerClient = Local.createDockerClient(containerHost)
9495

9596
val hostConfig = HostConfig.newHostConfig()
9697
.withAutoRemove(spec.autoRemove.get())
@@ -99,7 +100,7 @@ public abstract class ContainerTask : DefaultTask() {
99100

100101
val createContainerCmd = dockerClient.createContainerCmd(spec.image.get())
101102
.withHostConfig(hostConfig)
102-
.withCmd(*spec.args.get())
103+
.withCmd(spec.cmd.get())
103104
.let { cmd -> spec.user.orNull?.let { user -> cmd.withUser(user) } ?: cmd }
104105
.let { cmd -> spec.entrypoint.orNull?.let { user -> cmd.withEntrypoint(user) } ?: cmd }
105106
.let { cmd -> spec.workdir.orNull?.let { user -> cmd.withWorkingDir(user) } ?: cmd }

src/testFeatures/kotlin/dev/codebandits/container/gradle/GroovySyntaxTest.kt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -33,16 +33,16 @@ class GroovySyntaxTest : GradleProjectTest() {
3333
3434
tasks.register("buildImage", ContainerTask) {
3535
container.outputs.localImage("$imageReference")
36-
dockerPull { it.image.set("docker:dind") }
37-
dockerRun {
36+
pullImage { it.image.set("docker:dind") }
37+
runContainer {
3838
it.image.set("docker:dind")
3939
it.entrypoint.set("docker")
40-
it.args.set(["build", "-t", "$imageReference", "."] as String[])
40+
it.cmd.set(["build", "-t", "$imageReference", "."])
4141
it.workdir.set("/workdir")
4242
it.volumes.set([
4343
"${'$'}{layout.projectDirectory}:/workdir",
4444
"/var/run/docker.sock:/var/run/docker.sock:ro",
45-
] as String[])
45+
])
4646
}
4747
doLast {
4848
container.outputs.captureLocalImage("$imageReference")

src/testFeatures/kotlin/dev/codebandits/container/gradle/DockerPullTest.kt renamed to src/testFeatures/kotlin/dev/codebandits/container/gradle/PullImageTest.kt

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,10 @@ import strikt.assertions.isNotNull
1111
import strikt.assertions.isTrue
1212
import java.util.*
1313

14-
class DockerPullTest : GradleProjectTest() {
14+
class PullImageTest : GradleProjectTest() {
1515

1616
@Test
17-
fun `dockerPull pulls the specified image`() {
17+
fun `pullImage pulls the specified image`() {
1818
removeImage("hello-world:latest")
1919

2020
buildGradleKtsFile.appendLine(
@@ -27,7 +27,7 @@ class DockerPullTest : GradleProjectTest() {
2727
2828
tasks {
2929
register<ContainerTask>("pullImage") {
30-
dockerPull {
30+
pullImage {
3131
image = "hello-world:latest"
3232
}
3333
}
@@ -49,7 +49,7 @@ class DockerPullTest : GradleProjectTest() {
4949
}
5050

5151
@Test
52-
fun `dockerPull fails when pulling an image that does not exist`() {
52+
fun `pullImage fails when pulling an image that does not exist`() {
5353
buildGradleKtsFile.appendLine(
5454
"""
5555
import dev.codebandits.container.gradle.tasks.ContainerTask
@@ -60,7 +60,7 @@ class DockerPullTest : GradleProjectTest() {
6060
6161
tasks {
6262
register<ContainerTask>("pullImageNotExist") {
63-
dockerPull {
63+
pullImage {
6464
image = "alpine:${UUID.randomUUID()}"
6565
}
6666
}

0 commit comments

Comments
 (0)