Skip to content

Commit 7e57c3a

Browse files
authored
Merge pull request #106 from MisteliEvooq/main
Add output parameter to export
2 parents 8b058be + 34ce889 commit 7e57c3a

File tree

5 files changed

+41
-1
lines changed

5 files changed

+41
-1
lines changed

.gitignore

+3
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,6 @@
33

44
# Ignore Gradle build output directory
55
build
6+
7+
# Ignore settings for IntelliJ IDEA
8+
.idea

src/functionalTest/kotlin/pl/zalas/gradle/structurizrcli/ExportFunctionalTest.kt

+21
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,27 @@ class ExportFunctionalTest : FunctionalTest {
4242
assertTrue(File("${projectDir.absolutePath}/structurizr-SystemContext.puml").exists())
4343
}
4444

45+
@Test
46+
fun `it exports the workspace to a specified output dir`(@TempDir projectDir: File) {
47+
givenWorkspace(projectDir, "workspace.dsl")
48+
givenConfiguration(projectDir, """
49+
plugins {
50+
id 'pl.zalas.structurizr-cli'
51+
}
52+
structurizrCli {
53+
export {
54+
format = "plantuml"
55+
workspace = "${projectDir.absolutePath}/workspace.dsl"
56+
output = "${projectDir.absolutePath}/output"
57+
}
58+
}
59+
""")
60+
61+
execute(projectDir, "structurizrCliExport")
62+
63+
assertTrue(File("${projectDir.absolutePath}/output/structurizr-SystemContext.puml").exists())
64+
}
65+
4566
@Test
4667
fun `it exports multiple workspaces`(@TempDir projectDir: File, @TempDir workspaceDir1: File, @TempDir workspaceDir2: File) {
4768
givenWorkspace(workspaceDir1, "workspace1.dsl")

src/main/kotlin/pl/zalas/gradle/structurizrcli/StructurizrCliPlugin.kt

+6
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@ class StructurizrCliPlugin : Plugin<Project> {
6969
task.dependsOn("structurizrCliExtract")
7070
task.workspace.set(layout.projectDirectory.file(export.workspace))
7171
task.format.set(export.format)
72+
task.output.set(outputDirectory(export))
7273
task.structurizrCliJar.set(extract.flatMap { it.structurizrCliJar })
7374
task.structurizrCliDirectory.set(structurizrDirectory(extension))
7475
extension.exports.getOrNull(index-1)?.also { precedingExport ->
@@ -96,6 +97,11 @@ class StructurizrCliPlugin : Plugin<Project> {
9697
layout.projectDirectory.dir(it)
9798
} ?: layout.buildDirectory.dir("downloads").get()
9899

100+
private fun Project.outputDirectory(export: StructurizrCliPluginExtension.Export): Directory? =
101+
export.output?.let {
102+
layout.projectDirectory.dir(it)
103+
}
104+
99105
private fun Project.structurizrDirectory(extension: StructurizrCliPluginExtension): Directory =
100106
extension.extract.directory?.let {
101107
layout.projectDirectory.dir(it)

src/main/kotlin/pl/zalas/gradle/structurizrcli/StructurizrCliPluginExtension.kt

+1
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ open class StructurizrCliPluginExtension {
4848
data class Export(
4949
var format: String = "plantuml",
5050
var workspace: String = "workspace.dsl",
51+
var output: String? = null,
5152
var name: String = ""
5253
)
5354

src/main/kotlin/pl/zalas/gradle/structurizrcli/tasks/Export.kt

+10-1
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import org.gradle.api.file.RegularFileProperty
2121
import org.gradle.api.provider.Property
2222
import org.gradle.api.tasks.Input
2323
import org.gradle.api.tasks.InputFile
24+
import org.gradle.api.tasks.Optional
2425
import org.gradle.api.tasks.OutputDirectory
2526
import org.gradle.api.tasks.TaskAction
2627

@@ -32,6 +33,10 @@ open class Export : DefaultTask() {
3233
@Input
3334
val format: Property<String> = project.objects.property(String::class.java)
3435

36+
@OutputDirectory
37+
@Optional
38+
val output: DirectoryProperty = project.objects.directoryProperty()
39+
3540
@InputFile
3641
val structurizrCliJar: RegularFileProperty = project.objects.fileProperty()
3742

@@ -49,7 +54,11 @@ open class Export : DefaultTask() {
4954
spec.workingDir(project.layout.projectDirectory)
5055
spec.classpath(structurizrCliDirectory.dir("lib/*"))
5156
spec.mainClass.set("com.structurizr.cli.StructurizrCliApplication")
52-
spec.args("export", "-workspace", workspace.get(), "-format", format.get())
57+
spec.args(args())
5358
}
5459
}
60+
61+
62+
private fun args() = listOf("export", "-workspace", workspace.get(), "-format", format.get()) +
63+
if (output.isPresent) listOf("-output", output.get()) else emptyList()
5564
}

0 commit comments

Comments
 (0)