1+ import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper
12import com.github.jk1.license.filter.ExcludeTransitiveDependenciesFilter
23import com.github.jk1.license.render.JsonReportRenderer
4+ import com.jetbrains.plugin.structure.toolbox.ToolboxMeta
5+ import com.jetbrains.plugin.structure.toolbox.ToolboxPluginDescriptor
36import org.jetbrains.intellij.pluginRepository.PluginRepositoryFactory
47import org.jetbrains.kotlin.com.intellij.openapi.util.SystemInfoRt
58import org.jetbrains.kotlin.gradle.dsl.JvmTarget
69import java.nio.file.Path
10+ import kotlin.io.path.createDirectories
711import kotlin.io.path.div
12+ import kotlin.io.path.writeText
813
914plugins {
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
2525repositories {
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+
3041jvmWrapper {
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
4052dependencies {
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
5887changelog {
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+
79113val assemblePlugin by tasks.registering(Jar ::class ) {
80- archiveBaseName.set(pluginId )
114+ archiveBaseName.set(extension.id )
81115 from(sourceSets.main.get().output)
82116}
83117
84118val 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
115156val 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
123174tasks.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
148199val 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
0 commit comments