Skip to content

Commit 78ce527

Browse files
committed
Adopt #2
1 parent 19088f7 commit 78ce527

File tree

3 files changed

+68
-73
lines changed

3 files changed

+68
-73
lines changed

build.gradle.kts

Lines changed: 42 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,6 @@ import org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsRootExtension
22
import org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsRootPlugin
33
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
44
import org.springframework.boot.gradle.tasks.bundling.BootJar
5-
import java.io.FileInputStream
6-
import java.util.Properties
75

86
val policy: String by System.getProperties()
97

@@ -63,8 +61,7 @@ setOf(
6361
}
6462
}
6563

66-
67-
val kotlinComposeWasmStdlibWasmFile: Configuration by configurations.creating {
64+
val kotlinComposeWasmStdlibFile: Configuration by configurations.creating {
6865
isTransitive = false
6966
isCanBeResolved = true
7067
isCanBeConsumed = false
@@ -106,41 +103,46 @@ dependencies {
106103
}
107104
testImplementation(libs.kotlinx.coroutines.test)
108105

109-
kotlinComposeWasmStdlibWasmFile(project(":cache-maker"))
106+
kotlinComposeWasmStdlibFile(project(":cache-maker"))
110107
}
111108

112-
fun buildPropertyFile() {
113-
rootDir.resolve("src/main/resources/${propertyFile}").apply {
114-
println("Generate properties into $absolutePath")
115-
parentFile.mkdirs()
116-
writeText(generateProperties())
109+
fun Project.generateProperties(
110+
prefix: String = "",
111+
): Map<String, String> = mapOf(
112+
"kotlin.version" to kotlinVersion,
113+
"policy.file" to prefix + policy,
114+
"indexes.file" to prefix + indexes,
115+
"indexesJs.file" to prefix + indexesJs,
116+
"indexesWasm.file" to prefix + indexesWasm,
117+
"indexesComposeWasm.file" to prefix + indexesComposeWasm,
118+
"libraries.folder.jvm" to prefix + libJVM,
119+
"libraries.folder.js" to prefix + libJS,
120+
"libraries.folder.wasm" to prefix + libWasm,
121+
"libraries.folder.compose-wasm" to prefix + libComposeWasm,
122+
"libraries.folder.compose-wasm-compiler-plugins" to prefix + libComposeWasmCompilerPlugins,
123+
"libraries.folder.compiler-plugins" to prefix + compilerPluginsForJVM,
124+
"spring.mvc.pathmatch.matching-strategy" to "ant_path_matcher",
125+
"server.compression.enabled" to "true",
126+
"server.compression.mime-types" to "application/json,text/javascript,application/wasm",
127+
"skiko.version" to libs.versions.skiko.get(),
128+
)
129+
130+
val propertiesGenerator by tasks.registering(PropertiesGenerator::class) {
131+
dependsOn(kotlinComposeWasmStdlibFile)
132+
propertiesFile.fileValue(rootDir.resolve("src/main/resources/${propertyFile}"))
133+
hashableFile.set(kotlinComposeWasmStdlibFile.singleFile)
134+
generateProperties().forEach { (name, value) ->
135+
propertiesMap.put(name, value)
117136
}
118137
}
119138

120-
fun generateProperties(prefix: String = "") = """
121-
# this file is autogenerated by build.gradle.kts
122-
kotlin.version=${kotlinVersion}
123-
policy.file=${prefix + policy}
124-
indexes.file=${prefix + indexes}
125-
indexesJs.file=${prefix + indexesJs}
126-
indexesWasm.file=${prefix + indexesWasm}
127-
indexesComposeWasm.file=${prefix + indexesComposeWasm}
128-
libraries.folder.jvm=${prefix + libJVM}
129-
libraries.folder.js=${prefix + libJS}
130-
libraries.folder.wasm=${prefix + libWasm}
131-
libraries.folder.compose-wasm=${prefix + libComposeWasm}
132-
libraries.folder.compose-wasm-compiler-plugins=${prefix + libComposeWasmCompilerPlugins}
133-
libraries.folder.compiler-plugins=${prefix + compilerPluginsForJVM}
134-
spring.mvc.pathmatch.matching-strategy=ant_path_matcher
135-
server.compression.enabled=true
136-
server.compression.mime-types=application/json,text/javascript,application/wasm
137-
skiko.version=${libs.versions.skiko.get()}
138-
""".trimIndent()
139-
140-
val composeWasmPropertiesUpdater by tasks.registering(ComposeWasmPropertiesUpdater::class) {
141-
dependsOn(kotlinComposeWasmStdlibWasmFile)
142-
propertiesPath.set(rootDir.resolve("src/main/resources/${propertyFile}").absolutePath)
143-
hashableFile.set(kotlinComposeWasmStdlibWasmFile.singleFile)
139+
val lambdaPropertiesGenerator by tasks.registering(PropertiesGenerator::class) {
140+
dependsOn(kotlinComposeWasmStdlibFile)
141+
propertiesFile.set(layout.buildDirectory.file("tmp/propertiesGenerator/${propertyFile}"))
142+
hashableFile.set(kotlinComposeWasmStdlibFile.singleFile)
143+
generateProperties(lambdaPrefix).forEach { (name, value) ->
144+
propertiesMap.put(name, value)
145+
}
144146
}
145147

146148
tasks.withType<KotlinCompile> {
@@ -149,8 +151,7 @@ tasks.withType<KotlinCompile> {
149151
}
150152
dependsOn(":executors:jar")
151153
dependsOn(":indexation:run")
152-
dependsOn(composeWasmPropertiesUpdater)
153-
buildPropertyFile()
154+
dependsOn(propertiesGenerator)
154155
}
155156
println("Using Kotlin compiler ${libs.versions.kotlin.get()}")
156157

@@ -161,19 +162,12 @@ tasks.withType<BootJar> {
161162

162163
val buildLambda by tasks.creating(Zip::class) {
163164
val propertyFile = propertyFile
164-
val propertyFileContent = generateProperties(lambdaPrefix)
165165

166166
from(tasks.compileKotlin)
167167
from(tasks.processResources) {
168-
eachFile {
169-
if (name == propertyFile) {
170-
val properties = Properties().apply { load(FileInputStream(file)) }
171-
val composeWasmHash = properties.get("dependencies.compose.wasm")
172-
file.writeText(propertyFileContent)
173-
file.appendText("\ndependencies.compose.wasm=$composeWasmHash")
174-
}
175-
}
168+
exclude(propertyFile)
176169
}
170+
from(lambdaPropertiesGenerator)
177171
from(policy)
178172
from(indexes)
179173
from(indexesJs)
@@ -183,16 +177,16 @@ val buildLambda by tasks.creating(Zip::class) {
183177
from(libWasmFolder) { into(libWasm) }
184178
from(libComposeWasmFolder) { into(libComposeWasm) }
185179
from(libJVMFolder) { into(libJVM) }
186-
from(compilerPluginsForJVMFolder) {into(compilerPluginsForJVM)}
180+
from(compilerPluginsForJVMFolder) { into(compilerPluginsForJVM) }
187181
from(libComposeWasmCompilerPluginsFolder) { into(libComposeWasmCompilerPlugins) }
188-
dependsOn(kotlinComposeWasmStdlibWasmFile)
182+
dependsOn(kotlinComposeWasmStdlibFile)
189183
into("lib") {
190184
from(configurations.compileClasspath) { exclude("tomcat-embed-*") }
191185
}
192186
}
193187

194188
tasks.named<Copy>("processResources") {
195-
dependsOn(composeWasmPropertiesUpdater)
189+
dependsOn(propertiesGenerator)
196190
}
197191

198192
tasks.withType<Test> {

buildSrc/src/main/kotlin/PropertiesUpdater.kt

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import org.gradle.api.DefaultTask
22
import org.gradle.api.file.RegularFileProperty
33
import org.gradle.api.provider.MapProperty
4-
import org.gradle.api.provider.Property
54
import org.gradle.api.tasks.Input
65
import org.gradle.api.tasks.InputFile
76
import org.gradle.api.tasks.OutputFile
@@ -10,10 +9,7 @@ import java.io.File
109
import java.io.FileInputStream
1110
import java.security.MessageDigest
1211

13-
abstract class ComposeWasmPropertiesUpdater : DefaultTask() {
14-
15-
@get:Input
16-
abstract val propertiesPath: Property<String>
12+
abstract class PropertiesGenerator : DefaultTask() {
1713

1814
@get:InputFile
1915
abstract val hashableFile: RegularFileProperty
@@ -22,11 +18,11 @@ abstract class ComposeWasmPropertiesUpdater : DefaultTask() {
2218
abstract val propertiesMap: MapProperty<String, String>
2319

2420
@get:OutputFile
25-
val updatedPropertiesFile: RegularFileProperty = project.objects.fileProperty().fileProvider(propertiesPath.map { File(it) })
21+
abstract val propertiesFile: RegularFileProperty
2622

2723
@TaskAction
2824
fun updateProperties() {
29-
val file = updatedPropertiesFile.get().asFile
25+
val file = propertiesFile.get().asFile
3026

3127
propertiesMap.get().let {
3228
if (it.isNotEmpty()) {

resource-server/build.gradle.kts

Lines changed: 23 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
11
import org.gradle.kotlin.dsl.support.serviceOf
2-
import org.gradle.kotlin.dsl.withType
32
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
43
import java.io.FileInputStream
5-
import java.util.Properties
4+
import java.util.*
65

76
plugins {
87
alias(libs.plugins.spring.dependency.management)
@@ -21,7 +20,7 @@ val resourceDependency: Configuration by configurations.creating {
2120
isCanBeConsumed = false
2221
}
2322

24-
val kotlinComposeWasmStdlibTypeInfo: Configuration by configurations.creating {
23+
val kotlinComposeWasmStdlibFile: Configuration by configurations.creating {
2524
isTransitive = false
2625
isCanBeResolved = true
2726
isCanBeConsumed = false
@@ -61,20 +60,20 @@ dependencies {
6160

6261
resourceDependency(libs.skiko.js.wasm.runtime)
6362
kotlinComposeWasmStdlib(project(":cache-maker"))
64-
kotlinComposeWasmStdlibTypeInfo(project(":cache-maker"))
63+
kotlinComposeWasmStdlibFile(project(":cache-maker"))
6564
}
6665

67-
val composeWasmPropertiesUpdater by tasks.registering(ComposeWasmPropertiesUpdater::class) {
68-
dependsOn(kotlinComposeWasmStdlibTypeInfo)
66+
val propertiesGenerator by tasks.registering(PropertiesGenerator::class) {
67+
dependsOn(kotlinComposeWasmStdlibFile)
6968
propertiesMap.put("spring.mvc.pathmatch.matching-strategy", "ant_path_matcher")
7069
propertiesMap.put("server.port", "8081")
7170
propertiesMap.put("skiko.version", libs.versions.skiko.get())
7271

7372
val applicationPropertiesPath = projectDir.resolve("src/main/resources/application.properties")
7473

75-
propertiesPath.set(applicationPropertiesPath.normalize().absolutePath)
74+
propertiesFile.fileValue(applicationPropertiesPath)
7675

77-
val composeWasmStdlibTypeInfo: FileCollection = kotlinComposeWasmStdlibTypeInfo
76+
val composeWasmStdlibTypeInfo: FileCollection = kotlinComposeWasmStdlibFile
7877

7978
hashableFile.fileProvider(
8079
provider {
@@ -84,15 +83,15 @@ val composeWasmPropertiesUpdater by tasks.registering(ComposeWasmPropertiesUpdat
8483
}
8584

8685
tasks.withType<KotlinCompile> {
87-
dependsOn(kotlinComposeWasmStdlibTypeInfo)
88-
dependsOn(composeWasmPropertiesUpdater)
86+
dependsOn(kotlinComposeWasmStdlibFile)
87+
dependsOn(propertiesGenerator)
8988
}
9089

9190
val skikoVersion = libs.versions.skiko
9291

9392
tasks.named<Copy>("processResources") {
94-
dependsOn(kotlinComposeWasmStdlibTypeInfo)
95-
dependsOn(composeWasmPropertiesUpdater)
93+
dependsOn(kotlinComposeWasmStdlibFile)
94+
dependsOn(propertiesGenerator)
9695
val archiveOperation = project.serviceOf<ArchiveOperations>()
9796
from(resourceDependency.map {
9897
archiveOperation.zipTree(it)
@@ -101,17 +100,23 @@ tasks.named<Copy>("processResources") {
101100
rename("skiko\\.(.*)", "skiko-${skikoVersion.get()}.\$1")
102101
}
103102

104-
val propertiesFile = composeWasmPropertiesUpdater.flatMap { it.updatedPropertiesFile }
103+
val propertiesFile = propertiesGenerator.flatMap { it.propertiesFile }
105104

106105
from(kotlinComposeWasmStdlib) {
107106
into("com/compiler/server")
108-
val properties = FileInputStream(propertiesFile.get().asFile).use {
109-
Properties().apply {
110-
load(it)
107+
108+
rename { original ->
109+
val properties = FileInputStream(propertiesFile.get().asFile).use {
110+
Properties().apply {
111+
load(it)
112+
}
111113
}
112-
}
114+
val regex = Regex("stdlib_master\\.(.*)")
115+
regex.find(original)?.groupValues?.get(1)?.let { extension ->
116+
"stdlib-${properties["dependencies.compose.wasm"]}.$extension"
117+
} ?: original
113118

114-
rename("stdlib_master\\.(.*)", "stdlib-${properties["dependencies.compose.wasm"]}.\$1")
119+
}
115120
}
116121
}
117122

0 commit comments

Comments
 (0)