11package com.liftric.code.artifact.repository
22
3+ import org.gradle.api.GradleException
34import org.gradle.api.Plugin
5+ import org.gradle.api.Project
46import org.gradle.api.artifacts.dsl.RepositoryHandler
57import org.gradle.api.artifacts.repositories.MavenArtifactRepository
68import org.gradle.api.initialization.Settings
@@ -12,22 +14,25 @@ import software.amazon.awssdk.services.codeartifact.CodeartifactClient
1214import software.amazon.awssdk.services.codeartifact.model.GetAuthorizationTokenResponse
1315import software.amazon.awssdk.services.codeartifact.model.GetRepositoryEndpointResponse
1416import software.amazon.awssdk.services.sts.StsClient
15- import java.net.URI
1617
1718private const val extensionName = " CodeArtifactRepository"
1819
19- abstract class CodeArtifactRepositoryPlugin : Plugin <Settings > {
20- override fun apply (settings : Settings ) {
21- val extension = settings.extensions.create<CodeArtifactRepositoryExtension >(extensionName)
20+ private lateinit var codeArtifact: CodeArtifact
21+ private lateinit var extension: CodeArtifactRepositoryExtension
2222
23- val codeArtifact = CodeArtifact (extension)
24-
25- fun RepositoryHandler.codeArtifact (domain : String? = null, repository : String ): MavenArtifactRepository = maven {
26- name = listOf (" CodeArtifact" , domain ? : extension.domain.get(), repository).joinToString(" " ) { it.capitalized() }
27- url = URI (codeArtifact.repositoryEndpointResponse(repository).repositoryEndpoint())
28- credentials {
29- username = " aws"
30- password = codeArtifact.authorizationTokenRepsponse().authorizationToken()
23+ abstract class CodeArtifactRepositoryPlugin : Plugin <Any > {
24+ override fun apply (scope : Any ) {
25+ when (scope) {
26+ is Settings -> {
27+ extension = scope.extensions.create(extensionName)
28+ codeArtifact = CodeArtifact (extension)
29+ }
30+ is Project -> {
31+ extension = scope.extensions.create(extensionName)
32+ codeArtifact = CodeArtifact (extension)
33+ }
34+ else -> {
35+ throw GradleException (" Should only get applied on Settings or Project" )
3136 }
3237 }
3338 }
@@ -40,7 +45,7 @@ class CodeArtifact(private val extension: CodeArtifactRepositoryExtension) {
4045 private val stsClient by lazy {
4146 StsClient .builder().apply {
4247 region(extension.region.get())
43- if (extension.shouldResolveCredentialsByEnvironment.get(). not ( )) {
48+ if (! extension.shouldResolveCredentialsByEnvironment.getOrElse( true )) {
4449 credentialsProvider {
4550 ProfileCredentialsProvider .create(extension.profile.get()).resolveCredentials()
4651 }
@@ -51,7 +56,7 @@ class CodeArtifact(private val extension: CodeArtifactRepositoryExtension) {
5156 private val codeArtifactClient by lazy {
5257 CodeartifactClient .builder().apply {
5358 region(extension.region.get())
54- if (extension.shouldResolveCredentialsByEnvironment.get(). not ( )) {
59+ if (! extension.shouldResolveCredentialsByEnvironment.getOrElse( true )) {
5560 credentialsProvider {
5661 ProfileCredentialsProvider .create(extension.profile.get()).resolveCredentials()
5762 }
@@ -63,7 +68,7 @@ class CodeArtifact(private val extension: CodeArtifactRepositoryExtension) {
6368 return codeArtifactClient.getAuthorizationToken {
6469 it.domain(extension.domain.get())
6570 it.domainOwner(account)
66- it.durationSeconds(extension.tokenExpiresIn.get( ))
71+ it.durationSeconds(extension.tokenExpiresIn.getOrElse( 1_800 ))
6772 }
6873 }
6974
@@ -80,3 +85,18 @@ class CodeArtifact(private val extension: CodeArtifactRepositoryExtension) {
8085inline fun Settings.codeArtifactRepository (configure : CodeArtifactRepositoryExtension .() -> Unit ) {
8186 extensions.getByType<CodeArtifactRepositoryExtension >().configure()
8287}
88+
89+ inline fun Project.codeArtifactRepository (configure : CodeArtifactRepositoryExtension .() -> Unit ) {
90+ extensions.getByType<CodeArtifactRepositoryExtension >().configure()
91+ }
92+
93+ fun RepositoryHandler.codeArtifact (repository : String ): MavenArtifactRepository = codeArtifact(extension.domain.get(), repository)
94+
95+ fun RepositoryHandler.codeArtifact (domain : String , repository : String ): MavenArtifactRepository = maven {
96+ setName(listOf (" CodeArtifact" , domain, repository).joinToString(" " ) { it.capitalized() })
97+ setUrl(codeArtifact.repositoryEndpointResponse(repository).repositoryEndpoint())
98+ credentials {
99+ username = " aws"
100+ password = codeArtifact.authorizationTokenRepsponse().authorizationToken()
101+ }
102+ }
0 commit comments