@@ -16,6 +16,7 @@ import io.netty.buffer.UnpooledByteBufAllocator
1616import io.netty.channel.ChannelOption
1717import io.netty.util.concurrent.FastThreadLocal
1818import org.gradle.api.Action
19+ import org.gradle.api.NamedDomainObjectList
1920import org.gradle.api.Project
2021import org.gradle.api.artifacts.ResolvableDependencies
2122import org.gradle.api.artifacts.dsl.RepositoryHandler
@@ -142,7 +143,7 @@ private const val PORT_HTTP_HEADER_NAME = "port"
142143internal fun OciRegistriesService (
143144 buildServiceRegistry : BuildServiceRegistry ,
144145 name : String ,
145- registries : List <OciRegistry >,
146+ registries : NamedDomainObjectList <OciRegistry >,
146147 repositoryPort : Provider <Int >,
147148 imageMapping : OciImageMappingImpl ,
148149): OciRegistriesService {
@@ -154,24 +155,26 @@ internal fun OciRegistriesService(
154155internal abstract class OciRegistriesService : BuildService <BuildServiceParameters .None >, AutoCloseable {
155156 private var state: State ? = null
156157
157- sealed class State {
158+ sealed class State (val registries : NamedDomainObjectList <OciRegistry >) {
159+
158160 class Initialized (
159- val registries : List <OciRegistry >,
161+ registries : NamedDomainObjectList <OciRegistry >,
160162 val repositoryPort : Provider <Int >,
161163 val imageMapping : OciImageMappingImpl ,
162- ) : State()
164+ ) : State(registries )
163165
164166 class Started (
167+ registries : NamedDomainObjectList <OciRegistry >,
165168 val httpServers : List <DisposableServer >,
166- ) : State()
169+ ) : State(registries )
167170
168- object NoRegistries : State()
171+ class NoRegistries ( registries : NamedDomainObjectList < OciRegistry >) : State(registries )
169172
170- object Closed : State()
173+ class Closed ( registries : NamedDomainObjectList < OciRegistry >) : State(registries )
171174 }
172175
173176 fun init (
174- registries : List <OciRegistry >,
177+ registries : NamedDomainObjectList <OciRegistry >,
175178 repositoryPort : Provider <Int >,
176179 imageMapping : OciImageMappingImpl ,
177180 ) = synchronized(this ) {
@@ -181,19 +184,22 @@ internal abstract class OciRegistriesService : BuildService<BuildServiceParamete
181184 state = State .Initialized (registries, repositoryPort, imageMapping)
182185 }
183186
187+ val registries: NamedDomainObjectList <OciRegistry > get() = state?.registries
188+ ? : throw IllegalStateException (" OciRegistriesService.registries must be called after init" )
189+
184190 fun start () = synchronized(this ) {
185191 val currentState = state
186192 ? : throw IllegalStateException (" OciRegistriesService.start must be called after init" )
187193 if (currentState !is State .Initialized ) {
188194 return
189195 }
190196 if (currentState.registries.isEmpty()) {
191- state = State .NoRegistries
197+ state = State .NoRegistries (currentState.registries)
192198 } else {
193199 val loopResources = OciLoopResources .acquire()
194200 val httpClient = OciRegistryHttpClient .acquire()
195201 val httpServers = mutableListOf<DisposableServer >()
196- state = State .Started (httpServers)
202+ state = State .Started (currentState.registries, httpServers)
197203 val redirectServer = startRedirectServer(currentState.repositoryPort.get(), loopResources)
198204 if (redirectServer != null ) {
199205 httpServers + = redirectServer
@@ -268,7 +274,7 @@ internal abstract class OciRegistriesService : BuildService<BuildServiceParamete
268274 OciRegistryHttpClient .release()
269275 OciLoopResources .release()
270276 }
271- state = State .Closed
277+ state = State .Closed (currentState.registries)
272278 }
273279}
274280
@@ -287,8 +293,7 @@ internal fun setupSettingsOciRegistries(
287293}
288294
289295internal fun setupProjectOciRegistries (project : Project , registries : OciRegistries , imageMapping : OciImageMappingImpl ) {
290- val settingsRegistriesService =
291- project.gradle.sharedServices.registrations.findByName(SERVICE_BASE_NAME )?.service?.get() as ? OciRegistriesService
296+ val settingsRegistriesService = project.settingsRegistriesService
292297 val registriesService = OciRegistriesService (
293298 project.gradle.sharedServices,
294299 " $SERVICE_BASE_NAME -${project.path} " ,
@@ -306,5 +311,8 @@ internal fun setupProjectOciRegistries(project: Project, registries: OciRegistri
306311 }
307312}
308313
314+ internal val Project .settingsRegistriesService: OciRegistriesService ?
315+ get() = project.gradle.sharedServices.registrations.findByName(SERVICE_BASE_NAME )?.service?.get() as ? OciRegistriesService
316+
309317private fun ResolvableDependencies.resolvesOciImages () =
310318 attributes.getAttribute(DISTRIBUTION_TYPE_ATTRIBUTE ) in OCI_IMAGE_DISTRIBUTION_TYPES
0 commit comments