From 89d14ecd8e2a942767f51f8ee82448592c483ee9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Beno=C3=AEt=20Quenaudon?= Date: Thu, 16 Oct 2025 17:20:12 +0100 Subject: [PATCH] Bumping a lot of stuff --- .github/workflows/gradle.yml | 8 +-- .gitignore | 3 + build.gradle.kts | 10 ++-- cli/build.gradle.kts | 60 +++++++++---------- .../kotlin/com/mattprecious/protogram/main.kt | 14 ++--- gradle/wrapper/gradle-wrapper.properties | 2 +- protogram/build.gradle.kts | 12 +++- .../com/mattprecious/protogram/protogram.kt | 3 + test/build.gradle.kts | 4 +- tinsel/build.gradle.kts | 4 +- webapp/README.md | 2 +- webapp/build.gradle.kts | 29 ++++++--- 12 files changed, 90 insertions(+), 61 deletions(-) diff --git a/.github/workflows/gradle.yml b/.github/workflows/gradle.yml index 6c9b32f..2403a66 100644 --- a/.github/workflows/gradle.yml +++ b/.github/workflows/gradle.yml @@ -20,25 +20,25 @@ jobs: run: ./gradlew --no-daemon build - name: Archive protogram test results if: always() - uses: actions/upload-artifact@v1 + uses: actions/upload-artifact@v4 with: name: protogram-report path: protogram/build/reports/tests/allTests - name: Archive tinsel test results if: always() - uses: actions/upload-artifact@v1 + uses: actions/upload-artifact@v4 with: name: tinsel-report path: tinsel/build/reports/tests/allTests - name: Archive test test results if: always() - uses: actions/upload-artifact@v1 + uses: actions/upload-artifact@v4 with: name: test-report path: test/build/reports/tests/allTests - name: Archive cli test results if: always() - uses: actions/upload-artifact@v1 + uses: actions/upload-artifact@v4 with: name: cli-report path: cli/build/reports/tests/test diff --git a/.gitignore b/.gitignore index ef8d110..ea09c7d 100644 --- a/.gitignore +++ b/.gitignore @@ -2,6 +2,9 @@ .idea *.iml +.kotlin +kotlin-js-store + # Gradle .gradle gradlew.bat diff --git a/build.gradle.kts b/build.gradle.kts index 59dab89..fc931c9 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,9 +1,11 @@ +import org.jetbrains.kotlin.gradle.plugin.kotlinToolingVersion + plugins { base - kotlin("multiplatform") version "1.6.21" apply false - kotlin("jvm") version "1.6.21" apply false - kotlin("js") version "1.6.21" apply false - id("org.jlleitschuh.gradle.ktlint") version "9.1.1" apply false + kotlin("multiplatform") version "2.2.20" apply false + kotlin("jvm") version "2.2.20" apply false + kotlin("js") version "2.2.20" apply false + id("org.jlleitschuh.gradle.ktlint") version "12.1.0" apply false } subprojects { diff --git a/cli/build.gradle.kts b/cli/build.gradle.kts index 6312641..1f3041a 100644 --- a/cli/build.gradle.kts +++ b/cli/build.gradle.kts @@ -1,8 +1,10 @@ -import org.jetbrains.kotlin.gradle.tasks.KotlinCompile - plugins { kotlin("jvm") - id("org.jlleitschuh.gradle.ktlint") + id("org.jlleitschuh.gradle.ktlint") apply false +} + +kotlin { + jvmToolchain(17) } dependencies { @@ -14,41 +16,39 @@ dependencies { testImplementation("com.google.jimfs", "jimfs", "1.1") } -tasks.withType { - kotlinOptions.jvmTarget = "1.8" -} - -val fatJar = task("fatJar", type = Jar::class) { - setDuplicatesStrategy(DuplicatesStrategy.INCLUDE) - from(configurations.runtimeClasspath.get().map { if (it.isDirectory) it else zipTree(it) }) - with(tasks.jar.get() as CopySpec) +tasks { + val fatJar = register("fatJar", { + duplicatesStrategy = DuplicatesStrategy.INCLUDE + from(configurations.runtimeClasspath.get().map { if (it.isDirectory) it else zipTree(it) }) + with(jar.get() as CopySpec) - archiveClassifier.set("fat") + archiveClassifier.set("fat") - manifest { - attributes["Main-Class"] = "com.mattprecious.protogram.Main" - } -} + manifest { + attributes["Main-Class"] = "com.mattprecious.protogram.Main" + } + }) -val binaryJar = task("binaryJar") { - val binaryDir = File(buildDir, "bin") - val binaryFile = File(binaryDir, "protogram") + val binaryJar = register("binaryJar", { + val binaryDir = layout.buildDirectory.dir("bin").get().asFile + val binaryFile = binaryDir.resolve("protogram") - doLast { - val fatJarFile = fatJar.archiveFile.get().asFile + doLast { + val fatJarFile = fatJar.get().archiveFile.get().asFile - binaryFile.parentFile.mkdirs() - binaryFile.writeText("#!/bin/sh\n\nexec java -jar \$0 \"\$@\"\n\n") - binaryFile.appendBytes(fatJarFile.readBytes()) + binaryFile.parentFile.mkdirs() + binaryFile.writeText("#!/bin/sh\n\nexec java -jar \$0 \"\$@\"\n\n") + binaryFile.appendBytes(fatJarFile.readBytes()) - binaryFile.setExecutable(true) - } -} + binaryFile.setExecutable(true) + } + }) -tasks { - "assemble" { + named("assemble") { dependsOn(binaryJar) } - binaryJar.dependsOn(fatJar) + binaryJar { + dependsOn(fatJar) + } } diff --git a/cli/src/main/kotlin/com/mattprecious/protogram/main.kt b/cli/src/main/kotlin/com/mattprecious/protogram/main.kt index 6aeb725..b145256 100644 --- a/cli/src/main/kotlin/com/mattprecious/protogram/main.kt +++ b/cli/src/main/kotlin/com/mattprecious/protogram/main.kt @@ -7,6 +7,7 @@ import com.github.ajalt.clikt.core.PrintHelpMessage import com.github.ajalt.clikt.core.UsageError import com.github.ajalt.clikt.parameters.arguments.argument import com.github.ajalt.clikt.parameters.arguments.convert +import com.squareup.wire.schema.Location import com.github.ajalt.clikt.parameters.arguments.optional import com.github.ajalt.clikt.parameters.groups.OptionGroup import com.github.ajalt.clikt.parameters.groups.cooccurring @@ -22,6 +23,7 @@ import java.io.PrintStream import java.nio.file.FileSystem import java.nio.file.FileSystems import okio.ByteString.Companion.decodeHex +import okio.FileSystem.Companion.asOkioFileSystem import okio.buffer import okio.source @@ -30,7 +32,7 @@ fun main(vararg args: String) { } internal class ProtogramCli( - fs: FileSystem, + private val fs: FileSystem, private val stdin: InputStream, private val stdout: PrintStream, private val stderr: PrintStream @@ -63,12 +65,10 @@ internal class ProtogramCli( if (protoOptions.dirs.isEmpty()) { throw UsageError("At least one --source is required with --type") } - val schemaLoader = SchemaLoader() - protoOptions.dirs.forEach { - schemaLoader.addSource(it) - } - schema = schemaLoader.load() - type = schema!!.getType(protoOptions.type)?.type + val schemaLoader = SchemaLoader(fs.asOkioFileSystem()) + schemaLoader.initRoots(protoOptions.dirs.map { Location.get(it.toString()) }) + schema = schemaLoader.loadSchema() + type = schema.getType(protoOptions.type)?.type } stdout.print(printProto(decodeBytes, schema, type)) diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index aa991fc..3ae1e2f 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.4.2-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.3-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/protogram/build.gradle.kts b/protogram/build.gradle.kts index ac55647..e01b8af 100644 --- a/protogram/build.gradle.kts +++ b/protogram/build.gradle.kts @@ -1,9 +1,15 @@ plugins { kotlin("multiplatform") - id("org.jlleitschuh.gradle.ktlint") + id("org.jlleitschuh.gradle.ktlint") apply false +} + +repositories { + mavenCentral() } kotlin { + jvmToolchain(17) + jvm() js { browser() @@ -14,8 +20,8 @@ kotlin { dependencies { api(kotlin("stdlib-common")) implementation(project(":tinsel")) - api("com.squareup.okio:okio-multiplatform:2.4.2") - api("com.squareup.wire:wire-schema-multiplatform:3.1.0") + api("com.squareup.okio:okio:3.7.0") + api("com.squareup.wire:wire-schema:4.9.7") } } commonTest { diff --git a/protogram/src/commonMain/kotlin/com/mattprecious/protogram/protogram.kt b/protogram/src/commonMain/kotlin/com/mattprecious/protogram/protogram.kt index df73ba5..37a5781 100644 --- a/protogram/src/commonMain/kotlin/com/mattprecious/protogram/protogram.kt +++ b/protogram/src/commonMain/kotlin/com/mattprecious/protogram/protogram.kt @@ -12,6 +12,7 @@ import com.squareup.wire.FieldEncoding.LENGTH_DELIMITED import com.squareup.wire.FieldEncoding.VARINT import com.squareup.wire.ProtoReader import com.squareup.wire.schema.EnumType +import com.squareup.wire.schema.EnclosingType import com.squareup.wire.schema.MessageType import com.squareup.wire.schema.ProtoType import com.squareup.wire.schema.Schema @@ -34,6 +35,8 @@ private fun ProtoReader.readTree(schema: Schema?, type: ProtoType?): Tree { var fieldName = tag.toString() if (schema != null && type != null) { when (val schemaType = schema.getType(type)) { + null -> {} + is EnclosingType -> {} is MessageType -> { val field = schemaType.field(tag) if (field != null) { diff --git a/test/build.gradle.kts b/test/build.gradle.kts index 2ac4f97..6df4099 100644 --- a/test/build.gradle.kts +++ b/test/build.gradle.kts @@ -1,9 +1,11 @@ plugins { kotlin("multiplatform") - id("org.jlleitschuh.gradle.ktlint") + id("org.jlleitschuh.gradle.ktlint") apply false } kotlin { + jvmToolchain(17) + jvm() js { browser() diff --git a/tinsel/build.gradle.kts b/tinsel/build.gradle.kts index 4d5e4a2..c895725 100644 --- a/tinsel/build.gradle.kts +++ b/tinsel/build.gradle.kts @@ -1,9 +1,11 @@ plugins { kotlin("multiplatform") - id("org.jlleitschuh.gradle.ktlint") + id("org.jlleitschuh.gradle.ktlint") apply false } kotlin { + jvmToolchain(17) + jvm() js { browser() diff --git a/webapp/README.md b/webapp/README.md index 3f877bf..53f0e4c 100644 --- a/webapp/README.md +++ b/webapp/README.md @@ -9,7 +9,7 @@ Currently the website deploys automatically from the `master` branch. Development ----------- -Run `./gradlew :webapp:run --continuous` and a local webserver and browser will be opened. +Run `./gradlew :webapp:jsBrowserDevelopmentRun --continuous` and a local webserver will be opened. Code changes will be automatically picked up and compiled. The browser will also refresh automatically. diff --git a/webapp/build.gradle.kts b/webapp/build.gradle.kts index 5ece897..c8cfc9e 100644 --- a/webapp/build.gradle.kts +++ b/webapp/build.gradle.kts @@ -1,18 +1,27 @@ plugins { - kotlin("js") - id("org.jlleitschuh.gradle.ktlint") + kotlin("multiplatform") + id("org.jlleitschuh.gradle.ktlint") apply false distribution } kotlin { js { - browser() + browser { + webpackTask { + mainOutputFileName = "webapp.js" + } + } + binaries.executable() } - sourceSets["main"].dependencies { - implementation(project(":protogram")) - implementation(kotlin("stdlib-js")) - implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core-js:1.3.3") + sourceSets { + val jsMain by getting { + dependencies { + implementation(project(":protogram")) + implementation(kotlin("stdlib-js")) + implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core-js:1.7.3") + } + } } } @@ -20,16 +29,18 @@ distributions { main { contents { from("src/main/resources") - from("$buildDir/distributions/webapp.js") + from("${layout.buildDirectory.get()}/distributions/webapp.js") into("/") } } } + listOf("distZip", "installDist").forEach { tasks.named(it).configure { - dependsOn(tasks.getByName("browserWebpack")) + dependsOn(tasks.named("jsBrowserProductionWebpack")) } } + tasks.named("distTar").configure { enabled = false }