Skip to content

Commit 144f38e

Browse files
committed
[#7] Compare existence of inputs and outputs in both manifests
1 parent 39ca5c8 commit 144f38e

File tree

3 files changed

+54
-6
lines changed

3 files changed

+54
-6
lines changed

src/main/kotlin/it/krzeminski/githubactionstyping/Main.kt

+32-4
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,42 @@
11
package it.krzeminski.githubactionstyping
22

33
import it.krzeminski.githubactionstyping.github.getBooleanInput
4+
import it.krzeminski.githubactionstyping.parsing.parseManifest
45
import it.krzeminski.githubactionstyping.parsing.parseTypesManifest
5-
import it.krzeminski.githubactionstyping.parsing.readActionTypesManifest
6+
import it.krzeminski.githubactionstyping.parsing.readYamlFile
67
import it.krzeminski.githubactionstyping.reporting.toPlaintextReport
78
import it.krzeminski.githubactionstyping.validation.ItemValidationResult
89
import it.krzeminski.githubactionstyping.validation.validate
910
import kotlin.system.exitProcess
1011

1112
fun main() {
12-
val manifest = readActionTypesManifest() ?: run {
13+
val typesManifest = readYamlFile("action-types") ?: run {
1314
println("No types manifest (action-types.yml or action-types.yaml) found!")
1415
exitProcess(1)
1516
throw IllegalStateException()
1617
}
17-
val parsedManifest = parseTypesManifest(manifest)
18+
val parsedTypesManifest = parseTypesManifest(typesManifest)
19+
20+
val manifest = readYamlFile("action") ?: run {
21+
println("No action manifest (action.yml or action.yaml) found!")
22+
exitProcess(1)
23+
throw IllegalStateException()
24+
}
25+
val parsedManifest = parseManifest(manifest)
26+
27+
val inputsInTypesManifest = parsedTypesManifest.inputs.keys
28+
val inputsInManifest = parsedManifest.inputs.keys
29+
30+
if (inputsInManifest != inputsInTypesManifest) {
31+
throw IllegalStateException("The same set of inputs should exist in action manifest and types manifest!")
32+
}
33+
34+
val outputsInTypesManifest = parsedTypesManifest.outputs.keys
35+
val outputsInManifest = parsedManifest.outputs.keys
36+
37+
if (outputsInManifest != outputsInTypesManifest) {
38+
throw IllegalStateException("The same set of outputs should exist in action manifest and types manifest!")
39+
}
1840

1941
if (getBooleanInput("verbose")) {
2042
println("Action's manifest:")
@@ -23,12 +45,18 @@ fun main() {
2345
println("Parsed manifest:")
2446
println(parsedManifest)
2547

48+
println("Action's types manifest:")
49+
println(typesManifest)
50+
51+
println("Parsed types manifest:")
52+
println(parsedTypesManifest)
53+
2654
println()
2755
println("==============================================")
2856
println()
2957
}
3058

31-
val validationResult = parsedManifest.validate()
59+
val validationResult = parsedTypesManifest.validate()
3260
println(validationResult.toPlaintextReport())
3361

3462
if (validationResult.overallResult is ItemValidationResult.Invalid) {
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package it.krzeminski.githubactionstyping.parsing
2+
3+
import com.charleskorn.kaml.Yaml
4+
import kotlinx.serialization.Serializable
5+
import kotlinx.serialization.decodeFromString
6+
7+
@Serializable
8+
data class Manifest(
9+
val inputs: Map<String, Unit> = emptyMap(),
10+
val outputs: Map<String, Unit> = emptyMap(),
11+
)
12+
13+
private val myYaml = Yaml(
14+
configuration = Yaml.default.configuration.copy(
15+
strictMode = false,
16+
)
17+
)
18+
19+
fun parseManifest(manifestString: String): Manifest =
20+
myYaml.decodeFromString(manifestString)

src/main/kotlin/it/krzeminski/githubactionstyping/parsing/TypesManifestReading.kt

+2-2
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@ package it.krzeminski.githubactionstyping.parsing
22

33
import java.io.File
44

5-
fun readActionTypesManifest(): String? =
5+
fun readYamlFile(nameWithoutExtension: String): String? =
66
listOf("yaml", "yml")
7-
.map { "action-types.$it" }
7+
.map { "$nameWithoutExtension.$it" }
88
.firstOrNull { File(it).exists() }
99
?.let { File(it).readText() }

0 commit comments

Comments
 (0)