val COMPOSE_CORE_VERSION: String by project val COMPOSE_WEB_VERSION: String by project val COMPOSE_REPO_USERNAME: String? by project val COMPOSE_REPO_KEY: String? by project val COMPOSE_WEB_BUILD_WITH_SAMPLES = project.property("compose.web.buildSamples")!!.toString().toBoolean() apply() fun Project.isSampleProject() = projectDir.parentFile.name == "samples" tasks.register("generateExamples") { dependsOn( subprojects.filter { it.isSampleProject() }.map { ":samples:${it.name}:sync" } ) } tasks.register("printBundleSize") { dependsOn( subprojects.filter { it.isSampleProject() }.map { ":samples:${it.name}:printBundleSize" } ) } subprojects { apply(plugin = "maven-publish") group = "org.jetbrains.compose.web" version = COMPOSE_WEB_VERSION if (isSampleProject()) { val buildGradleSpec = copySpec { from("build.gradle.kts") { filter { line -> line .replace( "plugins {", """// This project is autogenerated from ../web/samples/${project.projectDir.name} // In case you want modify code, please, modify it there. plugins {""" ) .replace( "id(\"org.jetbrains.compose\")", "id(\"org.jetbrains.compose\") version \"$COMPOSE_CORE_VERSION\"", ) .replace( "implementation(project(\":web-core\"))", "implementation(compose.web.core)" ) .replace( "implementation(project(\":web-widgets\"))", "implementation(compose.web.widgets)" ) } } } tasks.register("sync") { val targetDir = rootProject.projectDir.resolve("../examples/${project.projectDir.name}").normalize() duplicatesStrategy = DuplicatesStrategy.INCLUDE from(project.projectDir) into(targetDir) exclude("build") with(buildGradleSpec) doLast { println("from ${project.projectDir} => $targetDir") } } val printBundleSize by tasks.registering { dependsOn(tasks.named("jsBrowserDistribution")) doLast { val jsFile = buildDir.resolve("distributions/${project.name}.js") val size = jsFile.length() println("##teamcity[buildStatisticValue key='bundleSize::${project.name}' value='$size']") } } afterEvaluate { tasks.named("build") { finalizedBy(printBundleSize) } } } pluginManager.withPlugin("maven-publish") { configure { repositories { maven { name = "internal" url = uri("https://maven.pkg.jetbrains.space/public/p/compose/dev") credentials { username = COMPOSE_REPO_USERNAME ?: "" password = COMPOSE_REPO_KEY ?: "" } } } } } if (COMPOSE_WEB_BUILD_WITH_SAMPLES) { println("substituting published artifacts with projects ones in project $name") configurations.all { resolutionStrategy.dependencySubstitution { substitute(module("org.jetbrains.compose.web:web-widgets")).apply { with(project(":web-widgets")) } substitute(module("org.jetbrains.compose.web:web-core")).apply { with(project(":web-core")) } } } } repositories { gradlePluginPortal() mavenLocal() mavenCentral() maven { url = uri("https://maven.pkg.jetbrains.space/public/p/compose/dev") } maven { url = uri("https://packages.jetbrains.team/maven/p/ui/dev") } google() } }