Skip to content

Commit 99e56cf

Browse files
committed
impl: support for Toolbox 2.6.0.38881 (1)
- reworked tasks for building the jar and zips - plugin metadata (i.e. extension.json) is now generated by the gradle tasks
1 parent fdb0334 commit 99e56cf

File tree

3 files changed

+113
-51
lines changed

3 files changed

+113
-51
lines changed

build.gradle.kts

Lines changed: 103 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,15 @@
1+
import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper
12
import com.github.jk1.license.filter.ExcludeTransitiveDependenciesFilter
23
import com.github.jk1.license.render.JsonReportRenderer
4+
import com.jetbrains.plugin.structure.toolbox.ToolboxMeta
5+
import com.jetbrains.plugin.structure.toolbox.ToolboxPluginDescriptor
36
import org.jetbrains.intellij.pluginRepository.PluginRepositoryFactory
47
import org.jetbrains.kotlin.com.intellij.openapi.util.SystemInfoRt
58
import org.jetbrains.kotlin.gradle.dsl.JvmTarget
69
import java.nio.file.Path
10+
import kotlin.io.path.createDirectories
711
import kotlin.io.path.div
12+
import kotlin.io.path.writeText
813

914
plugins {
1015
alias(libs.plugins.kotlin)
@@ -16,21 +21,28 @@ plugins {
1621
alias(libs.plugins.changelog)
1722
}
1823

19-
buildscript {
20-
dependencies {
21-
classpath(libs.marketplace.client)
22-
}
23-
}
2424

2525
repositories {
2626
mavenCentral()
2727
maven("https://packages.jetbrains.team/maven/p/tbx/toolbox-api")
2828
}
2929

30+
buildscript {
31+
repositories {
32+
mavenCentral()
33+
}
34+
35+
dependencies {
36+
classpath(libs.marketplace.client)
37+
classpath(libs.plugin.structure)
38+
}
39+
}
40+
3041
jvmWrapper {
3142
unixJvmInstallDir = "jvm"
3243
winJvmInstallDir = "jvm"
33-
linuxAarch64JvmUrl = "https://cache-redirector.jetbrains.com/intellij-jbr/jbr_jcef-21.0.5-linux-aarch64-b631.28.tar.gz"
44+
linuxAarch64JvmUrl =
45+
"https://cache-redirector.jetbrains.com/intellij-jbr/jbr_jcef-21.0.5-linux-aarch64-b631.28.tar.gz"
3446
linuxX64JvmUrl = "https://cache-redirector.jetbrains.com/intellij-jbr/jbr_jcef-21.0.5-linux-x64-b631.28.tar.gz"
3547
macAarch64JvmUrl = "https://cache-redirector.jetbrains.com/intellij-jbr/jbr_jcef-21.0.5-osx-aarch64-b631.28.tar.gz"
3648
macX64JvmUrl = "https://cache-redirector.jetbrains.com/intellij-jbr/jbr_jcef-21.0.5-osx-x64-b631.28.tar.gz"
@@ -39,9 +51,9 @@ jvmWrapper {
3951

4052
dependencies {
4153
compileOnly(libs.bundles.toolbox.plugin.api)
54+
compileOnly(libs.bundles.serialization)
55+
compileOnly(libs.coroutines.core)
4256
implementation(libs.slf4j)
43-
implementation(libs.bundles.serialization)
44-
implementation(libs.coroutines.core)
4557
implementation(libs.okhttp)
4658
implementation(libs.exec)
4759
implementation(libs.moshi)
@@ -51,12 +63,29 @@ dependencies {
5163
testImplementation(kotlin("test"))
5264
}
5365

54-
val pluginId = properties("group")
55-
val pluginName = properties("name")
56-
val pluginVersion = properties("version")
66+
val extension = ExtensionJson(
67+
id = properties("group"),
68+
version = properties("version"),
69+
meta = ExtensionJsonMeta(
70+
name = "Coder Toolbox",
71+
description = "Connects your JetBrains IDE to Coder workspaces",
72+
vendor = "Coder",
73+
url = "https://github.com/coder/coder-jetbrains-toolbox-plugin",
74+
)
75+
)
76+
77+
val extensionJsonFile = layout.buildDirectory.file("generated/extension.json")
78+
val extensionJson by tasks.registering {
79+
inputs.property("extension", extension.toString())
80+
81+
outputs.file(extensionJsonFile)
82+
doLast {
83+
generateExtensionJson(extension, extensionJsonFile.get().asFile.toPath())
84+
}
85+
}
5786

5887
changelog {
59-
version.set(pluginVersion)
88+
version.set(extension.version)
6089
groups.set(emptyList())
6190
title.set("Coder Toolbox Plugin Changelog")
6291
}
@@ -76,15 +105,27 @@ tasks.test {
76105
useJUnitPlatform()
77106
}
78107

108+
tasks.jar {
109+
archiveBaseName.set(extension.id)
110+
dependsOn(extensionJson)
111+
}
112+
79113
val assemblePlugin by tasks.registering(Jar::class) {
80-
archiveBaseName.set(pluginId)
114+
archiveBaseName.set(extension.id)
81115
from(sourceSets.main.get().output)
82116
}
83117

84118
val copyPlugin by tasks.creating(Sync::class.java) {
85-
dependsOn(assemblePlugin)
86-
fromCompileDependencies()
119+
dependsOn(tasks.assemble)
120+
// fromCompileDependencies()
121+
from(tasks.jar)
122+
123+
from(extensionJsonFile)
87124

125+
from("src/main/resources") {
126+
include("dependencies.json")
127+
include("icon.svg")
128+
}
88129
into(getPluginInstallDir())
89130
}
90131

@@ -113,11 +154,21 @@ fun CopySpec.fromCompileDependencies() {
113154
}
114155

115156
val pluginZip by tasks.creating(Zip::class) {
116-
dependsOn(assemblePlugin)
157+
dependsOn(tasks.assemble)
158+
dependsOn(tasks.getByName("generateLicenseReport"))
117159

118-
fromCompileDependencies()
119-
into(pluginId)
120-
archiveBaseName.set(pluginName)
160+
// fromCompileDependencies()
161+
// into(pluginId)
162+
from(tasks.assemble.get().outputs.files)
163+
from(extensionJsonFile)
164+
from("src/main/resources") {
165+
include("dependencies.json")
166+
}
167+
from("src/main/resources") {
168+
include("icon.svg")
169+
rename("icon.svg", "pluginIcon.svg")
170+
}
171+
archiveBaseName.set(extension.id)
121172
}
122173

123174
tasks.register("cleanAll", Delete::class.java) {
@@ -142,7 +193,7 @@ private fun getPluginInstallDir(): Path {
142193
else -> error("Unknown os")
143194
} / "plugins"
144195

145-
return pluginsDir / pluginId
196+
return pluginsDir / extension.id
146197
}
147198

148199
val publishPlugin by tasks.creating {
@@ -158,17 +209,41 @@ val publishPlugin by tasks.creating {
158209
// instance.uploader.uploadNewPlugin(pluginZip.outputs.files.singleFile, listOf("toolbox", "gateway"), LicenseUrl.APACHE_2_0, ProductFamily.TOOLBOX)
159210

160211
// subsequent updates
161-
instance.uploader.upload(pluginId, pluginZip.outputs.files.singleFile)
212+
instance.uploader.upload(extension.id, pluginZip.outputs.files.singleFile)
162213
}
163214
}
164215

165-
// For use with kotlin-language-server.
166-
tasks.register("classpath") {
167-
doFirst {
168-
File("classpath").writeText(
169-
sourceSets["main"].runtimeClasspath.asPath
216+
fun properties(key: String) = project.findProperty(key).toString()
217+
218+
// region will be moved to the gradle plugin late
219+
data class ExtensionJsonMeta(
220+
val name: String,
221+
val description: String,
222+
val vendor: String,
223+
val url: String?,
224+
)
225+
226+
data class ExtensionJson(
227+
val id: String,
228+
val version: String,
229+
val meta: ExtensionJsonMeta,
230+
)
231+
232+
fun generateExtensionJson(extensionJson: ExtensionJson, destinationFile: Path) {
233+
val descriptor = ToolboxPluginDescriptor(
234+
id = extensionJson.id,
235+
version = extensionJson.version,
236+
apiVersion = libs.versions.toolbox.plugin.api.get(),
237+
meta = ToolboxMeta(
238+
name = extensionJson.meta.name,
239+
description = extensionJson.meta.description,
240+
vendor = extensionJson.meta.vendor,
241+
url = extensionJson.meta.url,
170242
)
171-
}
243+
)
244+
val extensionJson = jacksonObjectMapper().writeValueAsString(descriptor)
245+
destinationFile.parent.createDirectories()
246+
destinationFile.writeText(extensionJson)
172247
}
173248

174-
fun properties(key: String) = project.findProperty(key).toString()
249+
// endregion

gradle/libs.versions.toml

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
[versions]
2-
toolbox-plugin-api = "0.7.2.6.0.38311"
2+
toolbox-plugin-api = "1.0.38881"
33
kotlin = "2.1.0"
44
coroutines = "1.10.1"
55
serialization = "1.8.0"
@@ -13,6 +13,7 @@ moshi = "1.15.1"
1313
ksp = "2.1.0-1.0.29"
1414
retrofit = "2.8.2"
1515
changelog = "2.2.1"
16+
plugin-structure = "3.298"
1617

1718
[libraries]
1819
toolbox-core-api = { module = "com.jetbrains.toolbox:core-api", version.ref = "toolbox-plugin-api" }
@@ -25,21 +26,22 @@ serialization-json-okio = { module = "org.jetbrains.kotlinx:kotlinx-serializatio
2526
okhttp = { module = "com.squareup.okhttp3:okhttp", version.ref = "okhttp" }
2627
slf4j = { module = "org.slf4j:slf4j-api", version.ref = "slf4j" }
2728
exec = { module = "org.zeroturnaround:zt-exec", version.ref = "exec" }
28-
moshi = { module = "com.squareup.moshi:moshi", version.ref = "moshi"}
29-
moshi-codegen = { module = "com.squareup.moshi:moshi-kotlin-codegen", version.ref = "moshi"}
30-
retrofit = { module = "com.squareup.retrofit2:retrofit", version.ref = "retrofit"}
31-
retrofit-moshi = { module = "com.squareup.retrofit2:converter-moshi", version.ref = "retrofit"}
29+
moshi = { module = "com.squareup.moshi:moshi", version.ref = "moshi" }
30+
moshi-codegen = { module = "com.squareup.moshi:moshi-kotlin-codegen", version.ref = "moshi" }
31+
retrofit = { module = "com.squareup.retrofit2:retrofit", version.ref = "retrofit" }
32+
retrofit-moshi = { module = "com.squareup.retrofit2:converter-moshi", version.ref = "retrofit" }
33+
plugin-structure = { module = "org.jetbrains.intellij.plugins:structure-toolbox", version.ref = "plugin-structure" }
3234

3335
marketplace-client = { module = "org.jetbrains.intellij:plugin-repository-rest-client", version.ref = "marketplace-client" }
3436

3537
[bundles]
36-
serialization = [ "serialization-core", "serialization-json", "serialization-json-okio" ]
37-
toolbox-plugin-api = [ "toolbox-core-api", "toolbox-ui-api", "toolbox-remote-dev-api" ]
38+
serialization = ["serialization-core", "serialization-json", "serialization-json-okio"]
39+
toolbox-plugin-api = ["toolbox-core-api", "toolbox-ui-api", "toolbox-remote-dev-api"]
3840

3941
[plugins]
4042
kotlin = { id = "org.jetbrains.kotlin.jvm", version.ref = "kotlin" }
4143
serialization = { id = "org.jetbrains.kotlin.plugin.serialization", version.ref = "kotlin" }
4244
dependency-license-report = { id = "com.github.jk1.dependency-license-report", version.ref = "dependency-license-report" }
43-
ksp = { id = "com.google.devtools.ksp", version.ref = "ksp"}
45+
ksp = { id = "com.google.devtools.ksp", version.ref = "ksp" }
4446
gradle-wrapper = { id = "me.filippov.gradle.jvm.wrapper", version.ref = "gradle-wrapper" }
4547
changelog = { id = "org.jetbrains.changelog", version.ref = "changelog" }

src/main/resources/extension.json

Lines changed: 0 additions & 15 deletions
This file was deleted.

0 commit comments

Comments
 (0)