From a9bfb00bfbf3d4446f85cbd1ee8c571140e8080b Mon Sep 17 00:00:00 2001 From: Eliezer Graber Date: Sun, 31 Jul 2022 12:13:43 -0400 Subject: [PATCH] Create a plugin to add a github packages repo in settings (#2) --- utils-base/build.gradle.kts | 9 ++ .../GitHubPackagesRepositoryPlugin.kt | 85 +++++++++++++++++++ 2 files changed, 94 insertions(+) create mode 100644 utils-base/src/main/kotlin/com/eygraber/gradle/settings/GitHubPackagesRepositoryPlugin.kt diff --git a/utils-base/build.gradle.kts b/utils-base/build.gradle.kts index ffd68e6..17c4dab 100644 --- a/utils-base/build.gradle.kts +++ b/utils-base/build.gradle.kts @@ -6,6 +6,15 @@ plugins { id("com.eygraber.publish") } +gradlePlugin { + plugins { + create("githubPackagesRepository") { + id = "com.eygraber.github.packages.repository" + implementationClass = "com.eygraber.gradle.settings.GitHubPackagesRepositoryPlugin" + } + } +} + dependencies { implementation(libs.buildscript.ejson) implementation(libs.kotlinx.serialization.json) diff --git a/utils-base/src/main/kotlin/com/eygraber/gradle/settings/GitHubPackagesRepositoryPlugin.kt b/utils-base/src/main/kotlin/com/eygraber/gradle/settings/GitHubPackagesRepositoryPlugin.kt new file mode 100644 index 0000000..ed1a90c --- /dev/null +++ b/utils-base/src/main/kotlin/com/eygraber/gradle/settings/GitHubPackagesRepositoryPlugin.kt @@ -0,0 +1,85 @@ +package com.eygraber.gradle.settings + +import com.eygraber.gradle.repositories.gitHubPackages +import org.gradle.api.Action +import org.gradle.api.Plugin +import org.gradle.api.artifacts.dsl.RepositoryHandler +import org.gradle.api.artifacts.repositories.MavenArtifactRepository +import org.gradle.api.initialization.Settings +import org.gradle.internal.Actions +import org.gradle.kotlin.dsl.getByName +import java.io.File + +public abstract class GitHubPackagesRepositoryPlugin : Plugin { + public abstract class Extension { + public fun Settings.addTo( + pluginManagement: Boolean, + dependencyResolutionManagement: Boolean, + owner: String, + repo: String, + username: String, + password: String, + action: Action = Actions.doNothing() + ) { + ArrayList(2).apply { + if(pluginManagement) add(settings.pluginManagement.repositories) + + @Suppress("UnstableApiUsage") + if(dependencyResolutionManagement) add(settings.dependencyResolutionManagement.repositories) + }.forEach { handler -> + handler.gitHubPackages( + owner = owner, + repo = repo, + username = username, + password = password, + action = action + ) + } + } + + public fun Settings.addTo( + pluginManagement: Boolean, + dependencyResolutionManagement: Boolean, + owner: String, + repo: String, + username: String, + ejsonSecretsFile: File, + ejsonJsonKey: String = "github_packages_pat", + ejsonPrivateKey: String? = null, + ejsonPrivateKeyEnvVar: String = "EJSON_PRIVATE_KEY", + action: Action = Actions.doNothing() + ) { + ArrayList(2).apply { + if(pluginManagement) add(settings.pluginManagement.repositories) + + @Suppress("UnstableApiUsage") + if(dependencyResolutionManagement) add(settings.dependencyResolutionManagement.repositories) + }.forEach { handler -> + handler.gitHubPackages( + owner = owner, + repo = repo, + username = username, + ejsonSecretsFile = ejsonSecretsFile, + ejsonJsonKey = ejsonJsonKey, + ejsonPrivateKey = ejsonPrivateKey, + ejsonPrivateKeyEnvVar = ejsonPrivateKeyEnvVar, + action = action + ) + } + } + } + + override fun apply(target: Settings) { + target.extensions.create("gitHubPackagesRepository", Extension::class.java) + } +} + +public fun Settings.gitHubPackagesRepository( + action: Action +) { + action.execute( + extensions.getByName( + "gitHubPackagesRepository" + ) + ) +}