Skip to content

Commit

Permalink
fix(automation): remove caching of action.yml and action-types.yml (#…
Browse files Browse the repository at this point in the history
…1160)

Closes #1159.
  • Loading branch information
krzema12 committed Dec 5, 2023
1 parent 22f241a commit a2489c7
Show file tree
Hide file tree
Showing 7 changed files with 5 additions and 84 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -69,8 +69,8 @@ public final class io/github/typesafegithub/workflows/actionbindinggenerator/Gen
}

public final class io/github/typesafegithub/workflows/actionbindinggenerator/GenerationKt {
public static final fun generateBinding (Lio/github/typesafegithub/workflows/actionbindinggenerator/ActionCoords;Lio/github/typesafegithub/workflows/actionbindinggenerator/MetadataRevision;ZLio/github/typesafegithub/workflows/actionbindinggenerator/Metadata;Lkotlin/Pair;Z)Lio/github/typesafegithub/workflows/actionbindinggenerator/ActionBinding;
public static synthetic fun generateBinding$default (Lio/github/typesafegithub/workflows/actionbindinggenerator/ActionCoords;Lio/github/typesafegithub/workflows/actionbindinggenerator/MetadataRevision;ZLio/github/typesafegithub/workflows/actionbindinggenerator/Metadata;Lkotlin/Pair;ZILjava/lang/Object;)Lio/github/typesafegithub/workflows/actionbindinggenerator/ActionBinding;
public static final fun generateBinding (Lio/github/typesafegithub/workflows/actionbindinggenerator/ActionCoords;Lio/github/typesafegithub/workflows/actionbindinggenerator/MetadataRevision;Lio/github/typesafegithub/workflows/actionbindinggenerator/Metadata;Lkotlin/Pair;Z)Lio/github/typesafegithub/workflows/actionbindinggenerator/ActionBinding;
public static synthetic fun generateBinding$default (Lio/github/typesafegithub/workflows/actionbindinggenerator/ActionCoords;Lio/github/typesafegithub/workflows/actionbindinggenerator/MetadataRevision;Lio/github/typesafegithub/workflows/actionbindinggenerator/Metadata;Lkotlin/Pair;ZILjava/lang/Object;)Lio/github/typesafegithub/workflows/actionbindinggenerator/ActionBinding;
}

public final class io/github/typesafegithub/workflows/actionbindinggenerator/Input {
Expand Down Expand Up @@ -142,10 +142,6 @@ public final class io/github/typesafegithub/workflows/actionbindinggenerator/Met
public final fun serializer ()Lkotlinx/serialization/KSerializer;
}

public final class io/github/typesafegithub/workflows/actionbindinggenerator/MetadataReadingKt {
public static final fun deleteActionYamlCacheIfObsolete ()V
}

public abstract interface class io/github/typesafegithub/workflows/actionbindinggenerator/MetadataRevision {
}

Expand Down Expand Up @@ -185,16 +181,11 @@ public final class io/github/typesafegithub/workflows/actionbindinggenerator/Out
public final fun serializer ()Lkotlinx/serialization/KSerializer;
}

public final class io/github/typesafegithub/workflows/actionbindinggenerator/TypesProvidingKt {
public static final fun deleteActionTypesYamlCacheIfObsolete ()V
}

public abstract interface class io/github/typesafegithub/workflows/actionbindinggenerator/Typing {
}

