From b1fd0f8fc4594fcc7536840feb697371d3e24b9e Mon Sep 17 00:00:00 2001 From: Faur Ioan-Aurel Date: Fri, 28 Mar 2025 00:23:02 +0200 Subject: [PATCH 1/2] impl: improve publish task - marketplace token should be in JETBRAINS_MARKETPLACE_PUBLISH_TOKEN env. variable - calls the proper api for upload based on whether it's the first release version or not --- build.gradle.kts | 39 ++++++++++++++++++++++++++++++++------- 1 file changed, 32 insertions(+), 7 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index 3dcab05..f693646 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -5,6 +5,8 @@ import com.github.jk1.license.render.JsonReportRenderer import com.jetbrains.plugin.structure.toolbox.ToolboxMeta import com.jetbrains.plugin.structure.toolbox.ToolboxPluginDescriptor import org.jetbrains.intellij.pluginRepository.PluginRepositoryFactory +import org.jetbrains.intellij.pluginRepository.model.LicenseUrl +import org.jetbrains.intellij.pluginRepository.model.ProductFamily import org.jetbrains.kotlin.com.intellij.openapi.util.SystemInfoRt import org.jetbrains.kotlin.gradle.dsl.JvmTarget import java.nio.file.Path @@ -187,20 +189,43 @@ private fun getPluginInstallDir(): Path { return pluginsDir / extension.id } -val publishPlugin by tasks.creating { +val publishPlugin by tasks.registering { dependsOn(pluginZip) doLast { + val pluginMarketplaceToken: String = if (System.getenv("JETBRAINS_MARKETPLACE_PUBLISH_TOKEN").isNullOrBlank()) { + error("Env. variable `JETBRAINS_MARKETPLACE_PUBLISH_TOKEN` does not exist. Please set the env. variable to a token obtained from the marketplace.") + } else { + System.getenv("JETBRAINS_MARKETPLACE_PUBLISH_TOKEN") + } + + println("Plugin Marketplace Token: ${pluginMarketplaceToken.take(5)}*****") + val instance = PluginRepositoryFactory.create( "https://plugins.jetbrains.com", - project.property("PUBLISH_TOKEN").toString() + pluginMarketplaceToken ) - // first upload - // instance.uploader.uploadNewPlugin(pluginZip.outputs.files.singleFile, listOf("toolbox", "gateway"), LicenseUrl.APACHE_2_0, ProductFamily.TOOLBOX) - - // subsequent updates - instance.uploader.upload(extension.id, pluginZip.outputs.files.singleFile) + if (extension.version == "0.1.0") { + instance.uploader.uploadNewPlugin( + pluginZip.outputs.files.singleFile, + listOf("toolbox", "gateway"), // do not change + LicenseUrl.MIT, // choose wisely + ProductFamily.TOOLBOX, // do not change + extension.meta.vendor, // do not change + isHidden = true + ) + } else { + // !!! subsequent updates !!! + instance.uploader.uploadUpdateByXmlIdAndFamily( + extension.id, // do not change + ProductFamily.TOOLBOX, // do not change + pluginZip.outputs.files.singleFile, // do not change + null, // do not change. Channels will be available later + "Bug fixes and improvements", + true + ) + } } } From 8ed38ab1bbe78083e465f155a6033696786b77f1 Mon Sep 17 00:00:00 2001 From: Faur Ioan-Aurel Date: Fri, 28 Mar 2025 00:44:46 +0200 Subject: [PATCH 2/2] impl: zip task like in the sample plugin - the existing pluginZip implementation which is now renamed to pluginPrettyZip is producing an artifact suited for manual local deployment. The structure differ from the sample in the following ways: - zip name is: coder-toolbox-0.1.0.zip instead of com.coder.toolbox-0.1.0.zip - the zip contains a root folder named com.coder.toolbox that can be easily deployed in Toolbox plugin location - with this patch, pluginZip is copying what the Toolbox sample does. --- build.gradle.kts | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index f693646..ecfa952 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -155,7 +155,10 @@ fun CopySpec.fromCompileDependencies() { ) } -val pluginZip by tasks.creating(Zip::class) { +/** + * Useful when doing manual local install. + */ +val pluginPrettyZip by tasks.creating(Zip::class) { archiveBaseName.set(properties("name")) dependsOn(tasks.jar) dependsOn(tasks.getByName("generateLicenseReport")) @@ -164,6 +167,14 @@ val pluginZip by tasks.creating(Zip::class) { into(extension.id) // folder like com.coder.toolbox } +val pluginZip by tasks.creating(Zip::class) { + dependsOn(tasks.jar) + dependsOn(tasks.getByName("generateLicenseReport")) + + fromCompileDependencies() + archiveBaseName.set(extension.id) +} + tasks.register("cleanAll", Delete::class.java) { dependsOn(tasks.clean) delete(getPluginInstallDir())