diff --git a/.gitignore b/.gitignore index 0143fb90..efb8db1d 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ .gradle/ +.kotlin/ .theia/ .yarn/ .yarnrc diff --git a/build-conventions/build.gradle.kts b/build-conventions/build.gradle.kts index 781b5721..34d52209 100644 --- a/build-conventions/build.gradle.kts +++ b/build-conventions/build.gradle.kts @@ -5,17 +5,10 @@ plugins { dependencies { implementation(files(libs.javaClass.superclass.protectionDomain.codeSource.location)) - implementation(kotlin("gradle-plugin", embeddedKotlinVersion)) + implementation(libs.plugin.kotlin) implementation(libs.plugin.git.hooks) implementation(libs.plugin.detekt) implementation(libs.plugin.versions) implementation(libs.plugin.versions.update) implementation(libs.plugin.container.tasks) -} - -gradleEnterprise { - buildScan { - termsOfServiceUrl = "https://gradle.com/terms-of-service" - termsOfServiceAgree = "yes" - } -} +} \ No newline at end of file diff --git a/build-conventions/settings.gradle.kts b/build-conventions/settings.gradle.kts index bbe559a6..8dd6dfc3 100644 --- a/build-conventions/settings.gradle.kts +++ b/build-conventions/settings.gradle.kts @@ -1,14 +1,16 @@ plugins { - id("com.gradle.enterprise") version "+" + id("com.gradle.develocity") version "+" +} + +develocity { + buildScan { + termsOfUseUrl = "https://gradle.com/terms-of-service" + termsOfUseAgree = "yes" + } } @Suppress("UnstableApiUsage") dependencyResolutionManagement { - versionCatalogs { - create("libs") { - from(files("../gradle/libs.versions.toml")) - } - } repositories { mavenLocal() mavenCentral() diff --git a/build-conventions/src/main/kotlin/util/global.kt b/build-conventions/src/main/kotlin/util/global.kt index 199ffc0b..8752b74c 100644 --- a/build-conventions/src/main/kotlin/util/global.kt +++ b/build-conventions/src/main/kotlin/util/global.kt @@ -14,7 +14,7 @@ infix fun Property.by(value: Provider) = set(value) object Git { val headCommitHash by lazy { - val child = Runtime.getRuntime().exec("git rev-parse --verify HEAD") + val child = Runtime.getRuntime().exec(arrayOf("git","rev-parse", "--verify","HEAD")) child.waitFor() child.inputStream.readAllBytes().toString(Charset.defaultCharset()).trim() } diff --git a/build.gradle.kts b/build.gradle.kts index d66a8f0f..1d2b4de5 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -13,10 +13,3 @@ nexusPublishing { } } } - -gradleEnterprise { - buildScan { - termsOfServiceUrl = "https://gradle.com/terms-of-service" - termsOfServiceAgree = "yes" - } -} diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index d82b2eb4..e9c25169 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,9 +1,9 @@ [versions] -detekt = "1.23.4" -dokka = "1.9.10" +detekt = "1.23.6" +dokka = "1.9.20" java = "11" -junit-jupiter = "5.10.1" -kotest = "5.8.0" +junit-jupiter = "5.10.2" +kotest = "5.9.1" kotlin = "2.0.0" [libraries] @@ -16,7 +16,7 @@ plugin-container-tasks = "dev.petuska:container-tasks-gradle-plugin:0.0.4" plugin-detekt = { module = "io.gitlab.arturbosch.detekt:detekt-gradle-plugin", version.ref = "detekt" } plugin-git-hooks = "com.github.jakemarsden:git-hooks-gradle-plugin:0.0.2" plugin-kotlin = { module = "org.jetbrains.kotlin:kotlin-gradle-plugin", version.ref = "kotlin" } -plugin-node-gradle = "com.github.node-gradle:gradle-node-plugin:7.0.1" +plugin-node-gradle = "com.github.node-gradle:gradle-node-plugin:7.0.2" plugin-versions = "com.github.ben-manes:gradle-versions-plugin:0.47.0" plugin-versions-update = "nl.littlerobots.vcu:plugin:0.8.1" @@ -28,5 +28,5 @@ kotest-assertions = [ [plugins] dokka = { id = "org.jetbrains.dokka", version.ref = "dokka" } -nexus-publish = "io.github.gradle-nexus.publish-plugin:1.3.0" +nexus-publish = "io.github.gradle-nexus.publish-plugin:2.0.0" plugin-publish = "com.gradle.plugin-publish:1.2.1" diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 829e1a5a..8b580b94 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.5-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.8-all.zip networkTimeout=10000 zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/npm-publish-docs/build.gradle.kts b/npm-publish-docs/build.gradle.kts index af782447..38fc2a39 100644 --- a/npm-publish-docs/build.gradle.kts +++ b/npm-publish-docs/build.gradle.kts @@ -8,13 +8,13 @@ plugins { tasks { val src = projectDir.resolve("src") - val mkdocsDir = buildDir.resolve("mkdocs") - val outDir = mkdocsDir.resolve("site") + val mkdocsDir = layout.buildDirectory.dir("mkdocs") + val outDir = mkdocsDir.map { it.dir("site") } val dokkaHtml = getByPath(":npm-publish-gradle-plugin:dokkaHtml") val docsAssemble = register("docsAssemble", Copy::class) { dependsOn(dokkaHtml) outputs.upToDateWhen { false } - destinationDir = mkdocsDir.resolve("source").also(outputs::dir) + destinationDir = mkdocsDir.map { it.dir("source") }.get().asFile.also(outputs::dir) val readme = rootDir.resolve("README.md").also(inputs::file) val license = rootDir.resolve("LICENSE").also(inputs::file) val changelog = rootDir.resolve("CHANGELOG.md").also(inputs::file) @@ -47,7 +47,7 @@ tasks { mapOf( "srcDir" to srcDir.absolutePath, "themeDir" to themeDir.absolutePath, - "outDir" to outDir.absolutePath, + "outDir" to outDir.get().asFile.absolutePath, ) ) } @@ -75,7 +75,7 @@ tasks { register("mkdocsBuild", MkDocsExec.Build::class) { dependsOn(docsAssemble) workingDir.set(layout.dir(docsAssemble.map { it.destinationDir })) - containerVolumes.put(outDir, outDir) + containerVolumes.put(outDir.get().asFile, outDir.get().asFile) outputs.dir(outDir) } register("mikeList", MikeExec.List::class) { @@ -114,6 +114,6 @@ tasks { workingDir.set(layout.dir(docsAssemble.map { it.destinationDir })) } register("clean", Delete::class) { - delete(buildDir) + delete(layout.buildDirectory) } } diff --git a/npm-publish-gradle-plugin/src/main/kotlin/config/kotlinJsTarget.kt b/npm-publish-gradle-plugin/src/main/kotlin/config/kotlinJsTarget.kt index 472c3712..bab86bd8 100644 --- a/npm-publish-gradle-plugin/src/main/kotlin/config/kotlinJsTarget.kt +++ b/npm-publish-gradle-plugin/src/main/kotlin/config/kotlinJsTarget.kt @@ -53,11 +53,6 @@ internal fun Project.configure(target: KotlinJsTargetDsl): Unit = with(PluginLog } null -> null - !is JsIrBinary -> error( - "Legacy binaries are no longer supported. " + - "Please consider switching to the new Kotlin/JS IR compiler backend" - ) - else -> error("Unrecognised Kotlin/JS binary type: ${it::class.java.name}") } } @@ -65,13 +60,14 @@ internal fun Project.configure(target: KotlinJsTargetDsl): Unit = with(PluginLog val publicPackageJsonTask = binary.flatMap { tasks.named(it.compilation.npmProject.publicPackageJsonTaskName) } - val processResourcesTask = target.compilations.named("main").flatMap { + val mainCompilation = target.compilations.named("main") + val processResourcesTask = mainCompilation.flatMap { tasks.named(it.processResourcesTaskName) } - val outputFile = compileKotlinTask.flatMap(Kotlin2JsCompile::destinationDirectory) - .zip(compileKotlinTask.flatMap(Kotlin2JsCompile::moduleName)) { dir, file -> dir.file(file).asFile } + + val outputFile = binary.flatMap(JsIrBinary::mainFile) val typesFile = outputFile.map { - it.parentFile.resolve("${it.nameWithoutExtension}.d.ts") + it.asFile.parentFile.resolve("${it.asFile.nameWithoutExtension}.d.ts") } tasks.named(assembleTaskName(pkg.name), NpmAssembleTask::class.java) { @@ -84,7 +80,7 @@ internal fun Project.configure(target: KotlinJsTargetDsl): Unit = with(PluginLog pkg.main.convention( sysProjectEnvPropertyConvention( pkg.prefix + "main", - outputFile.map { it.name }.orElse(pkg.packageJson.flatMap(PackageJson::main)) + outputFile.map { it.asFile.name }.orElse(pkg.packageJson.flatMap(PackageJson::main)) ) ) pkg.types.convention( @@ -96,7 +92,7 @@ internal fun Project.configure(target: KotlinJsTargetDsl): Unit = with(PluginLog ) pkg.dependencies.addAllLater(resolveDependencies(target.name, binary)) pkg.files { files -> - files.from(outputFile.map(File::getParentFile)) + files.from(outputFile.map { it.asFile.getParentFile() }) files.from(processResourcesTask.map(Copy::getDestinationDir)) } } @@ -117,24 +113,30 @@ private fun Project.resolveDependencies( targetName: String, binary: Provider ): Provider> = binary.map { bin -> - bin.compilation.relatedConfigurationNames().flatMap { conf -> - listOf( - conf, - "${targetName}Main${conf.substringAfter("${targetName}Compilation").capitalized()}", - conf.substringAfter("compilation").toCamelCase(true), - ).mapNotNull(configurations::findByName).flatMap(Configuration::getDependencies) - .filterIsInstance().distinct().map { dependency -> - objects.newInstance(NpmDependency::class.java, dependency.name).apply { - type.set( - when (dependency.scope) { - NORMAL -> NpmDependency.Type.NORMAL - DEV -> NpmDependency.Type.DEV - OPTIONAL -> NpmDependency.Type.OPTIONAL - PEER -> NpmDependency.Type.PEER - } - ) - version.set(dependency.version) - } - } - } + bin.compilation + .relatedConfigurationNames() + .flatMap { conf -> + sequenceOf( + conf, + "${targetName}Main${conf.substringAfter("${targetName}Compilation").capitalized()}", + conf.substringAfter("compilation").toCamelCase(true), + ) + .mapNotNull(configurations::findByName) + .flatMap(Configuration::getDependencies) + .filterIsInstance() + .distinct() + .map { dependency -> + objects.newInstance(NpmDependency::class.java, dependency.name).apply { + type.set( + when (dependency.scope) { + NORMAL -> NpmDependency.Type.NORMAL + DEV -> NpmDependency.Type.DEV + OPTIONAL -> NpmDependency.Type.OPTIONAL + PEER -> NpmDependency.Type.PEER + } + ) + version.set(dependency.version) + } + }.toList() + } } diff --git a/samples/build.gradle.kts b/samples/build.gradle.kts index 52a69173..ac4b8fc0 100644 --- a/samples/build.gradle.kts +++ b/samples/build.gradle.kts @@ -1,10 +1,4 @@ plugins { + id("convention.base") id("convention.versions") } - -gradleEnterprise { - buildScan { - termsOfServiceUrl = "https://gradle.com/terms-of-service" - termsOfServiceAgree = "yes" - } -} diff --git a/samples/settings.gradle.kts b/samples/settings.gradle.kts index c928af62..21a55561 100644 --- a/samples/settings.gradle.kts +++ b/samples/settings.gradle.kts @@ -1,5 +1,12 @@ plugins { - id("com.gradle.enterprise") version "+" + id("com.gradle.develocity") version "+" +} + +develocity { + buildScan{ + termsOfUseUrl = "https://gradle.com/terms-of-service" + termsOfUseAgree = "yes" + } } @Suppress("UnstableApiUsage") diff --git a/sandbox/build.gradle.kts b/sandbox/build.gradle.kts index d40f64d5..4b25b3a0 100644 --- a/sandbox/build.gradle.kts +++ b/sandbox/build.gradle.kts @@ -1,10 +1,3 @@ plugins { id("convention.base") } - -gradleEnterprise { - buildScan { - termsOfServiceUrl = "https://gradle.com/terms-of-service" - termsOfServiceAgree = "yes" - } -} diff --git a/sandbox/empty/src/jsMain/kotlin/main.kt b/sandbox/empty/src/jsMain/kotlin/main.kt index 5baf58d3..4d78b7d5 100644 --- a/sandbox/empty/src/jsMain/kotlin/main.kt +++ b/sandbox/empty/src/jsMain/kotlin/main.kt @@ -5,6 +5,7 @@ import sandbox.greet @JsModule("is-odd") external object IsOdd +@OptIn(ExperimentalJsExport::class) @JsExport fun empty() = greet(object : GreetingArgs { override val name: String = "Joe" diff --git a/sandbox/settings.gradle.kts b/sandbox/settings.gradle.kts index 45edf1b9..c9b8b267 100644 --- a/sandbox/settings.gradle.kts +++ b/sandbox/settings.gradle.kts @@ -1,5 +1,12 @@ plugins { - id("com.gradle.enterprise") version "+" + id("com.gradle.develocity") version "+" +} + +develocity { + buildScan{ + termsOfUseUrl = "https://gradle.com/terms-of-service" + termsOfUseAgree = "yes" + } } @Suppress("UnstableApiUsage") diff --git a/settings.gradle.kts b/settings.gradle.kts index 25ed718b..0d01ab75 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -1,5 +1,12 @@ plugins { - id("com.gradle.enterprise") version "+" + id("com.gradle.develocity") version "+" +} + +develocity { + buildScan{ + termsOfUseUrl = "https://gradle.com/terms-of-service" + termsOfUseAgree = "yes" + } } @Suppress("UnstableApiUsage")