@@ -3,11 +3,7 @@ package io.github.sgpublic
33import com.bmuschko.gradle.docker.DockerRemoteApiPlugin
44import com.bmuschko.gradle.docker.tasks.image.DockerBuildImage
55import com.bmuschko.gradle.docker.tasks.image.DockerPushImage
6- import io.github.sgpublic.tasks.CudaDockerfile
7- import io.github.sgpublic.tasks.PlaywrightDockerfile
8- import io.github.sgpublic.tasks.PoetryDockerfile
9- import io.github.sgpublic.tasks.PythonVersions
10- import io.github.sgpublic.tasks.CodaVersions
6+ import io.github.sgpublic.tasks.*
117import io.github.sgpublic.utils.*
128import org.gradle.api.Plugin
139import org.gradle.api.Project
@@ -36,7 +32,7 @@ class DockerPlugin: Plugin<Project> {
3632 " buildPoetry${simplyVersion}${debianVer.name.capitalized()} Image" ,
3733 DockerBuildImage ::class .java
3834 ) {
39- group = " python"
35+ group = " python${simplyVersion} "
4036 inputDir.set(buildDir(" poetry" ))
4137 buildArgs.putAll(mapOf (
4238 " PYTHON_VERSION" to pyFullVer,
@@ -56,7 +52,7 @@ class DockerPlugin: Plugin<Project> {
5652 " pushPoetry${simplyVersion}${debianVer.name.capitalized()} Image" ,
5753 DockerPushImage ::class .java
5854 ) {
59- group = " python"
55+ group = " python${simplyVersion} "
6056 dependsOn(buildPoetry)
6157 images.addAll(tagsPoetry)
6258 upToDateWhenTagExist(DOCKER_NAMESPACE , DOCKER_REPOSITORY , tagsPoetry.last())
@@ -70,7 +66,7 @@ class DockerPlugin: Plugin<Project> {
7066 " buildPlaywright${simplyVersion}${debianVer.name.capitalized()} Image" ,
7167 DockerBuildImage ::class .java
7268 ) {
73- group = " python"
69+ group = " python${simplyVersion} "
7470 mustRunAfter(buildPoetry)
7571
7672 buildArgs.putAll(mapOf (
@@ -92,7 +88,7 @@ class DockerPlugin: Plugin<Project> {
9288 " pushPlaywright${simplyVersion}${debianVer.name.capitalized()} Image" ,
9389 DockerPushImage ::class .java
9490 ) {
95- group = " python"
91+ group = " python${simplyVersion} "
9692 dependsOn(buildPlaywright)
9793 images.addAll(tagsPlaywright)
9894 upToDateWhenTagExist(DOCKER_NAMESPACE , DOCKER_REPOSITORY , tagsPlaywright.last())
@@ -115,24 +111,28 @@ class DockerPlugin: Plugin<Project> {
115111 val dockerCreateCudaDockerfile = target.tasks.register(" cudaDockerfile" , CudaDockerfile ::class .java) {
116112 destFile.set(buildFile(" cuda/Dockerfile" ))
117113 }
114+ val dockerCreateCudnnDockerfile = target.tasks.register(" cudnnDockerfile" , CudnnDockerfile ::class .java) {
115+ destFile.set(buildFile(" cudnn/Dockerfile" ))
116+ }
118117 target.tasks.register(" cudaVersions" , CodaVersions ::class .java)
119118
120119 for ((cudaMinorVer, cudaInfo) in target.CudaVersionsInfo ().versions) {
121120 val simplyCudaMinorVer = cudaMinorVer.replace(" ." , " " )
122121 val debCudaMinorVer = cudaMinorVer.replace(" ." , " -" )
123- for ((debianVer, cudaFullVer) in cudaInfo) {
122+ val cudaMajorVer = debCudaMinorVer.split(" -" )[0 ]
123+ for ((debianVer, cudaFullVer) in cudaInfo.debian) {
124124 for ((pyMinorVer, pyInfo) in target.PythonVersionsInfo ().versions) {
125125 val simplePyMinorVer = pyMinorVer.replace(" ." , " " )
126126 val pyFullVer = pyInfo[debianVer] ? : continue
127- val tagsPoetry = listOf (
127+ val cudaPoetryTags = listOf (
128128 " ${DOCKER_TAG } :$pyMinorVer -$debianVer -cuda$cudaMinorVer " ,
129129 " ${DOCKER_TAG } :${pyFullVer} -$debianVer -cuda$cudaFullVer " ,
130130 )
131131 val buildCudaPoetry = target.tasks.register(
132132 " buildCuda${simplyCudaMinorVer} Poetry${simplePyMinorVer}${debianVer.name.capitalized()} Image" ,
133133 DockerBuildImage ::class .java
134134 ) {
135- group = " cuda"
135+ group = " cuda${simplyCudaMinorVer} "
136136 inputDir.set(buildDir(" cuda" ))
137137 buildArgs.putAll(mapOf (
138138 " PYTHON_VERSION" to pyFullVer,
@@ -142,19 +142,19 @@ class DockerPlugin: Plugin<Project> {
142142 " CUDA_VERSION" to cudaFullVer,
143143 " CUDA_MINOR_VERSION" to debCudaMinorVer,
144144 ))
145- images.addAll(tagsPoetry )
145+ images.addAll(cudaPoetryTags )
146146 dependsOn(dockerCreateCudaDockerfile)
147147 dockerFile.set(dockerCreateCudaDockerfile.get().destFile)
148- upToDateWhenTagExist(DOCKER_NAMESPACE , DOCKER_REPOSITORY , tagsPoetry .last())
148+ upToDateWhenTagExist(DOCKER_NAMESPACE , DOCKER_REPOSITORY , cudaPoetryTags .last())
149149 }
150150 val pushCudaPoetry = target.tasks.register(
151151 " pushCuda${simplyCudaMinorVer} Poetry${simplePyMinorVer}${debianVer.name.capitalized()} Image" ,
152152 DockerPushImage ::class .java
153153 ) {
154- group = " cuda"
154+ group = " cuda${simplyCudaMinorVer} "
155155 dependsOn(buildCudaPoetry)
156- images.addAll(tagsPoetry )
157- upToDateWhenTagExist(DOCKER_NAMESPACE , DOCKER_REPOSITORY , tagsPoetry .last())
156+ images.addAll(cudaPoetryTags )
157+ upToDateWhenTagExist(DOCKER_NAMESPACE , DOCKER_REPOSITORY , cudaPoetryTags .last())
158158 }
159159
160160 val tagsPlaywright = listOf (
@@ -165,7 +165,7 @@ class DockerPlugin: Plugin<Project> {
165165 " buildCuda${simplyCudaMinorVer} Playwright${simplePyMinorVer}${debianVer.name.capitalized()} Image" ,
166166 DockerBuildImage ::class .java
167167 ) {
168- group = " cuda"
168+ group = " cuda${simplyCudaMinorVer} "
169169 buildArgs.putAll(mapOf (
170170 " PYTHON_VERSION" to pyFullVer,
171171 " DEBIAN_VERSION" to " $debianVer " ,
@@ -184,7 +184,7 @@ class DockerPlugin: Plugin<Project> {
184184 " pushCuda${simplyCudaMinorVer} Playwright${simplePyMinorVer}${debianVer.name.capitalized()} Image" ,
185185 DockerPushImage ::class .java
186186 ) {
187- group = " cuda"
187+ group = " cuda${simplyCudaMinorVer} "
188188 dependsOn(buildCudaPlaywright)
189189 images.addAll(tagsPlaywright)
190190 upToDateWhenTagExist(DOCKER_NAMESPACE , DOCKER_REPOSITORY , tagsPlaywright.last())
@@ -194,6 +194,83 @@ class DockerPlugin: Plugin<Project> {
194194 pushCudaPoetry.get().enabled = false
195195 pushCudaPlaywright.get().enabled = false
196196 }
197+
198+ for ((cudnnMajorVer, cudnnFullVer) in cudaInfo.cudnn) {
199+ val cudnnPoetryTags = listOf (
200+ " ${DOCKER_TAG } :$pyMinorVer -$debianVer -cuda$cudaMinorVer -cudnn$cudnnMajorVer " ,
201+ " ${DOCKER_TAG } :${pyFullVer} -$debianVer -cuda$cudaFullVer -cudnn$cudnnMajorVer " ,
202+ )
203+ val buildCudnnPoetry = target.tasks.register(
204+ " buildCuda${simplyCudaMinorVer} Cudnn${cudnnMajorVer} Poetry${simplePyMinorVer}${debianVer.name.capitalized()} Image" ,
205+ DockerBuildImage ::class .java
206+ ) {
207+ group = " cudnn${cudnnMajorVer} -${simplyCudaMinorVer} "
208+ inputDir.set(buildDir(" cudnn" ))
209+ buildArgs.putAll(mapOf (
210+ " PYTHON_VERSION" to pyFullVer,
211+ " DEBIAN_VERSION" to " $debianVer " ,
212+ " CUDA_VERSION" to cudaFullVer,
213+ " FLAVOR" to " " ,
214+ " CUDNN_VERSION" to cudnnFullVer,
215+ " CUDNN_MAJOR_VERSION" to cudnnMajorVer,
216+ " CUDA_MAJOR_VERSION" to cudaMajorVer,
217+ ))
218+ images.addAll(cudnnPoetryTags)
219+ mustRunAfter(buildCudaPoetry)
220+ dependsOn(dockerCreateCudnnDockerfile)
221+ dockerFile.set(dockerCreateCudnnDockerfile.get().destFile)
222+ upToDateWhenTagExist(DOCKER_NAMESPACE , DOCKER_REPOSITORY , cudnnPoetryTags.last())
223+ }
224+ val pushCudnnPoetry = target.tasks.register(
225+ " pushCuda${simplyCudaMinorVer} Cudnn${cudnnMajorVer} Poetry${simplePyMinorVer}${debianVer.name.capitalized()} Image" ,
226+ DockerPushImage ::class .java
227+ ) {
228+ group = " cudnn${cudnnMajorVer} -${simplyCudaMinorVer} "
229+ dependsOn(buildCudnnPoetry)
230+ images.addAll(cudnnPoetryTags)
231+ upToDateWhenTagExist(DOCKER_NAMESPACE , DOCKER_REPOSITORY , cudnnPoetryTags.last())
232+ }
233+
234+ val cudnnPlaywrightTags = listOf (
235+ " ${DOCKER_TAG } :${pyMinorVer} -${debianVer} -playwright-cuda$cudaMinorVer " ,
236+ " ${DOCKER_TAG } :${pyFullVer} -${debianVer} -playwright-cuda$cudaFullVer " ,
237+ )
238+ val buildCudnnPlaywright = target.tasks.register(
239+ " buildCuda${simplyCudaMinorVer} Cudnn${cudnnMajorVer} Playwright${simplePyMinorVer}${debianVer.name.capitalized()} Image" ,
240+ DockerBuildImage ::class .java
241+ ) {
242+ group = " cudnn${cudnnMajorVer} -${simplyCudaMinorVer} "
243+ buildArgs.putAll(mapOf (
244+ " PYTHON_VERSION" to pyFullVer,
245+ " DEBIAN_VERSION" to " $debianVer " ,
246+ " CUDA_VERSION" to cudaFullVer,
247+ " FLAVOR" to " -playwright" ,
248+ " CUDNN_VERSION" to cudnnFullVer,
249+ " CUDNN_MAJOR_VERSION" to cudnnMajorVer,
250+ " CUDA_MAJOR_VERSION" to cudaMajorVer,
251+ ))
252+ inputDir.set(buildDir(" cudnn" ))
253+ images.addAll(cudnnPlaywrightTags)
254+ mustRunAfter(buildCudaPlaywright)
255+ dependsOn(dockerCreateCudnnDockerfile)
256+ dockerFile.set(dockerCreateCudnnDockerfile.get().destFile)
257+ upToDateWhenTagExist(DOCKER_NAMESPACE , DOCKER_REPOSITORY , cudnnPoetryTags.last())
258+ }
259+ val pushCudnnPlaywright = target.tasks.register(
260+ " pushCuda${simplyCudaMinorVer} Cudnn${cudnnMajorVer} Playwright${simplePyMinorVer}${debianVer.name.capitalized()} Image" ,
261+ DockerPushImage ::class .java
262+ ) {
263+ group = " cuda${simplyCudaMinorVer} "
264+ dependsOn(buildCudnnPlaywright)
265+ images.addAll(cudnnPoetryTags)
266+ upToDateWhenTagExist(DOCKER_NAMESPACE , DOCKER_REPOSITORY , cudnnPoetryTags.last())
267+ }
268+
269+ if (target.DOCKER_TOKEN == null ) {
270+ pushCudnnPoetry.get().enabled = false
271+ pushCudnnPlaywright.get().enabled = false
272+ }
273+ }
197274 }
198275 }
199276 }
0 commit comments