Skip to content

Commit 9017502

Browse files
author
Jan Gaebel
committed
feat(plugin): allow setting up in build and settings gradle file
1 parent dfaa59c commit 9017502

File tree

2 files changed

+41
-19
lines changed

2 files changed

+41
-19
lines changed

README.md

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
Convenience plugin to apply AWS CodeArtifact repositories to your Gradle project.
44

5-
Configure the plugin extension and then apply your repositories.
5+
Configure the plugin extension either in the settings.gradle.kts or build.gradle.kts and then apply your repositories.
66

77
```kotlin
88
plugins {
@@ -20,8 +20,10 @@ codeArtifactRepository {
2020
shouldResolveCredentialsByEnvironment.set(System.getenv("CI") != null)
2121
}
2222

23-
repositories {
24-
codeArtifact("my_repository")
25-
codeArtifact("my_other_domain", "my_other_repository")
23+
dependencyResolutionManagement {
24+
repositories {
25+
codeArtifact("my_repository")
26+
codeArtifact("my_other_domain", "my_other_repository")
27+
}
2628
}
2729
```

src/main/kotlin/com/liftric/code/artifact/repository/CodeArtifactRepositoryPlugin.kt

Lines changed: 35 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package com.liftric.code.artifact.repository
22

3+
import org.gradle.api.GradleException
34
import org.gradle.api.Plugin
5+
import org.gradle.api.Project
46
import org.gradle.api.artifacts.dsl.RepositoryHandler
57
import org.gradle.api.artifacts.repositories.MavenArtifactRepository
68
import org.gradle.api.initialization.Settings
@@ -12,22 +14,25 @@ import software.amazon.awssdk.services.codeartifact.CodeartifactClient
1214
import software.amazon.awssdk.services.codeartifact.model.GetAuthorizationTokenResponse
1315
import software.amazon.awssdk.services.codeartifact.model.GetRepositoryEndpointResponse
1416
import software.amazon.awssdk.services.sts.StsClient
15-
import java.net.URI
1617

1718
private 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) {
8085
inline 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

Comments
 (0)