public final class io/github/typesafegithub/workflows/actionbindinggenerator/TypingActualSource : java/lang/Enum {
public static final field ACTION Lio/github/typesafegithub/workflows/actionbindinggenerator/TypingActualSource;
public static final field CACHE Lio/github/typesafegithub/workflows/actionbindinggenerator/TypingActualSource;
public static final field TYPING_CATALOG Lio/github/typesafegithub/workflows/actionbindinggenerator/TypingActualSource;
public static fun getEntries ()Lkotlin/enums/EnumEntries;
public static fun valueOf (Ljava/lang/String;)Lio/github/typesafegithub/workflows/actionbindinggenerator/TypingActualSource;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,9 +40,8 @@ private object Properties {

public fun ActionCoords.generateBinding(
metadataRevision: MetadataRevision,
useCache: Boolean = true,
metadata: Metadata = this.fetchMetadata(metadataRevision, useCache = useCache),
inputTypings: Pair<Map<String, Typing>, TypingActualSource?> = provideTypes(metadataRevision, useCache = useCache),
metadata: Metadata = this.fetchMetadata(metadataRevision),
inputTypings: Pair<Map<String, Typing>, TypingActualSource?> = provideTypes(metadataRevision),
generateForScript: Boolean = false,
): ActionBinding {
require(this.version.removePrefix("v").toIntOrNull() != null) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,9 @@ package io.github.typesafegithub.workflows.actionbindinggenerator

import kotlinx.serialization.Serializable
import kotlinx.serialization.decodeFromString
import java.io.File
import java.io.IOException
import java.net.URI
import java.nio.file.Path
import java.time.LocalDate

/**
* [Metadata syntax for GitHub Actions](https://docs.github.com/en/actions/creating-actions/metadata-syntax-for-github-actions).
Expand Down Expand Up @@ -49,17 +47,8 @@ internal val ActionCoords.gitHubUrl: String get() = "https://github.com/$owner/$

internal fun ActionCoords.fetchMetadata(
metadataRevision: MetadataRevision,
useCache: Boolean = true,
fetchUri: (URI) -> String = ::fetchUri,
): Metadata {
if (useCache) {
val cacheFile = actionYamlDir.resolve("$owner-${name.replace('/', '_')}-$version.yml")
if (cacheFile.canRead()) {
println(" ... from cache: $cacheFile")
return myYaml.decodeFromString(cacheFile.readText())
}
}

val gitRef =
when (metadataRevision) {
is CommitHash -> metadataRevision.value
Expand All @@ -80,29 +69,10 @@ internal fun ActionCoords.fetchMetadata(
"Check release page $releasesUrl",
)

if (useCache) {
val cacheFile = actionYamlDir.resolve("$owner-${name.replace('/', '_')}-$version.yml")
cacheFile.parentFile.mkdirs()
cacheFile.writeText(metadataYaml)
}
return myYaml.decodeFromString(metadataYaml)
}

private fun ActionCoords.getCommitHashFromFileSystem(): String =
Path.of("actions", owner, name.substringBefore('/'), version, "commit-hash.txt").toFile().readText().trim()

internal fun fetchUri(uri: URI): String = uri.toURL().readText()

private val actionYamlDir: File = File("build/action-yaml")

public fun deleteActionYamlCacheIfObsolete() {
val today = LocalDate.now().toString()
val dateTxt = actionYamlDir.resolve("date.txt")
val cacheUpToDate = dateTxt.canRead() && dateTxt.readText() == today

if (!cacheUpToDate) {
actionYamlDir.deleteRecursively()
actionYamlDir.mkdirs()
dateTxt.writeText(today)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,41 +2,23 @@ package io.github.typesafegithub.workflows.actionbindinggenerator

import com.charleskorn.kaml.Yaml
import io.github.typesafegithub.workflows.actionbindinggenerator.TypingActualSource.ACTION
import io.github.typesafegithub.workflows.actionbindinggenerator.TypingActualSource.CACHE
import io.github.typesafegithub.workflows.actionbindinggenerator.TypingActualSource.TYPING_CATALOG
import kotlinx.serialization.decodeFromString
import java.io.File
import java.io.IOException
import java.net.URI
import java.nio.file.Path
import java.time.LocalDate

internal fun ActionCoords.provideTypes(
metadataRevision: MetadataRevision,
fetchUri: (URI) -> String = ::fetchUri,
useCache: Boolean = true,
): Pair<Map<String, Typing>, TypingActualSource?> =
(
this.fetchTypingMetadata(metadataRevision, fetchUri, useCache = useCache)
this.fetchTypingMetadata(metadataRevision, fetchUri)
?: this.fetchFromTypingsFromCatalog(fetchUri)
)
?.let { Pair(it.first.toTypesMap(), it.second) }
?: Pair(emptyMap(), null)

private val actionTypesYamlDir: File = File("build/action-types-yaml")

public fun deleteActionTypesYamlCacheIfObsolete() {
val today = LocalDate.now().toString()
val dateTxt = actionTypesYamlDir.resolve("date.txt")
val cacheUpToDate = dateTxt.canRead() && dateTxt.readText() == today

if (!cacheUpToDate) {
actionTypesYamlDir.deleteRecursively()
actionTypesYamlDir.mkdir()
dateTxt.writeText(today)
}
}

private fun ActionCoords.actionTypesYmlUrl(gitRef: String) =
"https://raw.githubusercontent.com/$owner/$repoName/$gitRef/$subName/action-types.yml"

Expand All @@ -50,16 +32,7 @@ private fun ActionCoords.actionTypesYamlUrl(gitRef: String) =
private fun ActionCoords.fetchTypingMetadata(
metadataRevision: MetadataRevision,
fetchUri: (URI) -> String = ::fetchUri,
useCache: Boolean,
): Pair<ActionTypes, TypingActualSource>? {
val cacheFile = actionTypesYamlDir.resolve("$owner-${name.replace('/', '_')}-$version.yml")
if (useCache) {
if (cacheFile.canRead()) {
println(" ... types from cache: $cacheFile")
return Pair(myYaml.decodeFromStringOrDefaultIfEmpty(cacheFile.readText(), ActionTypes()), CACHE)
}
}

val gitRef =
when (metadataRevision) {
is CommitHash -> metadataRevision.value
Expand All @@ -77,11 +50,6 @@ private fun ActionCoords.fetchTypingMetadata(
}
} ?: return null

if (useCache) {
cacheFile.parentFile.mkdirs()
cacheFile.writeText(typesMetadataYaml)
}

return Pair(myYaml.decodeFromStringOrDefaultIfEmpty(typesMetadataYaml, ActionTypes()), ACTION)
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,4 @@ package io.github.typesafegithub.workflows.actionbindinggenerator
public enum class TypingActualSource {
ACTION,
TYPING_CATALOG,
CACHE,
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,6 @@ package io.github.typesafegithub.workflows.codegenerator

import io.github.typesafegithub.workflows.actionbindinggenerator.ActionBinding
import io.github.typesafegithub.workflows.actionbindinggenerator.FromLockfile
import io.github.typesafegithub.workflows.actionbindinggenerator.deleteActionTypesYamlCacheIfObsolete
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.actionsmetadata.bindingsToGenerate
Expand All @@ -24,9 +22,6 @@ fun main() {
}

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

val requestsAndBindings =
bindingsToGenerate.map { actionBindingRequest ->
println("Generating ${actionBindingRequest.actionCoords.prettyPrint}")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,6 @@ private suspend fun createPullRequest(
private fun ActionBindingRequest.generateBindingForCommit(commitHash: String): ActionBinding =
actionCoords.generateBinding(
metadataRevision = CommitHash(commitHash),
useCache = false,
)

private suspend fun ActionCoords.fetchCommitHash(githubToken: String): String? {
Expand Down

0 comments on commit a2489c7

Please sign in to comment.