diff --git a/.github/workflows/bindings-server.main.kts b/.github/workflows/bindings-server.main.kts index d9b7eece08..d4a5f40b86 100755 --- a/.github/workflows/bindings-server.main.kts +++ b/.github/workflows/bindings-server.main.kts @@ -97,6 +97,16 @@ workflow( cleanMavenLocal() + run( + name = "Execute the script using the bindings from the server with v1 route", + command = """ + mv .github/workflows/test-script-consuming-jit-bindings-v1.main.do-not-compile.kts .github/workflows/test-script-consuming-jit-bindings-v1.main.kts + .github/workflows/test-script-consuming-jit-bindings-v1.main.kts + """.trimIndent(), + ) + + cleanMavenLocal() + run( name = "Execute the script using bindings but without dependency on library", command = """ diff --git a/.github/workflows/bindings-server.yaml b/.github/workflows/bindings-server.yaml index 308fa2749d..edba927c9b 100644 --- a/.github/workflows/bindings-server.yaml +++ b/.github/workflows/bindings-server.yaml @@ -74,46 +74,54 @@ jobs: name: 'Clean Maven Local to fetch required POMs again' run: 'rm -rf ~/.m2/repository/' - id: 'step-7' + name: 'Execute the script using the bindings from the server with v1 route' + run: |- + mv .github/workflows/test-script-consuming-jit-bindings-v1.main.do-not-compile.kts .github/workflows/test-script-consuming-jit-bindings-v1.main.kts + .github/workflows/test-script-consuming-jit-bindings-v1.main.kts + - id: 'step-8' + name: 'Clean Maven Local to fetch required POMs again' + run: 'rm -rf ~/.m2/repository/' + - id: 'step-9' name: 'Execute the script using bindings but without dependency on library' run: |- mv .github/workflows/test-served-bindings-depend-on-library.main.do-not-compile.kts .github/workflows/test-served-bindings-depend-on-library.main.kts .github/workflows/test-served-bindings-depend-on-library.main.kts - - id: 'step-8' + - id: 'step-10' name: 'Install Kotlin 1.9.0' uses: 'fwilhe2/setup-kotlin@v1' with: version: '1.9.0' - - id: 'step-9' + - id: 'step-11' name: 'Clean Maven Local to fetch required POMs again' run: 'rm -rf ~/.m2/repository/' - - id: 'step-10' + - id: 'step-12' name: 'Execute the script using the bindings from the server, using older Kotlin (1.9.0) as consumer' run: |2- cp .github/workflows/test-script-consuming-jit-bindings.main.kts .github/workflows/test-script-consuming-jit-bindings-too-old-kotlin.main.kts (.github/workflows/test-script-consuming-jit-bindings-too-old-kotlin.main.kts || true) >> output.txt 2>&1 grep "was compiled with an incompatible version of Kotlin" output.txt - - id: 'step-11' + - id: 'step-13' name: 'Install Kotlin 2.0.0' uses: 'fwilhe2/setup-kotlin@v1' with: version: '2.0.0' - - id: 'step-12' + - id: 'step-14' name: 'Clean Maven Local to fetch required POMs again' run: 'rm -rf ~/.m2/repository/' - - id: 'step-13' + - id: 'step-15' name: 'Execute the script using the bindings from the server, using older Kotlin (2.0.0) as consumer' run: |- cp .github/workflows/test-script-consuming-jit-bindings.main.kts .github/workflows/test-script-consuming-jit-bindings-older-kotlin.main.kts .github/workflows/test-script-consuming-jit-bindings-older-kotlin.main.kts - - id: 'step-14' + - id: 'step-16' name: 'Compile a Gradle project using the bindings from the server' run: |- cd .github/workflows/test-gradle-project-using-bindings-server ./gradlew build - - id: 'step-15' + - id: 'step-17' name: 'Fetch maven-metadata.xml for top-level action' run: 'curl --fail http://localhost:8080/actions/checkout/maven-metadata.xml | grep ''v4''' - - id: 'step-16' + - id: 'step-18' name: 'Fetch maven-metadata.xml for nested action' run: 'curl --fail http://localhost:8080/actions/cache__save/maven-metadata.xml | grep ''v4''' deploy: diff --git a/.github/workflows/test-script-consuming-jit-bindings-v1.main.do-not-compile.kts b/.github/workflows/test-script-consuming-jit-bindings-v1.main.do-not-compile.kts new file mode 100755 index 0000000000..0104863de3 --- /dev/null +++ b/.github/workflows/test-script-consuming-jit-bindings-v1.main.do-not-compile.kts @@ -0,0 +1,33 @@ +#!/usr/bin/env kotlin +@file:Repository("https://repo.maven.apache.org/maven2/") +@file:DependsOn("io.github.typesafegithub:github-workflows-kt:1.13.0") + +@file:Repository("http://localhost:8080/v1") + +// Regular, top-level action. +@file:DependsOn("actions:checkout:v4") + +// Nested action. +@file:DependsOn("gradle:actions__setup-gradle:v3") + +// Using specific version. +@file:DependsOn("actions:cache:v3.3.3") + +// Always untyped action. +@file:DependsOn("typesafegithub:always-untyped-action-for-tests:v1") + +import io.github.typesafegithub.workflows.actions.actions.Cache +import io.github.typesafegithub.workflows.actions.actions.Checkout +import io.github.typesafegithub.workflows.actions.actions.Checkout_Untyped +import io.github.typesafegithub.workflows.actions.gradle.ActionsSetupGradle +import io.github.typesafegithub.workflows.actions.typesafegithub.AlwaysUntypedActionForTests_Untyped + +println(Checkout_Untyped(fetchTags_Untyped = "false")) +println(Checkout(fetchTags = false)) +println(Checkout(fetchTags_Untyped = "false")) +println(AlwaysUntypedActionForTests_Untyped(foobar_Untyped = "baz")) +println(ActionsSetupGradle()) +println(Cache(path = listOf("some-path"), key = "some-key")) + +// Ensure that 'copy(...)' method is exposed. +Checkout(fetchTags = false).copy(fetchTags = true) diff --git a/action-binding-generator/api/action-binding-generator.api b/action-binding-generator/api/action-binding-generator.api index 76660945c9..1073480181 100644 --- a/action-binding-generator/api/action-binding-generator.api +++ b/action-binding-generator/api/action-binding-generator.api @@ -72,8 +72,8 @@ public final class io/github/typesafegithub/workflows/actionbindinggenerator/gen } public final class io/github/typesafegithub/workflows/actionbindinggenerator/generation/GenerationKt { - public static final fun generateBinding (Lio/github/typesafegithub/workflows/actionbindinggenerator/domain/ActionCoords;Lio/github/typesafegithub/workflows/actionbindinggenerator/domain/MetadataRevision;Lio/github/typesafegithub/workflows/actionbindinggenerator/metadata/Metadata;Lkotlin/Pair;)Ljava/util/List; - public static synthetic fun generateBinding$default (Lio/github/typesafegithub/workflows/actionbindinggenerator/domain/ActionCoords;Lio/github/typesafegithub/workflows/actionbindinggenerator/domain/MetadataRevision;Lio/github/typesafegithub/workflows/actionbindinggenerator/metadata/Metadata;Lkotlin/Pair;ILjava/lang/Object;)Ljava/util/List; + public static final fun generateBinding (Lio/github/typesafegithub/workflows/actionbindinggenerator/domain/ActionCoords;Lio/github/typesafegithub/workflows/actionbindinggenerator/versioning/BindingVersion;Lio/github/typesafegithub/workflows/actionbindinggenerator/domain/MetadataRevision;Lio/github/typesafegithub/workflows/actionbindinggenerator/metadata/Metadata;Lkotlin/Pair;)Ljava/util/List; + public static synthetic fun generateBinding$default (Lio/github/typesafegithub/workflows/actionbindinggenerator/domain/ActionCoords;Lio/github/typesafegithub/workflows/actionbindinggenerator/versioning/BindingVersion;Lio/github/typesafegithub/workflows/actionbindinggenerator/domain/MetadataRevision;Lio/github/typesafegithub/workflows/actionbindinggenerator/metadata/Metadata;Lkotlin/Pair;ILjava/lang/Object;)Ljava/util/List; } public final class io/github/typesafegithub/workflows/actionbindinggenerator/metadata/Input { @@ -182,3 +182,14 @@ public final class io/github/typesafegithub/workflows/actionbindinggenerator/met public abstract interface class io/github/typesafegithub/workflows/actionbindinggenerator/typing/Typing { } +public final class io/github/typesafegithub/workflows/actionbindinggenerator/versioning/BindingVersion : java/lang/Enum { + public static final field V1 Lio/github/typesafegithub/workflows/actionbindinggenerator/versioning/BindingVersion; + public static fun getEntries ()Lkotlin/enums/EnumEntries; + public final fun getLibraryVersion ()Ljava/lang/String; + public final fun isDeprecated ()Z + public final fun isExperimental ()Z + public fun toString ()Ljava/lang/String; + public static fun valueOf (Ljava/lang/String;)Lio/github/typesafegithub/workflows/actionbindinggenerator/versioning/BindingVersion; + public static fun values ()[Lio/github/typesafegithub/workflows/actionbindinggenerator/versioning/BindingVersion; +} + diff --git a/action-binding-generator/src/main/kotlin/io/github/typesafegithub/workflows/actionbindinggenerator/generation/Generation.kt b/action-binding-generator/src/main/kotlin/io/github/typesafegithub/workflows/actionbindinggenerator/generation/Generation.kt index 070ab2b477..9e3baf7b21 100644 --- a/action-binding-generator/src/main/kotlin/io/github/typesafegithub/workflows/actionbindinggenerator/generation/Generation.kt +++ b/action-binding-generator/src/main/kotlin/io/github/typesafegithub/workflows/actionbindinggenerator/generation/Generation.kt @@ -20,6 +20,7 @@ import io.github.typesafegithub.workflows.actionbindinggenerator.domain.Metadata import io.github.typesafegithub.workflows.actionbindinggenerator.domain.TypingActualSource import io.github.typesafegithub.workflows.actionbindinggenerator.domain.fullName import io.github.typesafegithub.workflows.actionbindinggenerator.domain.isTopLevel +import io.github.typesafegithub.workflows.actionbindinggenerator.domain.prettyPrint import io.github.typesafegithub.workflows.actionbindinggenerator.domain.subName import io.github.typesafegithub.workflows.actionbindinggenerator.generation.Properties.CUSTOM_INPUTS import io.github.typesafegithub.workflows.actionbindinggenerator.generation.Properties.CUSTOM_VERSION @@ -36,6 +37,8 @@ import io.github.typesafegithub.workflows.actionbindinggenerator.typing.provideT import io.github.typesafegithub.workflows.actionbindinggenerator.utils.removeTrailingWhitespacesForEachLine import io.github.typesafegithub.workflows.actionbindinggenerator.utils.toCamelCase import io.github.typesafegithub.workflows.actionbindinggenerator.utils.toKotlinPackageName +import io.github.typesafegithub.workflows.actionbindinggenerator.versioning.BindingVersion +import io.github.typesafegithub.workflows.actionbindinggenerator.versioning.BindingVersion.V1 public data class ActionBinding( val kotlinCode: String, @@ -58,6 +61,7 @@ private object Properties { } public fun ActionCoords.generateBinding( + bindingVersion: BindingVersion = V1, metadataRevision: MetadataRevision, metadata: Metadata? = null, inputTypings: Pair, TypingActualSource?>? = null, @@ -73,10 +77,11 @@ public fun ActionCoords.generateBinding( val actionBindingSourceCodeUntyped = generateActionBindingSourceCode( - metadataProcessed, - this, - emptyMap(), - classNameUntyped, + metadata = metadataProcessed, + coords = this, + bindingVersion = bindingVersion, + inputTypings = emptyMap(), + className = classNameUntyped, untypedClass = true, replaceWith = inputTypingsResolved.second?.let { CodeBlock.of("ReplaceWith(%S)", className) }, ) @@ -94,6 +99,7 @@ public fun ActionCoords.generateBinding( generateActionBindingSourceCode( metadata = metadataProcessed, coords = this, + bindingVersion = bindingVersion, inputTypings = inputTypingsResolved.first, className = className, ) @@ -124,6 +130,7 @@ private fun Metadata.removeDeprecatedInputsIfNameClash(): Metadata { private fun generateActionBindingSourceCode( metadata: Metadata, coords: ActionCoords, + bindingVersion: BindingVersion, inputTypings: Map, className: String, untypedClass: Boolean = false, @@ -140,7 +147,7 @@ private fun generateActionBindingSourceCode( changes will be overwritten with the next binding code regeneration. See https://github.com/typesafegithub/github-workflows-kt for more info. """.trimIndent(), - ).addType(generateActionClass(metadata, coords, inputTypings, className, untypedClass, replaceWith)) + ).addType(generateActionClass(metadata, coords, bindingVersion, inputTypings, className, untypedClass, replaceWith)) .addSuppressAnnotation(metadata) .indent(" ") .build() @@ -169,6 +176,7 @@ private fun FileSpec.Builder.addSuppressAnnotation(metadata: Metadata) = private fun generateActionClass( metadata: Metadata, coords: ActionCoords, + bindingVersion: BindingVersion, inputTypings: Map, className: String, untypedClass: Boolean, @@ -178,12 +186,13 @@ private fun generateActionClass( .classBuilder(className) .addModifiers(KModifier.DATA) .addKdocIfNotEmpty(actionKdoc(metadata, coords, untypedClass)) - .replaceWith(replaceWith) + .deprecateBindingVersion(bindingVersion) + .replaceWith(bindingVersion, replaceWith) .addClassConstructorAnnotation() .inheritsFromRegularAction(coords, metadata, className) .primaryConstructor(metadata.primaryConstructor(inputTypings, coords, className, untypedClass)) .properties(metadata, coords, inputTypings, className, untypedClass) - .addInitializerBlockIfNecessary(metadata, inputTypings, untypedClass) + .addInitializerBlock(metadata, bindingVersion, coords, inputTypings, untypedClass) .addFunction(metadata.secondaryConstructor(inputTypings, coords, className, untypedClass)) .addFunction(metadata.buildToYamlArgumentsFunction(inputTypings, untypedClass)) .addCustomTypes(inputTypings, coords, className) @@ -371,8 +380,23 @@ private fun Metadata.linkedMapOfInputs( } } -private fun TypeSpec.Builder.replaceWith(replaceWith: CodeBlock?): TypeSpec.Builder { - if (replaceWith != null) { +private fun TypeSpec.Builder.deprecateBindingVersion(bindingVersion: BindingVersion): TypeSpec.Builder { + if (bindingVersion.isDeprecated) { + addAnnotation( + AnnotationSpec + .builder(Deprecated::class.asClassName()) + .addMember("%S", "Use a non-deprecated binding version in the repository URL") + .build(), + ) + } + return this +} + +private fun TypeSpec.Builder.replaceWith( + bindingVersion: BindingVersion, + replaceWith: CodeBlock?, +): TypeSpec.Builder { + if (!bindingVersion.isDeprecated && replaceWith != null) { addAnnotation( AnnotationSpec .builder(Deprecated::class.asClassName()) @@ -531,15 +555,63 @@ private fun ParameterSpec.Builder.defaultValueIfNullable( return this } -private fun TypeSpec.Builder.addInitializerBlockIfNecessary( +private fun TypeSpec.Builder.addInitializerBlock( metadata: Metadata, + bindingVersion: BindingVersion, + coords: ActionCoords, inputTypings: Map, untypedClass: Boolean, ): TypeSpec.Builder { - if (untypedClass || metadata.inputs.isEmpty() || metadata.inputs.none { inputTypings.containsKey(it.key) }) { + if (!bindingVersion.isDeprecated && + !bindingVersion.isExperimental && + (untypedClass || metadata.inputs.isEmpty() || metadata.inputs.none { inputTypings.containsKey(it.key) }) + ) { return this } - addInitializerBlock(metadata.initializerBlock(inputTypings)) + + addInitializerBlock( + buildCodeBlock { + if (bindingVersion.isDeprecated) { + val firstStableVersion = BindingVersion.entries.find { !it.isDeprecated && !it.isExperimental } + addStatement( + "println(%S)", + """ + WARNING: The used binding version $bindingVersion for ${coords.prettyPrint} is deprecated! First stable version is $firstStableVersion. + """.trimIndent(), + ) + beginControlFlow("""if (System.getenv("GITHUB_ACTIONS").toBoolean())""") + addStatement( + "println(%S)", + """ + + ::warning title=Deprecated Binding Version Used::The used binding version $bindingVersion for ${coords.prettyPrint} is deprecated! First stable version is $firstStableVersion. + """.trimIndent(), + ) + endControlFlow() + add("\n") + } + if (bindingVersion.isExperimental) { + val lastStableVersion = BindingVersion.entries.findLast { !it.isDeprecated && !it.isExperimental } + addStatement( + "println(%S)", + """ + WARNING: The used binding version $bindingVersion for ${coords.prettyPrint} is experimental! Last stable version is $lastStableVersion. + """.trimIndent(), + ) + beginControlFlow("""if (System.getenv("GITHUB_ACTIONS").toBoolean())""") + addStatement( + "println(%S)", + """ + + ::warning title=Experimental Binding Version Used::The used binding version $bindingVersion for ${coords.prettyPrint} is experimental! Last stable version is $lastStableVersion. + """.trimIndent(), + ) + endControlFlow() + add("\n") + } + add(metadata.initializerBlock(inputTypings)) + }, + ) return this } diff --git a/action-binding-generator/src/main/kotlin/io/github/typesafegithub/workflows/actionbindinggenerator/versioning/BindingVersion.kt b/action-binding-generator/src/main/kotlin/io/github/typesafegithub/workflows/actionbindinggenerator/versioning/BindingVersion.kt new file mode 100644 index 0000000000..9b1b36b682 --- /dev/null +++ b/action-binding-generator/src/main/kotlin/io/github/typesafegithub/workflows/actionbindinggenerator/versioning/BindingVersion.kt @@ -0,0 +1,12 @@ +package io.github.typesafegithub.workflows.actionbindinggenerator.versioning + +public enum class BindingVersion( + public val isDeprecated: Boolean = false, + public val isExperimental: Boolean = true, + public val libraryVersion: String, +) { + V1(isExperimental = false, libraryVersion = "3.2.0"), + ; + + override fun toString(): String = super.toString().lowercase() +} diff --git a/jit-binding-server/src/main/kotlin/io/github/typesafegithub/workflows/jitbindingserver/ArtifactRoutes.kt b/jit-binding-server/src/main/kotlin/io/github/typesafegithub/workflows/jitbindingserver/ArtifactRoutes.kt index 9660352f48..ea4a28bfca 100644 --- a/jit-binding-server/src/main/kotlin/io/github/typesafegithub/workflows/jitbindingserver/ArtifactRoutes.kt +++ b/jit-binding-server/src/main/kotlin/io/github/typesafegithub/workflows/jitbindingserver/ArtifactRoutes.kt @@ -6,6 +6,8 @@ import com.sksamuel.aedile.core.expireAfterWrite import io.github.oshai.kotlinlogging.KotlinLogging.logger import io.github.typesafegithub.workflows.actionbindinggenerator.domain.ActionCoords import io.github.typesafegithub.workflows.actionbindinggenerator.domain.prettyPrint +import io.github.typesafegithub.workflows.actionbindinggenerator.versioning.BindingVersion +import io.github.typesafegithub.workflows.actionbindinggenerator.versioning.BindingVersion.V1 import io.github.typesafegithub.workflows.mavenbinding.Artifact import io.github.typesafegithub.workflows.mavenbinding.JarArtifact import io.github.typesafegithub.workflows.mavenbinding.TextArtifact @@ -35,18 +37,28 @@ private val bindingsCache = .newBuilder() .expireAfterWrite(1.hours) .recordStats() - .asCache() + .asCache() fun Routing.artifactRoutes(prometheusRegistry: PrometheusMeterRegistry) { CaffeineCacheMetrics.monitor(prometheusRegistry, bindingsCache.underlying(), "bindings_cache") route("{owner}/{name}/{version}/{file}") { - artifact(prometheusRegistry, refresh = false) + artifact(prometheusRegistry) } route("/refresh/{owner}/{name}/{version}/{file}") { artifact(prometheusRegistry, refresh = true) } + + route("""(?v\d+)""".toRegex()) { + route("{owner}/{name}/{version}/{file}") { + artifact(prometheusRegistry) + } + + route("/refresh/{owner}/{name}/{version}/{file}") { + artifact(prometheusRegistry, refresh = true) + } + } } private fun Route.artifact( @@ -98,16 +110,30 @@ private fun Route.getArtifact( } } +val ApplicationCall.bindingVersion: BindingVersion? + get() { + val bindingVersion = parameters["bindingVersion"] + return if (bindingVersion == null) { + V1 + } else { + BindingVersion + .entries + .find { it.name.lowercase() == bindingVersion } + } + } + private suspend fun ApplicationCall.toBindingArtifacts(refresh: Boolean): Map? { + val bindingVersion = bindingVersion ?: return null val actionCoords = parameters.extractActionCoords(extractVersion = true) - logger.info { "➡️ Requesting ${actionCoords.prettyPrint}" } + logger.info { "➡️ Requesting ${actionCoords.prettyPrint} binding version $bindingVersion" } + val cacheKey = CacheKey(actionCoords, bindingVersion) return if (refresh) { - actionCoords.buildVersionArtifacts().also { - bindingsCache.put(actionCoords, runCatching { it!! }) + actionCoords.buildVersionArtifacts(bindingVersion).also { + bindingsCache.put(cacheKey, runCatching { it!! }) } } else { - bindingsCache.get(actionCoords) { runCatching { actionCoords.buildVersionArtifacts()!! } }.getOrNull() + bindingsCache.get(cacheKey) { runCatching { actionCoords.buildVersionArtifacts(bindingVersion)!! } }.getOrNull() } } @@ -115,6 +141,7 @@ private fun incrementArtifactCounter( prometheusRegistry: PrometheusMeterRegistry, call: ApplicationCall, ) { + val bindingVersion = call.parameters["bindingVersion"] ?: "v1" val owner = call.parameters["owner"] ?: "unknown" val name = call.parameters["name"] ?: "unknown" val version = call.parameters["version"] ?: "unknown" @@ -130,6 +157,7 @@ private fun incrementArtifactCounter( prometheusRegistry.counter( "artifact_requests_total", listOf( + Tag.of("bindingVersion", bindingVersion), Tag.of("owner", owner), Tag.of("name", name), Tag.of("version", version), @@ -140,3 +168,8 @@ private fun incrementArtifactCounter( ) counter.increment() } + +private data class CacheKey( + val actionCoords: ActionCoords, + val bindingVersion: BindingVersion, +) diff --git a/jit-binding-server/src/main/kotlin/io/github/typesafegithub/workflows/jitbindingserver/MetadataRoutes.kt b/jit-binding-server/src/main/kotlin/io/github/typesafegithub/workflows/jitbindingserver/MetadataRoutes.kt index 040c36a172..2898540066 100644 --- a/jit-binding-server/src/main/kotlin/io/github/typesafegithub/workflows/jitbindingserver/MetadataRoutes.kt +++ b/jit-binding-server/src/main/kotlin/io/github/typesafegithub/workflows/jitbindingserver/MetadataRoutes.kt @@ -17,10 +17,21 @@ fun Routing.metadataRoutes() { route("/refresh/{owner}/{name}/{file}") { metadata(refresh = true) } + + route("""(?v\d+)""".toRegex()) { + route("{owner}/{name}/{file}") { + metadata() + } + + route("/refresh/{owner}/{name}/{file}") { + metadata(refresh = true) + } + } } private fun Route.metadata(refresh: Boolean = false) { get { + if (call.bindingVersion == null) return@get call.respondNotFound() if (refresh && !deliverOnRefreshRoute) return@get call.respondNotFound() val file = call.parameters["file"] ?: return@get call.respondNotFound() diff --git a/maven-binding-builder/src/main/kotlin/io/github/typesafegithub/workflows/mavenbinding/JarBuilding.kt b/maven-binding-builder/src/main/kotlin/io/github/typesafegithub/workflows/mavenbinding/JarBuilding.kt index 0c7a3fe618..cd6082f6b8 100644 --- a/maven-binding-builder/src/main/kotlin/io/github/typesafegithub/workflows/mavenbinding/JarBuilding.kt +++ b/maven-binding-builder/src/main/kotlin/io/github/typesafegithub/workflows/mavenbinding/JarBuilding.kt @@ -6,6 +6,8 @@ import io.github.typesafegithub.workflows.actionbindinggenerator.domain.ActionCo import io.github.typesafegithub.workflows.actionbindinggenerator.domain.NewestForVersion import io.github.typesafegithub.workflows.actionbindinggenerator.generation.ActionBinding import io.github.typesafegithub.workflows.actionbindinggenerator.generation.generateBinding +import io.github.typesafegithub.workflows.actionbindinggenerator.versioning.BindingVersion +import io.github.typesafegithub.workflows.actionbindinggenerator.versioning.BindingVersion.V1 import org.jetbrains.kotlin.cli.common.ExitCode import org.jetbrains.kotlin.cli.common.arguments.K2JVMCompilerArguments import org.jetbrains.kotlin.cli.common.messages.MessageRenderer @@ -26,9 +28,12 @@ internal data class Jars( val sourcesJar: () -> ByteArray, ) -internal fun ActionCoords.buildJars(): Jars? { +internal fun ActionCoords.buildJars(bindingVersion: BindingVersion = V1): Jars? { val binding = - generateBinding(metadataRevision = NewestForVersion).also { + generateBinding( + bindingVersion = bindingVersion, + metadataRevision = NewestForVersion, + ).also { if (it.isEmpty()) return null } diff --git a/maven-binding-builder/src/main/kotlin/io/github/typesafegithub/workflows/mavenbinding/PomBuilding.kt b/maven-binding-builder/src/main/kotlin/io/github/typesafegithub/workflows/mavenbinding/PomBuilding.kt index cf7f0e4205..212212f594 100644 --- a/maven-binding-builder/src/main/kotlin/io/github/typesafegithub/workflows/mavenbinding/PomBuilding.kt +++ b/maven-binding-builder/src/main/kotlin/io/github/typesafegithub/workflows/mavenbinding/PomBuilding.kt @@ -4,9 +4,7 @@ import io.github.typesafegithub.workflows.actionbindinggenerator.domain.ActionCo import io.github.typesafegithub.workflows.actionbindinggenerator.domain.fullName import io.github.typesafegithub.workflows.actionbindinggenerator.domain.prettyPrint -internal const val LATEST_RELASED_LIBRARY_VERSION = "3.2.0" - -internal fun ActionCoords.buildPomFile() = +internal fun ActionCoords.buildPomFile(libraryVersion: String) = """ @@ -26,7 +24,7 @@ internal fun ActionCoords.buildPomFile() = io.github.typesafegithub github-workflows-kt - $LATEST_RELASED_LIBRARY_VERSION + $libraryVersion compile diff --git a/maven-binding-builder/src/main/kotlin/io/github/typesafegithub/workflows/mavenbinding/VersionArtifactsBuilding.kt b/maven-binding-builder/src/main/kotlin/io/github/typesafegithub/workflows/mavenbinding/VersionArtifactsBuilding.kt index aef17b35be..a456812adf 100644 --- a/maven-binding-builder/src/main/kotlin/io/github/typesafegithub/workflows/mavenbinding/VersionArtifactsBuilding.kt +++ b/maven-binding-builder/src/main/kotlin/io/github/typesafegithub/workflows/mavenbinding/VersionArtifactsBuilding.kt @@ -1,6 +1,8 @@ package io.github.typesafegithub.workflows.mavenbinding import io.github.typesafegithub.workflows.actionbindinggenerator.domain.ActionCoords +import io.github.typesafegithub.workflows.actionbindinggenerator.versioning.BindingVersion +import io.github.typesafegithub.workflows.actionbindinggenerator.versioning.BindingVersion.V1 sealed interface Artifact @@ -12,9 +14,9 @@ data class JarArtifact( val data: () -> ByteArray, ) : Artifact -fun ActionCoords.buildVersionArtifacts(): Map? { - val jars = buildJars() ?: return null - val pom = buildPomFile() +fun ActionCoords.buildVersionArtifacts(bindingVersion: BindingVersion = V1): Map? { + val jars = buildJars(bindingVersion = bindingVersion) ?: return null + val pom = buildPomFile(libraryVersion = bindingVersion.libraryVersion) val module = buildModuleFile() return mapOf( "$mavenName-$version.jar" to JarArtifact(jars.mainJar),