Skip to content

Commit 4b531e2

Browse files
authored
chore(dsl)!: restructure API for configuring YAML consistency check job (#1444)
Part of #1412.
1 parent 51d512c commit 4b531e2

File tree

7 files changed

+110
-62
lines changed

7 files changed

+110
-62
lines changed

.github/workflows/end-to-end-tests.main.kts

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import io.github.typesafegithub.workflows.dsl.JobBuilder
2424
import io.github.typesafegithub.workflows.dsl.expressions.Contexts
2525
import io.github.typesafegithub.workflows.dsl.expressions.expr
2626
import io.github.typesafegithub.workflows.dsl.workflow
27+
import io.github.typesafegithub.workflows.yaml.DEFAULT_CONSISTENCY_CHECK_JOB_CONFIG
2728
import io.github.typesafegithub.workflows.updates.reportAvailableUpdates
2829
import java.time.Instant
2930

@@ -48,12 +49,14 @@ workflow(
4849
Push(branches = listOf("main")),
4950
PullRequest(),
5051
),
51-
yamlConsistencyJobEnv = mapOf(
52-
"GITHUB_TOKEN" to expr("secrets.GITHUB_TOKEN")
52+
consistencyCheckJobConfig = DEFAULT_CONSISTENCY_CHECK_JOB_CONFIG.copy(
53+
env = mapOf(
54+
"GITHUB_TOKEN" to expr("secrets.GITHUB_TOKEN")
55+
),
56+
additionalSteps = {
57+
publishToMavenLocal()
58+
},
5359
),
54-
yamlConsistencyJobAdditionalSteps = {
55-
publishToMavenLocal()
56-
},
5760
sourceFile = __FILE__,
5861
) {
5962
val GREETING by Contexts.env

github-workflows-kt/api/github-workflows-kt.api

Lines changed: 43 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -484,34 +484,30 @@ public abstract interface class io/github/typesafegithub/workflows/domain/WithOu
484484
}
485485

486486
public final class io/github/typesafegithub/workflows/domain/Workflow : io/github/typesafegithub/workflows/dsl/HasCustomArguments {
487-
public fun <init> (Ljava/lang/String;Ljava/util/List;Ljava/util/Map;Ljava/io/File;Ljava/lang/String;Lio/github/typesafegithub/workflows/domain/Concurrency;Ljava/util/Map;Ljava/lang/String;Ljava/util/Map;Lkotlin/jvm/functions/Function1;Ljava/util/List;Ljava/util/Map;)V
488-
public synthetic fun <init> (Ljava/lang/String;Ljava/util/List;Ljava/util/Map;Ljava/io/File;Ljava/lang/String;Lio/github/typesafegithub/workflows/domain/Concurrency;Ljava/util/Map;Ljava/lang/String;Ljava/util/Map;Lkotlin/jvm/functions/Function1;Ljava/util/List;Ljava/util/Map;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
487+
public fun <init> (Ljava/lang/String;Ljava/util/List;Ljava/util/Map;Ljava/io/File;Ljava/lang/String;Lio/github/typesafegithub/workflows/yaml/ConsistencyCheckJobConfig;Lio/github/typesafegithub/workflows/domain/Concurrency;Ljava/util/Map;Ljava/util/List;Ljava/util/Map;)V
488+
public synthetic fun <init> (Ljava/lang/String;Ljava/util/List;Ljava/util/Map;Ljava/io/File;Ljava/lang/String;Lio/github/typesafegithub/workflows/yaml/ConsistencyCheckJobConfig;Lio/github/typesafegithub/workflows/domain/Concurrency;Ljava/util/Map;Ljava/util/List;Ljava/util/Map;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
489489
public final fun component1 ()Ljava/lang/String;
490-
public final fun component10 ()Lkotlin/jvm/functions/Function1;
491-
public final fun component11 ()Ljava/util/List;
492-
public final fun component12 ()Ljava/util/Map;
490+
public final fun component10 ()Ljava/util/Map;
493491
public final fun component2 ()Ljava/util/List;
494492
public final fun component3 ()Ljava/util/Map;
495493
public final fun component4 ()Ljava/io/File;
496494
public final fun component5 ()Ljava/lang/String;
497-
public final fun component6 ()Lio/github/typesafegithub/workflows/domain/Concurrency;
498-
public final fun component7 ()Ljava/util/Map;
499-
public final fun component8 ()Ljava/lang/String;
500-
public final fun component9 ()Ljava/util/Map;
501-
public final fun copy (Ljava/lang/String;Ljava/util/List;Ljava/util/Map;Ljava/io/File;Ljava/lang/String;Lio/github/typesafegithub/workflows/domain/Concurrency;Ljava/util/Map;Ljava/lang/String;Ljava/util/Map;Lkotlin/jvm/functions/Function1;Ljava/util/List;Ljava/util/Map;)Lio/github/typesafegithub/workflows/domain/Workflow;
502-
public static synthetic fun copy$default (Lio/github/typesafegithub/workflows/domain/Workflow;Ljava/lang/String;Ljava/util/List;Ljava/util/Map;Ljava/io/File;Ljava/lang/String;Lio/github/typesafegithub/workflows/domain/Concurrency;Ljava/util/Map;Ljava/lang/String;Ljava/util/Map;Lkotlin/jvm/functions/Function1;Ljava/util/List;Ljava/util/Map;ILjava/lang/Object;)Lio/github/typesafegithub/workflows/domain/Workflow;
495+
public final fun component6 ()Lio/github/typesafegithub/workflows/yaml/ConsistencyCheckJobConfig;
496+
public final fun component7 ()Lio/github/typesafegithub/workflows/domain/Concurrency;
497+
public final fun component8 ()Ljava/util/Map;
498+
public final fun component9 ()Ljava/util/List;
499+
public final fun copy (Ljava/lang/String;Ljava/util/List;Ljava/util/Map;Ljava/io/File;Ljava/lang/String;Lio/github/typesafegithub/workflows/yaml/ConsistencyCheckJobConfig;Lio/github/typesafegithub/workflows/domain/Concurrency;Ljava/util/Map;Ljava/util/List;Ljava/util/Map;)Lio/github/typesafegithub/workflows/domain/Workflow;
500+
public static synthetic fun copy$default (Lio/github/typesafegithub/workflows/domain/Workflow;Ljava/lang/String;Ljava/util/List;Ljava/util/Map;Ljava/io/File;Ljava/lang/String;Lio/github/typesafegithub/workflows/yaml/ConsistencyCheckJobConfig;Lio/github/typesafegithub/workflows/domain/Concurrency;Ljava/util/Map;Ljava/util/List;Ljava/util/Map;ILjava/lang/Object;)Lio/github/typesafegithub/workflows/domain/Workflow;
503501
public fun equals (Ljava/lang/Object;)Z
504502
public final fun getConcurrency ()Lio/github/typesafegithub/workflows/domain/Concurrency;
503+
public final fun getConsistencyCheckJobConfig ()Lio/github/typesafegithub/workflows/yaml/ConsistencyCheckJobConfig;
505504
public final fun getEnv ()Ljava/util/Map;
506505
public final fun getJobs ()Ljava/util/List;
507506
public final fun getName ()Ljava/lang/String;
508507
public final fun getOn ()Ljava/util/List;
509508
public final fun getPermissions ()Ljava/util/Map;
510509
public final fun getSourceFile ()Ljava/io/File;
511510
public final fun getTargetFileName ()Ljava/lang/String;
512-
public final fun getYamlConsistencyJobAdditionalSteps ()Lkotlin/jvm/functions/Function1;
513-
public final fun getYamlConsistencyJobCondition ()Ljava/lang/String;
514-
public final fun getYamlConsistencyJobEnv ()Ljava/util/Map;
515511
public fun get_customArguments ()Ljava/util/Map;
516512
public fun hashCode ()I
517513
public fun toString ()Ljava/lang/String;
@@ -1899,8 +1895,8 @@ public final class io/github/typesafegithub/workflows/dsl/JobBuilder : io/github
18991895
}
19001896

19011897
public final class io/github/typesafegithub/workflows/dsl/WorkflowBuilder {
1902-
public fun <init> (Ljava/lang/String;Ljava/util/List;Ljava/util/Map;Ljava/io/File;Ljava/lang/String;Lio/github/typesafegithub/workflows/domain/Concurrency;Ljava/nio/file/Path;Ljava/lang/String;Ljava/util/Map;Lkotlin/jvm/functions/Function1;Ljava/util/List;Ljava/util/Map;Ljava/util/Map;)V
1903-
public synthetic fun <init> (Ljava/lang/String;Ljava/util/List;Ljava/util/Map;Ljava/io/File;Ljava/lang/String;Lio/github/typesafegithub/workflows/domain/Concurrency;Ljava/nio/file/Path;Ljava/lang/String;Ljava/util/Map;Lkotlin/jvm/functions/Function1;Ljava/util/List;Ljava/util/Map;Ljava/util/Map;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
1898+
public fun <init> (Ljava/lang/String;Ljava/util/List;Ljava/util/Map;Ljava/io/File;Ljava/lang/String;Lio/github/typesafegithub/workflows/yaml/ConsistencyCheckJobConfig;Lio/github/typesafegithub/workflows/domain/Concurrency;Ljava/nio/file/Path;Ljava/util/List;Ljava/util/Map;Ljava/util/Map;)V
1899+
public synthetic fun <init> (Ljava/lang/String;Ljava/util/List;Ljava/util/Map;Ljava/io/File;Ljava/lang/String;Lio/github/typesafegithub/workflows/yaml/ConsistencyCheckJobConfig;Lio/github/typesafegithub/workflows/domain/Concurrency;Ljava/nio/file/Path;Ljava/util/List;Ljava/util/Map;Ljava/util/Map;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
19041900
public final fun build ()Lio/github/typesafegithub/workflows/domain/Workflow;
19051901
public final fun getGitRootDir ()Ljava/nio/file/Path;
19061902
public final fun job ([Lkotlin/Unit;Ljava/lang/String;Ljava/lang/String;Lio/github/typesafegithub/workflows/domain/RunnerType;Ljava/util/List;Ljava/lang/String;Ljava/lang/String;Ljava/util/Map;Ljava/util/Map;Ljava/util/Map;Ljava/util/Map;Ljava/lang/Integer;Lio/github/typesafegithub/workflows/domain/Concurrency;Lio/github/typesafegithub/workflows/domain/Container;Lio/github/typesafegithub/workflows/domain/Environment;Ljava/util/Map;Lio/github/typesafegithub/workflows/domain/JobOutputs;Lkotlin/jvm/functions/Function1;)Lio/github/typesafegithub/workflows/domain/Job;
@@ -1911,8 +1907,8 @@ public final class io/github/typesafegithub/workflows/dsl/WorkflowBuilder {
19111907

19121908
public final class io/github/typesafegithub/workflows/dsl/WorkflowBuilderKt {
19131909
public static final fun toBuilder (Lio/github/typesafegithub/workflows/domain/Workflow;)Lio/github/typesafegithub/workflows/dsl/WorkflowBuilder;
1914-
public static final fun workflow ([Lkotlin/Unit;Ljava/lang/String;Ljava/util/List;Ljava/util/Map;Ljava/io/File;Ljava/lang/String;Lio/github/typesafegithub/workflows/domain/Concurrency;Ljava/lang/String;Ljava/util/Map;Lkotlin/jvm/functions/Function1;Ljava/util/Map;ZLjava/nio/file/Path;Lio/github/typesafegithub/workflows/yaml/Preamble;Lkotlin/jvm/functions/Function1;Ljava/util/Map;Lkotlin/jvm/functions/Function1;)Lio/github/typesafegithub/workflows/domain/Workflow;
1915-
public static synthetic fun workflow$default ([Lkotlin/Unit;Ljava/lang/String;Ljava/util/List;Ljava/util/Map;Ljava/io/File;Ljava/lang/String;Lio/github/typesafegithub/workflows/domain/Concurrency;Ljava/lang/String;Ljava/util/Map;Lkotlin/jvm/functions/Function1;Ljava/util/Map;ZLjava/nio/file/Path;Lio/github/typesafegithub/workflows/yaml/Preamble;Lkotlin/jvm/functions/Function1;Ljava/util/Map;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Lio/github/typesafegithub/workflows/domain/Workflow;
1910+
public static final fun workflow ([Lkotlin/Unit;Ljava/lang/String;Ljava/util/List;Ljava/util/Map;Ljava/io/File;Ljava/lang/String;Lio/github/typesafegithub/workflows/domain/Concurrency;Lio/github/typesafegithub/workflows/yaml/ConsistencyCheckJobConfig;Ljava/util/Map;Ljava/nio/file/Path;Lio/github/typesafegithub/workflows/yaml/Preamble;Lkotlin/jvm/functions/Function1;Ljava/util/Map;Lkotlin/jvm/functions/Function1;)Lio/github/typesafegithub/workflows/domain/Workflow;
1911+
public static synthetic fun workflow$default ([Lkotlin/Unit;Ljava/lang/String;Ljava/util/List;Ljava/util/Map;Ljava/io/File;Ljava/lang/String;Lio/github/typesafegithub/workflows/domain/Concurrency;Lio/github/typesafegithub/workflows/yaml/ConsistencyCheckJobConfig;Ljava/util/Map;Ljava/nio/file/Path;Lio/github/typesafegithub/workflows/yaml/Preamble;Lkotlin/jvm/functions/Function1;Ljava/util/Map;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Lio/github/typesafegithub/workflows/domain/Workflow;
19161912
}
19171913

19181914
public final class io/github/typesafegithub/workflows/dsl/expressions/Contexts : io/github/typesafegithub/workflows/dsl/expressions/contexts/FunctionsContext {
@@ -3127,6 +3123,35 @@ public final class io/github/typesafegithub/workflows/yaml/CaseKt {
31273123
public static final fun snakeCaseOf (Ljava/lang/String;)Ljava/lang/String;
31283124
}
31293125

3126+
public abstract interface class io/github/typesafegithub/workflows/yaml/ConsistencyCheckJobConfig {
3127+
}
3128+
3129+
public final class io/github/typesafegithub/workflows/yaml/ConsistencyCheckJobConfig$Configuration : io/github/typesafegithub/workflows/yaml/ConsistencyCheckJobConfig {
3130+
public fun <init> (Ljava/lang/String;Ljava/util/Map;Lkotlin/jvm/functions/Function1;)V
3131+
public final fun component1 ()Ljava/lang/String;
3132+
public final fun component2 ()Ljava/util/Map;
3133+
public final fun component3 ()Lkotlin/jvm/functions/Function1;
3134+
public final fun copy (Ljava/lang/String;Ljava/util/Map;Lkotlin/jvm/functions/Function1;)Lio/github/typesafegithub/workflows/yaml/ConsistencyCheckJobConfig$Configuration;
3135+
public static synthetic fun copy$default (Lio/github/typesafegithub/workflows/yaml/ConsistencyCheckJobConfig$Configuration;Ljava/lang/String;Ljava/util/Map;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Lio/github/typesafegithub/workflows/yaml/ConsistencyCheckJobConfig$Configuration;
3136+
public fun equals (Ljava/lang/Object;)Z
3137+
public final fun getAdditionalSteps ()Lkotlin/jvm/functions/Function1;
3138+
public final fun getCondition ()Ljava/lang/String;
3139+
public final fun getEnv ()Ljava/util/Map;
3140+
public fun hashCode ()I
3141+
public fun toString ()Ljava/lang/String;
3142+
}
3143+
3144+
public final class io/github/typesafegithub/workflows/yaml/ConsistencyCheckJobConfig$Disabled : io/github/typesafegithub/workflows/yaml/ConsistencyCheckJobConfig {
3145+
public static final field INSTANCE Lio/github/typesafegithub/workflows/yaml/ConsistencyCheckJobConfig$Disabled;
3146+
public fun equals (Ljava/lang/Object;)Z
3147+
public fun hashCode ()I
3148+
public fun toString ()Ljava/lang/String;
3149+
}
3150+
3151+
public final class io/github/typesafegithub/workflows/yaml/ConsistencyCheckJobConfigKt {
3152+
public static final fun getDEFAULT_CONSISTENCY_CHECK_JOB_CONFIG ()Lio/github/typesafegithub/workflows/yaml/ConsistencyCheckJobConfig$Configuration;
3153+
}
3154+
31303155
public final class io/github/typesafegithub/workflows/yaml/JobsToYamlKt {
31313156
public static final fun toYaml (Lio/github/typesafegithub/workflows/domain/RunnerType;)Ljava/lang/Object;
31323157
}

github-workflows-kt/src/main/kotlin/io/github/typesafegithub/workflows/domain/Workflow.kt

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ package io.github.typesafegithub.workflows.domain
22

33
import io.github.typesafegithub.workflows.domain.triggers.Trigger
44
import io.github.typesafegithub.workflows.dsl.HasCustomArguments
5-
import io.github.typesafegithub.workflows.dsl.JobBuilder
5+
import io.github.typesafegithub.workflows.yaml.ConsistencyCheckJobConfig
66
import kotlinx.serialization.Contextual
77
import java.io.File
88

@@ -12,11 +12,9 @@ public data class Workflow(
1212
val env: Map<String, String>,
1313
val sourceFile: File?,
1414
val targetFileName: String?,
15+
val consistencyCheckJobConfig: ConsistencyCheckJobConfig,
1516
val concurrency: Concurrency? = null,
1617
val permissions: Map<Permission, Mode>? = null,
17-
val yamlConsistencyJobCondition: String? = null,
18-
val yamlConsistencyJobEnv: Map<String, String> = mapOf(),
19-
val yamlConsistencyJobAdditionalSteps: (JobBuilder<JobOutputs.EMPTY>.() -> Unit)? = null,
2018
val jobs: List<Job<*>>,
2119
override val _customArguments: Map<String, @Contextual Any?> = mapOf(),
2220
) : HasCustomArguments

github-workflows-kt/src/main/kotlin/io/github/typesafegithub/workflows/dsl/WorkflowBuilder.kt

Lines changed: 13 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,9 @@ import io.github.typesafegithub.workflows.domain.RunnerType
1111
import io.github.typesafegithub.workflows.domain.Workflow
1212
import io.github.typesafegithub.workflows.domain.triggers.Trigger
1313
import io.github.typesafegithub.workflows.shared.internal.findGitRoot
14+
import io.github.typesafegithub.workflows.yaml.ConsistencyCheckJobConfig
15+
import io.github.typesafegithub.workflows.yaml.ConsistencyCheckJobConfig.Disabled
16+
import io.github.typesafegithub.workflows.yaml.DEFAULT_CONSISTENCY_CHECK_JOB_CONFIG
1417
import io.github.typesafegithub.workflows.yaml.Preamble
1518
import io.github.typesafegithub.workflows.yaml.writeToFile
1619
import kotlinx.serialization.Contextual
@@ -26,11 +29,9 @@ public class WorkflowBuilder(
2629
env: Map<String, String> = mapOf(),
2730
sourceFile: File?,
2831
targetFileName: String?,
32+
consistencyCheckJobConfig: ConsistencyCheckJobConfig,
2933
concurrency: Concurrency? = null,
3034
public val gitRootDir: Path? = null,
31-
yamlConsistencyJobCondition: String? = null,
32-
yamlConsistencyJobEnv: Map<String, String> = mapOf(),
33-
yamlConsistencyJobAdditionalSteps: (JobBuilder<JobOutputs.EMPTY>.() -> Unit)? = null,
3435
jobs: List<Job<*>> = emptyList(),
3536
permissions: Map<Permission, Mode>? = null,
3637
_customArguments: Map<String, @Contextual Any?>,
@@ -45,9 +46,7 @@ public class WorkflowBuilder(
4546
jobs = jobs,
4647
permissions = permissions,
4748
concurrency = concurrency,
48-
yamlConsistencyJobCondition = yamlConsistencyJobCondition,
49-
yamlConsistencyJobEnv = yamlConsistencyJobEnv,
50-
yamlConsistencyJobAdditionalSteps = yamlConsistencyJobAdditionalSteps,
49+
consistencyCheckJobConfig = consistencyCheckJobConfig,
5150
_customArguments = _customArguments,
5251
)
5352

@@ -159,6 +158,7 @@ public fun Workflow.toBuilder(): WorkflowBuilder =
159158
sourceFile = sourceFile,
160159
permissions = permissions,
161160
targetFileName = targetFileName,
161+
consistencyCheckJobConfig = consistencyCheckJobConfig,
162162
jobs = jobs,
163163
_customArguments = _customArguments,
164164
)
@@ -176,11 +176,13 @@ public fun workflow(
176176
it.toString().substringBeforeLast(".main.kts") + ".yaml"
177177
},
178178
concurrency: Concurrency? = null,
179-
yamlConsistencyJobCondition: String? = null,
180-
yamlConsistencyJobEnv: Map<String, String> = mapOf(),
181-
yamlConsistencyJobAdditionalSteps: (JobBuilder<JobOutputs.EMPTY>.() -> Unit)? = null,
179+
consistencyCheckJobConfig: ConsistencyCheckJobConfig =
180+
if (sourceFile != null) {
181+
DEFAULT_CONSISTENCY_CHECK_JOB_CONFIG
182+
} else {
183+
Disabled
184+
},
182185
permissions: Map<Permission, Mode>? = null,
183-
addConsistencyCheck: Boolean = sourceFile != null,
184186
gitRootDir: Path? = sourceFile?.toPath()?.absolute()?.findGitRoot(),
185187
preamble: Preamble? = null,
186188
getenv: (String) -> String? = { System.getenv(it) },
@@ -201,9 +203,7 @@ public fun workflow(
201203
permissions = permissions,
202204
concurrency = concurrency,
203205
gitRootDir = gitRootDir,
204-
yamlConsistencyJobCondition = yamlConsistencyJobCondition,
205-
yamlConsistencyJobEnv = yamlConsistencyJobEnv,
206-
yamlConsistencyJobAdditionalSteps = yamlConsistencyJobAdditionalSteps,
206+
consistencyCheckJobConfig = consistencyCheckJobConfig,
207207
_customArguments = _customArguments,
208208
)
209209
workflowBuilder.block()
@@ -216,7 +216,6 @@ public fun workflow(
216216
return workflowBuilder.build()
217217
.also {
218218
it.writeToFile(
219-
addConsistencyCheck = addConsistencyCheck,
220219
gitRootDir = gitRootDir,
221220
preamble = preamble,
222221
getenv = getenv,
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package io.github.typesafegithub.workflows.yaml
2+
3+
import io.github.typesafegithub.workflows.domain.JobOutputs
4+
import io.github.typesafegithub.workflows.dsl.JobBuilder
5+
6+
public val DEFAULT_CONSISTENCY_CHECK_JOB_CONFIG: ConsistencyCheckJobConfig.Configuration =
7+
ConsistencyCheckJobConfig.Configuration(
8+
condition = null,
9+
env = emptyMap(),
10+
additionalSteps = null,
11+
)
12+
13+
public sealed interface ConsistencyCheckJobConfig {
14+
public data object Disabled : ConsistencyCheckJobConfig
15+
16+
public data class Configuration(
17+
val condition: String?,
18+
val env: Map<String, String>,
19+
val additionalSteps: (JobBuilder<JobOutputs.EMPTY>.() -> Unit)?,
20+
) : ConsistencyCheckJobConfig
21+
}

0 commit comments

Comments
 (0)