Skip to content

Commit 4d1a423

Browse files
authored
Restore flat Marketplace plugin ZIP layout (#341)
Package plugin files at the archive root again but unlike the previous structore we renamed the release ZIP to coder-toolbox-<version>.zip. Toolbox does not recommend the name of the zip to be the plugin ID.
1 parent 83a8eef commit 4d1a423

4 files changed

Lines changed: 16 additions & 41 deletions

File tree

Lines changed: 3 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
import org.gradle.api.file.ConfigurableFileCollection
22
import org.gradle.api.file.DirectoryProperty
33
import org.gradle.api.file.RegularFileProperty
4-
import org.gradle.api.provider.Property
5-
import org.gradle.api.tasks.Input
64
import org.gradle.api.tasks.InputDirectory
75
import org.gradle.api.tasks.InputFile
86
import org.gradle.api.tasks.InputFiles
@@ -25,24 +23,13 @@ abstract class ToolboxPluginZipTask : Zip() {
2523
@get:InputDirectory
2624
abstract val resourcesDir: DirectoryProperty
2725

28-
@get:Input
29-
abstract val pluginDirectory: Property<String>
30-
3126
init {
3227
from(extensionJsonFiles)
33-
from(dependenciesFile) {
34-
into(pluginDirectory)
35-
}
28+
from(dependenciesFile)
3629
from(resourcesDir) {
3730
include("icon.svg", "pluginIcon.svg")
38-
into(pluginDirectory)
39-
}
40-
from(jarFiles) {
41-
into(pluginDirectory.map { "$it/lib" })
42-
}
43-
from(runtimeDependencies) {
44-
into(pluginDirectory.map { "$it/lib" })
4531
}
46-
pluginDirectory.convention("")
32+
from(jarFiles)
33+
from(runtimeDependencies)
4734
}
4835
}

‎buildSrc/src/main/kotlin/ValidateToolboxPluginZipTask.kt‎

Lines changed: 11 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ import org.gradle.api.DefaultTask
22
import org.gradle.api.file.ConfigurableFileCollection
33
import org.gradle.api.file.RegularFileProperty
44
import org.gradle.api.provider.ListProperty
5-
import org.gradle.api.provider.Property
65
import org.gradle.api.tasks.Input
76
import org.gradle.api.tasks.InputFile
87
import org.gradle.api.tasks.InputFiles
@@ -14,9 +13,6 @@ abstract class ValidateToolboxPluginZipTask : DefaultTask() {
1413
@get:InputFile
1514
abstract val pluginFile: RegularFileProperty
1615

17-
@get:Input
18-
abstract val extensionId: Property<String>
19-
2016
@get:InputFiles
2117
abstract val expectedLibraries: ConfigurableFileCollection
2218

@@ -25,42 +21,36 @@ abstract class ValidateToolboxPluginZipTask : DefaultTask() {
2521

2622
@TaskAction
2723
fun validate() {
28-
val pluginDirectory = "${extensionId.get()}/"
2924
val expectedResources = setOf("dependencies.json", "icon.svg", "pluginIcon.svg")
3025

3126
ZipFile(pluginFile.get().asFile).use { zip ->
3227
val entries = zip.entries().asSequence().filterNot { it.isDirectory }.map { it.name }.toSet()
3328
val missingEntries = buildSet {
3429
if ("extension.json" !in entries) add("extension.json")
35-
expectedResources
36-
.map { "$pluginDirectory$it" }
37-
.filterNot(entries::contains)
38-
.forEach(::add)
30+
expectedResources.filterNot(entries::contains).forEach(::add)
3931
expectedLibraries.files
40-
.map { "$pluginDirectory" + "lib/${it.name}" }
32+
.map { it.name }
4133
.filterNot(entries::contains)
4234
.forEach(::add)
4335
}
4436
check(missingEntries.isEmpty()) {
4537
"Plugin ZIP is missing required entries: ${missingEntries.sorted().joinToString()}"
4638
}
4739

48-
val rootEntries = entries.filterNot { '/' in it }.toSet()
49-
check(rootEntries == setOf("extension.json")) {
50-
"Plugin ZIP must contain only extension.json at its root; found: ${rootEntries.sorted().joinToString()}"
51-
}
52-
53-
val misplacedLibraries = entries.filter { it.endsWith(".jar") && !it.startsWith("${pluginDirectory}lib/") }
54-
check(misplacedLibraries.isEmpty()) {
55-
"Plugin ZIP libraries must be under ${pluginDirectory}lib: ${misplacedLibraries.sorted().joinToString()}"
40+
val nestedEntries = entries.filter { '/' in it }
41+
check(nestedEntries.isEmpty()) {
42+
"Plugin ZIP must use the flat Toolbox plugin layout; found nested entries: ${
43+
nestedEntries.sorted().joinToString()
44+
}"
5645
}
5746

5847
val bundledToolboxDependencies = entries.filter { entry ->
59-
entry.startsWith("${pluginDirectory}lib/") &&
60-
toolboxProvidedDependencyNames.get().any(entry::contains)
48+
entry.endsWith(".jar") && toolboxProvidedDependencyNames.get().any(entry::contains)
6149
}
6250
check(bundledToolboxDependencies.isEmpty()) {
63-
"Plugin ZIP must not bundle Toolbox-provided dependencies: ${bundledToolboxDependencies.sorted().joinToString()}"
51+
"Plugin ZIP must not bundle Toolbox-provided dependencies: ${
52+
bundledToolboxDependencies.sorted().joinToString()
53+
}"
6454
}
6555
}
6656
}

‎buildSrc/src/main/kotlin/toolbox-convention.gradle.kts‎

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -45,14 +45,12 @@ val packagePlugin by tasks.registering(ToolboxPluginZipTask::class) {
4545
dependenciesFile.set(generatedDependenciesJson.flatMap { it.outputFile })
4646
runtimeDependencies.from(filteredDependencies)
4747
resourcesDir.set(layout.projectDirectory.dir("src/main/resources"))
48-
pluginDirectory.set(project.group.toString())
49-
archiveBaseName.set(project.group.toString())
48+
archiveBaseName.set("coder-toolbox")
5049
}
5150

5251
val validatePluginZip by tasks.registering(ValidateToolboxPluginZipTask::class) {
5352
dependsOn(packagePlugin)
5453
pluginFile.set(packagePlugin.flatMap { it.archiveFile })
55-
extensionId.set(project.group.toString())
5654
expectedLibraries.from(tasks.named<Jar>("jar"))
5755
expectedLibraries.from(filteredDependencies)
5856
toolboxProvidedDependencyNames.set(TOOLBOX_PROVIDED_DEPENDENCIES)

‎gradle.properties‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
1-
version=0.9.2-alpha1
1+
version=0.9.2-alpha2
22
group=com.coder.toolbox
33
name=coder-toolbox

0 commit comments

Comments
 (0)