Skip to content

Commit

Permalink
[#941] refactor(automation): include class name in binding object
Browse files Browse the repository at this point in the history
Thanks to this, the action binding generator doesn't have to expose a
function that generates the class name - it's provided as a part of the
generated binding object.
  • Loading branch information
krzema12 committed Sep 20, 2023
1 parent 84a604e commit 6b8d047
Show file tree
Hide file tree
Showing 4 changed files with 36 additions and 28 deletions.
Original file line number Diff line number Diff line change
@@ -1,20 +1,18 @@
public final class io/github/typesafegithub/workflows/actionbindinggenerator/ActionBinding {
public fun <init> (Ljava/lang/String;Ljava/lang/String;)V
public fun <init> (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
public final fun component1 ()Ljava/lang/String;
public final fun component2 ()Ljava/lang/String;
public final fun copy (Ljava/lang/String;Ljava/lang/String;)Lio/github/typesafegithub/workflows/actionbindinggenerator/ActionBinding;
public static synthetic fun copy$default (Lio/github/typesafegithub/workflows/actionbindinggenerator/ActionBinding;Ljava/lang/String;Ljava/lang/String;ILjava/lang/Object;)Lio/github/typesafegithub/workflows/actionbindinggenerator/ActionBinding;
public final fun component3 ()Ljava/lang/String;
public final fun copy (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Lio/github/typesafegithub/workflows/actionbindinggenerator/ActionBinding;
public static synthetic fun copy$default (Lio/github/typesafegithub/workflows/actionbindinggenerator/ActionBinding;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILjava/lang/Object;)Lio/github/typesafegithub/workflows/actionbindinggenerator/ActionBinding;
public fun equals (Ljava/lang/Object;)Z
public final fun getClassName ()Ljava/lang/String;
public final fun getFilePath ()Ljava/lang/String;
public final fun getKotlinCode ()Ljava/lang/String;
public fun hashCode ()I
public fun toString ()Ljava/lang/String;
}

public final class io/github/typesafegithub/workflows/actionbindinggenerator/ClassNamingKt {
public static final fun buildActionClassName (Lio/github/typesafegithub/workflows/actionsmetadata/model/ActionCoords;)Ljava/lang/String;
}

public final class io/github/typesafegithub/workflows/actionbindinggenerator/GenerationKt {
public static final fun generateBinding (Lio/github/typesafegithub/workflows/actionsmetadata/model/ActionCoords;Ljava/util/Map;Lkotlin/jvm/functions/Function1;)Lio/github/typesafegithub/workflows/actionbindinggenerator/ActionBinding;
public static synthetic fun generateBinding$default (Lio/github/typesafegithub/workflows/actionsmetadata/model/ActionCoords;Ljava/util/Map;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Lio/github/typesafegithub/workflows/actionbindinggenerator/ActionBinding;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ package io.github.typesafegithub.workflows.actionbindinggenerator
import io.github.typesafegithub.workflows.actionsmetadata.model.ActionCoords
import java.util.Locale

public fun ActionCoords.buildActionClassName(): String {
internal fun ActionCoords.buildActionClassName(): String {
val versionString = version
.let { if (it.startsWith("v")) it else "v$it" }
.replaceFirstChar { it.titlecase(Locale.getDefault()) }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ import io.github.typesafegithub.workflows.metadatareading.prettyPrint
public data class ActionBinding(
val kotlinCode: String,
val filePath: String,
val className: String,
)

private object Types {
Expand Down Expand Up @@ -56,9 +57,11 @@ public fun ActionCoords.generateBinding(
}

val actionBindingSourceCode = generateActionBindingSourceCode(metadata, this, inputTypings)
val className = this.buildActionClassName()
return ActionBinding(
kotlinCode = actionBindingSourceCode,
filePath = "library/src/gen/kotlin/io/github/typesafegithub/workflows/actions/${owner.toKotlinPackageName()}/${this.buildActionClassName()}.kt",
filePath = "library/src/gen/kotlin/io/github/typesafegithub/workflows/actions/${owner.toKotlinPackageName()}/$className.kt",
className = className,
)
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package io.github.typesafegithub.workflows.codegenerator

import io.github.typesafegithub.workflows.actionbindinggenerator.buildActionClassName
import io.github.typesafegithub.workflows.actionbindinggenerator.ActionBinding
import io.github.typesafegithub.workflows.actionbindinggenerator.generateBinding
import io.github.typesafegithub.workflows.actionbindinggenerator.toKotlinPackageName
import io.github.typesafegithub.workflows.actionsmetadata.bindingsToGenerate
Expand All @@ -26,26 +26,33 @@ fun main() {
Paths.get("library/src/gen").toFile().deleteRecursively()
listOfBindingsInDocs.toFile().delete()
generateEventPayloads()
generateBindings()
generateListOfBindingsForDocs(listOfBindingsInDocs)
val requestsAndBindings = generateBindings()
generateListOfBindingsForDocs(requestsAndBindings, listOfBindingsInDocs)
}

private fun generateBindings() {
private fun generateBindings(): List<Pair<ActionBindingRequest, ActionBinding>> {
deleteActionYamlCacheIfObsolete()
deleteActionTypesYamlCacheIfObsolete()

bindingsToGenerate.forEach { actionBindingRequest ->
val requestsAndBindings = bindingsToGenerate.map { actionBindingRequest ->
println("Generating ${actionBindingRequest.actionCoords.prettyPrint}")
val inputTypings = actionBindingRequest.provideTypes()
val (code, path) = actionBindingRequest.actionCoords.generateBinding(inputTypings)
with(Paths.get(path).toFile()) {
val binding = actionBindingRequest.actionCoords.generateBinding(inputTypings)
Pair(actionBindingRequest, binding)
}
requestsAndBindings.forEach { (_, binding) ->
with(Paths.get(binding.filePath).toFile()) {
parentFile.mkdirs()
writeText(code)
writeText(binding.kotlinCode)
}
}
return requestsAndBindings
}

private fun generateListOfBindingsForDocs(listOfBindingsInDocs: Path) {
private fun generateListOfBindingsForDocs(
requestsAndBindings: List<Pair<ActionBindingRequest, ActionBinding>>,
listOfBindingsInDocs: Path,
) {
listOfBindingsInDocs.toFile().printWriter().use { writer ->
writer.println(
"""
Expand All @@ -59,17 +66,17 @@ private fun generateListOfBindingsForDocs(listOfBindingsInDocs: Path) {
""".trimIndent(),
)

bindingsToGenerate
.groupBy { it.actionCoords.owner }
.forEach { (owner, ownedActions) ->
requestsAndBindings
.groupBy { it.first.actionCoords.owner }
.forEach { (owner, ownedRequestsAndBindings) ->
writer.println("* $owner")
ownedActions
.groupBy { it.actionCoords.name }
ownedRequestsAndBindings
.groupBy { it.first.actionCoords.name }
.forEach { (_, versions) ->
val kotlinClasses = versions
.sortedBy { Version(it.actionCoords.version) }
.joinToString(", ") { it.toMarkdownLinkToKotlinCode() }
writer.println(" * ${versions.first().actionCoords.toMarkdownLinkGithub()} - $kotlinClasses")
.sortedBy { Version(it.first.actionCoords.version) }
.joinToString(", ") { it.first.toMarkdownLinkToKotlinCode(it.second.className) }
writer.println(" * ${versions.first().first.actionCoords.toMarkdownLinkGithub()} - $kotlinClasses")
}
}

Expand All @@ -95,9 +102,9 @@ private fun generateListOfBindingsForDocs(listOfBindingsInDocs: Path) {
}
}

private fun ActionBindingRequest.toMarkdownLinkToKotlinCode(): String {
private fun ActionBindingRequest.toMarkdownLinkToKotlinCode(className: String): String {
val typingsMarker = if (typingsSource == TypingsSource.ActionTypes) "" else ""
return "${actionCoords.version}$typingsMarker: [`${actionCoords.buildActionClassName()}`](https://github.com/typesafegithub/github-workflows-kt/blob/v[[ version ]]/library/src/gen/kotlin/io/github/typesafegithub/workflows/actions/${actionCoords.owner.toKotlinPackageName()}/${this.actionCoords.buildActionClassName()}.kt)"
return "${actionCoords.version}$typingsMarker: [`$className`](https://github.com/typesafegithub/github-workflows-kt/blob/v[[ version ]]/library/src/gen/kotlin/io/github/typesafegithub/workflows/actions/${actionCoords.owner.toKotlinPackageName()}/$className.kt)"
}

private fun ActionCoords.toMarkdownLinkGithub() =
Expand Down

0 comments on commit 6b8d047

Please sign in to comment.