Skip to content

Commit

Permalink
[#941] refactor(automation): extract metadata reading to separate mod…
Browse files Browse the repository at this point in the history
…ule (#986)

It lets us limit the API of the action binding generation module.
  • Loading branch information
krzema12 committed Sep 20, 2023
1 parent 911f18a commit 84a604e
Show file tree
Hide file tree
Showing 16 changed files with 46 additions and 137 deletions.
115 changes: 0 additions & 115 deletions automation/action-binding-generator/api/action-binding-generator.api
Original file line number Diff line number Diff line change
Expand Up @@ -20,121 +20,6 @@ public final class io/github/typesafegithub/workflows/actionbindinggenerator/Gen
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;
}

public final class io/github/typesafegithub/workflows/actionbindinggenerator/Input {
public static final field Companion Lio/github/typesafegithub/workflows/actionbindinggenerator/Input$Companion;
public fun <init> ()V
public synthetic fun <init> (ILjava/lang/String;Ljava/lang/String;Ljava/lang/Boolean;Ljava/lang/String;Lkotlinx/serialization/internal/SerializationConstructorMarker;)V
public fun <init> (Ljava/lang/String;Ljava/lang/String;Ljava/lang/Boolean;Ljava/lang/String;)V
public synthetic fun <init> (Ljava/lang/String;Ljava/lang/String;Ljava/lang/Boolean;Ljava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
public final fun component1 ()Ljava/lang/String;
public final fun component2 ()Ljava/lang/String;
public final fun component3 ()Ljava/lang/Boolean;
public final fun component4 ()Ljava/lang/String;
public final fun copy (Ljava/lang/String;Ljava/lang/String;Ljava/lang/Boolean;Ljava/lang/String;)Lio/github/typesafegithub/workflows/actionbindinggenerator/Input;
public static synthetic fun copy$default (Lio/github/typesafegithub/workflows/actionbindinggenerator/Input;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Boolean;Ljava/lang/String;ILjava/lang/Object;)Lio/github/typesafegithub/workflows/actionbindinggenerator/Input;
public fun equals (Ljava/lang/Object;)Z
public final fun getDefault ()Ljava/lang/String;
public final fun getDeprecationMessage ()Ljava/lang/String;
public final fun getDescription ()Ljava/lang/String;
public final fun getRequired ()Ljava/lang/Boolean;
public fun hashCode ()I
public fun toString ()Ljava/lang/String;
public static final synthetic fun write$Self (Lio/github/typesafegithub/workflows/actionbindinggenerator/Input;Lkotlinx/serialization/encoding/CompositeEncoder;Lkotlinx/serialization/descriptors/SerialDescriptor;)V
}

public final class io/github/typesafegithub/workflows/actionbindinggenerator/Input$$serializer : kotlinx/serialization/internal/GeneratedSerializer {
public static final field INSTANCE Lio/github/typesafegithub/workflows/actionbindinggenerator/Input$$serializer;
public fun childSerializers ()[Lkotlinx/serialization/KSerializer;
public fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Lio/github/typesafegithub/workflows/actionbindinggenerator/Input;
public synthetic fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object;
public fun getDescriptor ()Lkotlinx/serialization/descriptors/SerialDescriptor;
public fun serialize (Lkotlinx/serialization/encoding/Encoder;Lio/github/typesafegithub/workflows/actionbindinggenerator/Input;)V
public synthetic fun serialize (Lkotlinx/serialization/encoding/Encoder;Ljava/lang/Object;)V
public fun typeParametersSerializers ()[Lkotlinx/serialization/KSerializer;
}

public final class io/github/typesafegithub/workflows/actionbindinggenerator/Input$Companion {
public final fun serializer ()Lkotlinx/serialization/KSerializer;
}

public final class io/github/typesafegithub/workflows/actionbindinggenerator/Metadata {
public static final field Companion Lio/github/typesafegithub/workflows/actionbindinggenerator/Metadata$Companion;
public synthetic fun <init> (ILjava/lang/String;Ljava/lang/String;Ljava/util/Map;Ljava/util/Map;Lkotlinx/serialization/internal/SerializationConstructorMarker;)V
public fun <init> (Ljava/lang/String;Ljava/lang/String;Ljava/util/Map;Ljava/util/Map;)V
public synthetic fun <init> (Ljava/lang/String;Ljava/lang/String;Ljava/util/Map;Ljava/util/Map;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
public final fun component1 ()Ljava/lang/String;
public final fun component2 ()Ljava/lang/String;
public final fun component3 ()Ljava/util/Map;
public final fun component4 ()Ljava/util/Map;
public final fun copy (Ljava/lang/String;Ljava/lang/String;Ljava/util/Map;Ljava/util/Map;)Lio/github/typesafegithub/workflows/actionbindinggenerator/Metadata;
public static synthetic fun copy$default (Lio/github/typesafegithub/workflows/actionbindinggenerator/Metadata;Ljava/lang/String;Ljava/lang/String;Ljava/util/Map;Ljava/util/Map;ILjava/lang/Object;)Lio/github/typesafegithub/workflows/actionbindinggenerator/Metadata;
public fun equals (Ljava/lang/Object;)Z
public final fun getDescription ()Ljava/lang/String;
public final fun getInputs ()Ljava/util/Map;
public final fun getName ()Ljava/lang/String;
public final fun getOutputs ()Ljava/util/Map;
public fun hashCode ()I
public fun toString ()Ljava/lang/String;
public static final synthetic fun write$Self (Lio/github/typesafegithub/workflows/actionbindinggenerator/Metadata;Lkotlinx/serialization/encoding/CompositeEncoder;Lkotlinx/serialization/descriptors/SerialDescriptor;)V
}

public final class io/github/typesafegithub/workflows/actionbindinggenerator/Metadata$$serializer : kotlinx/serialization/internal/GeneratedSerializer {
public static final field INSTANCE Lio/github/typesafegithub/workflows/actionbindinggenerator/Metadata$$serializer;
public fun childSerializers ()[Lkotlinx/serialization/KSerializer;
public fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Lio/github/typesafegithub/workflows/actionbindinggenerator/Metadata;
public synthetic fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object;
public fun getDescriptor ()Lkotlinx/serialization/descriptors/SerialDescriptor;
public fun serialize (Lkotlinx/serialization/encoding/Encoder;Lio/github/typesafegithub/workflows/actionbindinggenerator/Metadata;)V
public synthetic fun serialize (Lkotlinx/serialization/encoding/Encoder;Ljava/lang/Object;)V
public fun typeParametersSerializers ()[Lkotlinx/serialization/KSerializer;
}

public final class io/github/typesafegithub/workflows/actionbindinggenerator/Metadata$Companion {
public final fun serializer ()Lkotlinx/serialization/KSerializer;
}

public final class io/github/typesafegithub/workflows/actionbindinggenerator/MetadataReadingKt {
public static final fun deleteActionYamlCacheIfObsolete ()V
public static final fun fetchMetadata (Lio/github/typesafegithub/workflows/actionsmetadata/model/ActionCoords;Ljava/lang/String;ZLkotlin/jvm/functions/Function1;)Lio/github/typesafegithub/workflows/actionbindinggenerator/Metadata;
public static synthetic fun fetchMetadata$default (Lio/github/typesafegithub/workflows/actionsmetadata/model/ActionCoords;Ljava/lang/String;ZLkotlin/jvm/functions/Function1;ILjava/lang/Object;)Lio/github/typesafegithub/workflows/actionbindinggenerator/Metadata;
public static final fun fetchUri (Ljava/net/URI;)Ljava/lang/String;
public static final fun getActionYamlDir ()Ljava/io/File;
public static final fun getGitHubUrl (Lio/github/typesafegithub/workflows/actionsmetadata/model/ActionCoords;)Ljava/lang/String;
public static final fun getPrettyPrint (Lio/github/typesafegithub/workflows/actionsmetadata/model/ActionCoords;)Ljava/lang/String;
public static final fun getReleasesUrl (Lio/github/typesafegithub/workflows/actionsmetadata/model/ActionCoords;)Ljava/lang/String;
}

public final class io/github/typesafegithub/workflows/actionbindinggenerator/Output {
public static final field Companion Lio/github/typesafegithub/workflows/actionbindinggenerator/Output$Companion;
public fun <init> ()V
public synthetic fun <init> (ILjava/lang/String;Lkotlinx/serialization/internal/SerializationConstructorMarker;)V
public fun <init> (Ljava/lang/String;)V
public synthetic fun <init> (Ljava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
public final fun component1 ()Ljava/lang/String;
public final fun copy (Ljava/lang/String;)Lio/github/typesafegithub/workflows/actionbindinggenerator/Output;
public static synthetic fun copy$default (Lio/github/typesafegithub/workflows/actionbindinggenerator/Output;Ljava/lang/String;ILjava/lang/Object;)Lio/github/typesafegithub/workflows/actionbindinggenerator/Output;
public fun equals (Ljava/lang/Object;)Z
public final fun getDescription ()Ljava/lang/String;
public fun hashCode ()I
public fun toString ()Ljava/lang/String;
public static final synthetic fun write$Self (Lio/github/typesafegithub/workflows/actionbindinggenerator/Output;Lkotlinx/serialization/encoding/CompositeEncoder;Lkotlinx/serialization/descriptors/SerialDescriptor;)V
}

public final class io/github/typesafegithub/workflows/actionbindinggenerator/Output$$serializer : kotlinx/serialization/internal/GeneratedSerializer {
public static final field INSTANCE Lio/github/typesafegithub/workflows/actionbindinggenerator/Output$$serializer;
public fun childSerializers ()[Lkotlinx/serialization/KSerializer;
public fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Lio/github/typesafegithub/workflows/actionbindinggenerator/Output;
public synthetic fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object;
public fun getDescriptor ()Lkotlinx/serialization/descriptors/SerialDescriptor;
public fun serialize (Lkotlinx/serialization/encoding/Encoder;Lio/github/typesafegithub/workflows/actionbindinggenerator/Output;)V
public synthetic fun serialize (Lkotlinx/serialization/encoding/Encoder;Ljava/lang/Object;)V
public fun typeParametersSerializers ()[Lkotlinx/serialization/KSerializer;
}

public final class io/github/typesafegithub/workflows/actionbindinggenerator/Output$Companion {
public final fun serializer ()Lkotlinx/serialization/KSerializer;
}

public final class io/github/typesafegithub/workflows/actionbindinggenerator/TextTransformationKt {
public static final fun toKotlinPackageName (Ljava/lang/String;)Ljava/lang/String;
public static final fun toPascalCase (Ljava/lang/String;)Ljava/lang/String;
Expand Down
4 changes: 1 addition & 3 deletions automation/action-binding-generator/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -3,15 +3,13 @@ import org.jmailen.gradle.kotlinter.tasks.ConfigurableKtLintTask
plugins {
buildsrc.convention.`kotlin-jvm`

kotlin("plugin.serialization")

id("org.jetbrains.kotlinx.binary-compatibility-validator") version "0.13.2"
}

dependencies {
implementation(projects.automation.typings)
implementation(projects.automation.metadataReading)
implementation("com.squareup:kotlinpoet:1.14.2")
implementation("com.charleskorn.kaml:kaml:0.55.0")

testImplementation(projects.library)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,10 @@ import io.github.typesafegithub.workflows.actionbindinggenerator.Properties.CUST
import io.github.typesafegithub.workflows.actionsmetadata.model.ActionCoords
import io.github.typesafegithub.workflows.actionsmetadata.model.StringTyping
import io.github.typesafegithub.workflows.actionsmetadata.model.Typing
import io.github.typesafegithub.workflows.metadatareading.Input
import io.github.typesafegithub.workflows.metadatareading.Metadata
import io.github.typesafegithub.workflows.metadatareading.fetchMetadata
import io.github.typesafegithub.workflows.metadatareading.prettyPrint

public data class ActionBinding(
val kotlinCode: String,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package io.github.typesafegithub.workflows.actionbindinggenerator

import io.github.typesafegithub.workflows.metadatareading.Input

/**
* [Input.required] is in theory a required field in action's metadata, but in practice a lot of actions don't specify
* it. It's thus a challenge to infer nullability of inputs in the Kotlin bindings. This function tackles this task.
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
package io.github.typesafegithub.workflows.actionbindinggenerator

import io.github.typesafegithub.workflows.metadatareading.Input
import io.github.typesafegithub.workflows.metadatareading.Metadata

internal fun Metadata.suggestAdditionalTypings(existingTypings: Set<String>): String? {
val keys = (inputs.keys - existingTypings).associate {
it to inputs.get(it)!!
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,9 @@ import io.github.typesafegithub.workflows.actionsmetadata.model.IntegerTyping
import io.github.typesafegithub.workflows.actionsmetadata.model.IntegerWithSpecialValueTyping
import io.github.typesafegithub.workflows.actionsmetadata.model.ListOfTypings
import io.github.typesafegithub.workflows.actionsmetadata.model.StringTyping
import io.github.typesafegithub.workflows.metadatareading.Input
import io.github.typesafegithub.workflows.metadatareading.Metadata
import io.github.typesafegithub.workflows.metadatareading.Output
import io.kotest.assertions.throwables.shouldThrowAny
import io.kotest.core.spec.style.FunSpec
import io.kotest.matchers.throwable.shouldHaveMessage
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package io.github.typesafegithub.workflows.actionbindinggenerator

import io.github.typesafegithub.workflows.metadatareading.Input
import io.kotest.core.spec.style.FunSpec
import io.kotest.data.row
import io.kotest.matchers.shouldBe
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package io.github.typesafegithub.workflows.actionbindinggenerator

import io.github.typesafegithub.workflows.metadatareading.Input
import io.github.typesafegithub.workflows.metadatareading.Metadata
import io.kotest.core.spec.style.FunSpec
import io.kotest.inspectors.forAll
import io.kotest.matchers.shouldBe
Expand Down
1 change: 1 addition & 0 deletions automation/code-generator/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ dependencies {

implementation(projects.automation.typings)
implementation(projects.automation.actionBindingGenerator)
implementation(projects.automation.metadataReading)

testImplementation(projects.library)
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,7 @@
package io.github.typesafegithub.workflows.codegenerator

import io.github.typesafegithub.workflows.actionbindinggenerator.buildActionClassName
import io.github.typesafegithub.workflows.actionbindinggenerator.deleteActionYamlCacheIfObsolete
import io.github.typesafegithub.workflows.actionbindinggenerator.generateBinding
import io.github.typesafegithub.workflows.actionbindinggenerator.prettyPrint
import io.github.typesafegithub.workflows.actionbindinggenerator.toKotlinPackageName
import io.github.typesafegithub.workflows.actionsmetadata.bindingsToGenerate
import io.github.typesafegithub.workflows.actionsmetadata.model.ActionBindingRequest
Expand All @@ -13,6 +11,8 @@ import io.github.typesafegithub.workflows.actionsmetadata.model.Version
import io.github.typesafegithub.workflows.codegenerator.types.deleteActionTypesYamlCacheIfObsolete
import io.github.typesafegithub.workflows.codegenerator.types.provideTypes
import io.github.typesafegithub.workflows.dsl.expressions.generateEventPayloads
import io.github.typesafegithub.workflows.metadatareading.deleteActionYamlCacheIfObsolete
import io.github.typesafegithub.workflows.metadatareading.prettyPrint
import java.nio.file.Path
import java.nio.file.Paths

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

import com.charleskorn.kaml.Yaml
import io.github.typesafegithub.workflows.actionbindinggenerator.fetchUri
import io.github.typesafegithub.workflows.actionbindinggenerator.prettyPrint
import io.github.typesafegithub.workflows.actionbindinggenerator.releasesUrl
import io.github.typesafegithub.workflows.actionbindinggenerator.toPascalCase
import io.github.typesafegithub.workflows.actionsmetadata.model.ActionBindingRequest
import io.github.typesafegithub.workflows.actionsmetadata.model.ActionCoords
Expand All @@ -19,6 +16,9 @@ import io.github.typesafegithub.workflows.actionsmetadata.model.ListOfTypings
import io.github.typesafegithub.workflows.actionsmetadata.model.StringTyping
import io.github.typesafegithub.workflows.actionsmetadata.model.Typing
import io.github.typesafegithub.workflows.actionsmetadata.model.TypingsSource
import io.github.typesafegithub.workflows.metadatareading.fetchUri
import io.github.typesafegithub.workflows.metadatareading.prettyPrint
import io.github.typesafegithub.workflows.metadatareading.releasesUrl
import kotlinx.serialization.decodeFromString
import java.io.File
import java.io.IOException
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,7 @@
package io.github.typesafegithub.workflows.codegenerator.updating

import io.github.typesafegithub.workflows.actionbindinggenerator.ActionBinding
import io.github.typesafegithub.workflows.actionbindinggenerator.fetchMetadata
import io.github.typesafegithub.workflows.actionbindinggenerator.generateBinding
import io.github.typesafegithub.workflows.actionbindinggenerator.prettyPrint
import io.github.typesafegithub.workflows.actionsmetadata.bindingsToGenerate
import io.github.typesafegithub.workflows.actionsmetadata.model.ActionBindingRequest
import io.github.typesafegithub.workflows.actionsmetadata.model.ActionCoords
Expand All @@ -14,6 +12,8 @@ import io.github.typesafegithub.workflows.codegenerator.versions.GithubTag
import io.github.typesafegithub.workflows.codegenerator.versions.getGithubToken
import io.github.typesafegithub.workflows.codegenerator.versions.httpClient
import io.github.typesafegithub.workflows.codegenerator.versions.json
import io.github.typesafegithub.workflows.metadatareading.fetchMetadata
import io.github.typesafegithub.workflows.metadatareading.prettyPrint
import io.ktor.client.request.bearerAuth
import io.ktor.client.request.get
import io.ktor.client.statement.bodyAsText
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
package io.github.typesafegithub.workflows.codegenerator.versions

import io.github.typesafegithub.workflows.actionbindinggenerator.prettyPrint
import io.github.typesafegithub.workflows.actionsmetadata.bindingsToGenerate
import io.github.typesafegithub.workflows.actionsmetadata.model.ActionCoords
import io.github.typesafegithub.workflows.actionsmetadata.model.Version
import io.github.typesafegithub.workflows.actionsmetadata.model.isTopLevel
import io.github.typesafegithub.workflows.metadatareading.prettyPrint
import java.io.File

/**
Expand Down
9 changes: 9 additions & 0 deletions automation/metadata-reading/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
plugins {
buildsrc.convention.`kotlin-jvm`
kotlin("plugin.serialization")
}

dependencies {
implementation(projects.automation.typings)
implementation("com.charleskorn.kaml:kaml:0.55.0")
}
Loading

0 comments on commit 84a604e

Please sign in to comment.