Skip to content

Commit 94850ed

Browse files
committed
refactor: Remove Kordamp dependency
Fixes #7
1 parent cdc98d9 commit 94850ed

File tree

3 files changed

+59
-140
lines changed

3 files changed

+59
-140
lines changed

README.adoc

Lines changed: 9 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -32,15 +32,15 @@ JBang by downloading and caching the latest version binaries (in your local Grad
3232
This plugin adds a new task of type `dev.jbang.gradle.tasks.JBangTask` named `jbang` that accepts the
3333
following properties
3434

35-
[options="header", cols="6*<,^"]
35+
[options="header", cols="4*<,^"]
3636
|===
37-
| Property | Type | Option | System | Environment | Default | Required
38-
| script | String | jbang-script | jbang.script | JBANG_SCRIPT | | {required-icon}
39-
| jbangArgs | List<String> | jbang-jbang-args | jbang.jbangArgs | JBANG_JBANG_ARGS | [ ] | {optional-icon}
40-
| args | List<String> | jbang-args | jbang.args | JBANG_ARGS | [ ] | {optional-icon}
41-
| trusts | List<String> | jbang-trusts | jbang.trusts | JBANG_TRUSTS | [ ] | {optional-icon}
42-
| version | String | jbang-version | jbang.version | JBANG_VERSION | latest | {optional-icon}
43-
| installDir | Directory | | jbang.install.dir | JBANG_INSTALL_DIR | $gradleUserHomeDir/caches/jbang | {optional-icon}
37+
| Property | Type | Option | Default | Required
38+
| script | String | jbang-script | | {required-icon}
39+
| jbangArgs | List<String> | jbang-jbang-args | [ ] | {optional-icon}
40+
| args | List<String> | jbang-args | [ ] | {optional-icon}
41+
| trusts | List<String> | jbang-trusts | [ ] | {optional-icon}
42+
| version | String | jbang-version | latest | {optional-icon}
43+
| installDir | Directory | | $gradleUserHomeDir/caches/jbang | {optional-icon}
4444
|===
4545

4646
[horizontal]
@@ -52,23 +52,10 @@ version:: If your environment lacks the JBang binaries in the PATH, you can spec
5252
The default value is set to `latest`, in which case the plugin will always check if the latest jbang release is installed
5353
and proceed to download it if that's not the case.
5454

55-
Task property values may be specified directly or using their respective environment variable, System property, project
56-
property, or task option respectively, for example the following invocations are equivalent
57-
55+
Example:
5856
[source]
5957
----
6058
$ gradle jbang --jbang-script hello.jsh --jbang-args="Hello world"
61-
62-
// system properties
63-
$ gradle jbang -Djbang.script=hello.jsh -Djbang.args="Hello world"
64-
65-
// project properties
66-
$ gradle jbang -Pjbang.script=hello.jsh -Pjbang.args="Hello world"
67-
68-
// environment variables
69-
$ export JBANG_SCRIPT="hello.jsh"
70-
$ export JBANG_ARGS="Hello world"
71-
$ gradle jbang
7259
----
7360

7461
== Installation

build.gradle

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,6 @@ repositories {
7272
dependencies {
7373
compileOnly gradleApi()
7474

75-
api "org.kordamp.gradle:base-gradle-plugin:$kordampPluginVersion"
7675
api 'org.zeroturnaround:zt-exec:1.12'
7776
api "org.apache.commons:commons-compress:$commonsCompressVersion"
7877
api "commons-io:commons-io:$commonsIoVersion"

src/main/groovy/dev/jbang/gradle/tasks/JBangTask.groovy

Lines changed: 50 additions & 117 deletions
Original file line numberDiff line numberDiff line change
@@ -28,34 +28,26 @@ import org.apache.commons.compress.archivers.zip.ZipArchiveEntry
2828
import org.apache.commons.compress.archivers.zip.ZipArchiveInputStream
2929
import org.apache.commons.compress.utils.IOUtils
3030
import org.gradle.api.DefaultTask
31-
import org.gradle.api.file.Directory
3231
import org.gradle.api.file.DirectoryProperty
32+
import org.gradle.api.model.ObjectFactory
3333
import org.gradle.api.provider.ListProperty
3434
import org.gradle.api.provider.Property
35-
import org.gradle.api.provider.Provider
3635
import org.gradle.api.tasks.Input
37-
import org.gradle.api.tasks.Internal
36+
import org.gradle.api.tasks.InputDirectory
3837
import org.gradle.api.tasks.Optional
3938
import org.gradle.api.tasks.TaskAction
4039
import org.gradle.api.tasks.options.Option
4140
import org.gradle.tooling.BuildException
4241
import org.gradle.wrapper.Download
4342
import org.gradle.wrapper.IDownload
4443
import org.gradle.wrapper.Logger
45-
import org.kordamp.gradle.property.DirectoryState
46-
import org.kordamp.gradle.property.ListState
47-
import org.kordamp.gradle.property.SimpleDirectoryState
48-
import org.kordamp.gradle.property.SimpleListState
49-
import org.kordamp.gradle.property.SimpleStringState
50-
import org.kordamp.gradle.property.StringState
5144
import org.zeroturnaround.exec.ProcessExecutor
5245
import org.zeroturnaround.exec.ProcessResult
5346

47+
import javax.inject.Inject
5448
import java.nio.file.Files
5549
import java.nio.file.Path
5650

57-
import static org.kordamp.gradle.util.StringUtils.isBlank
58-
5951
/**
6052
* Run JBang with the specified parameters.
6153
*
@@ -64,28 +56,40 @@ import static org.kordamp.gradle.util.StringUtils.isBlank
6456
@CompileStatic
6557
class JBangTask extends DefaultTask {
6658
private static final boolean IS_OS_WINDOWS = System.getProperty('os.name')
67-
.toLowerCase(Locale.ENGLISH)
68-
.contains('windows')
59+
.toLowerCase(Locale.ENGLISH)
60+
.contains('windows')
6961

7062
private static final int OK_EXIT_CODE = 0
7163

72-
private final StringState script
73-
private final StringState version
74-
private final ListState jbangArgs
75-
private final ListState args
76-
private final ListState trusts
77-
private final DirectoryState installDir
64+
@Input
65+
final Property<String> script
66+
@Input
67+
@Optional
68+
final Property<String> version
69+
@Input
70+
@Optional
71+
final ListProperty<String> jbangArgs
72+
@Input
73+
@Optional
74+
final ListProperty<String> args
75+
@Input
76+
@Optional
77+
final ListProperty<String> trusts
78+
@InputDirectory
79+
@Optional
80+
final DirectoryProperty installDir
7881

79-
JBangTask() {
82+
@Inject
83+
JBangTask(ObjectFactory objects) {
8084
DirectoryProperty jbangCacheDirectory = project.objects.directoryProperty()
8185
jbangCacheDirectory.set(new File(project.gradle.gradleUserHomeDir, 'caches/jbang'))
8286

83-
script = SimpleStringState.of(this, 'jbang.script', '')
84-
version = SimpleStringState.of(this, 'jbang.version', 'latest')
85-
jbangArgs = SimpleListState.of(this, 'jbang.jbangArgs', [])
86-
args = SimpleListState.of(this, 'jbang.args', [])
87-
trusts = SimpleListState.of(this, 'jbang.trusts', [])
88-
installDir = SimpleDirectoryState.of(this, 'jbang.install.dir', jbangCacheDirectory.get())
87+
script = objects.property(String).convention('')
88+
version = objects.property(String).convention('latest')
89+
jbangArgs = objects.listProperty(String).convention([])
90+
args = objects.listProperty(String).convention([])
91+
trusts = objects.listProperty(String).convention([])
92+
installDir = objects.directoryProperty().convention(jbangCacheDirectory.get())
8993
}
9094

9195
@Option(option = 'jbang-script', description = 'The script to be executed by JBang (REQUIRED).')
@@ -113,80 +117,9 @@ class JBangTask extends DefaultTask {
113117
if (trusts) getTrusts().set(trusts.split(',').toList())
114118
}
115119

116-
// -- Write properties --
117-
118-
@Internal
119-
Property<String> getScript() {
120-
script.property
121-
}
122-
123-
@Internal
124-
Property<String> getVersion() {
125-
version.property
126-
}
127-
128-
@Internal
129-
ListProperty<String> getJbangArgs() {
130-
jbangArgs.property
131-
}
132-
133-
@Internal
134-
ListProperty<String> getArgs() {
135-
args.property
136-
}
137-
138-
@Internal
139-
ListProperty<String> getTrusts() {
140-
trusts.property
141-
}
142-
143-
@Internal
144-
DirectoryProperty getInstallDir() {
145-
installDir.property
146-
}
147-
148-
// -- Read-only properties --
149-
150-
@Input
151-
Provider<String> getResolvedScript() {
152-
script.provider
153-
}
154-
155-
@Input
156-
@Optional
157-
Provider<String> getResolvedVersion() {
158-
version.provider
159-
}
160-
161-
@Input
162-
@Optional
163-
Provider<List<String>> getResolvedJbangArgs() {
164-
jbangArgs.provider
165-
}
166-
167-
@Input
168-
@Optional
169-
Provider<List<String>> getResolvedArgs() {
170-
args.provider
171-
}
172-
173-
@Input
174-
@Optional
175-
Provider<List<String>> getResolvedTrusts() {
176-
trusts.provider
177-
}
178-
179-
@Input
180-
@Optional
181-
Provider<Directory> getResolvedInstallDir() {
182-
installDir.provider
183-
}
184-
185-
// -- execution --
186-
187120
@TaskAction
188121
void runTask() {
189-
if (isBlank(getResolvedScript().getOrNull())) {
122+
if (!script.getOrNull()) {
190123
throw new IllegalArgumentException("A value for script must be defined")
191124
}
192125

@@ -204,14 +137,14 @@ class JBangTask extends DefaultTask {
204137
if (result.getExitValue() == OK_EXIT_CODE) {
205138
logger.info('Found JBang v.' + result.outputString())
206139
} else {
207-
String jbangVersion = getResolvedVersion().get()
140+
String jbangVersion = version.get()
208141
logger.warn('JBang not found. Checking cached version ' + jbangVersion)
209142

210143
if ('latest' == jbangVersion) {
211144
jbangVersion = resolveLatestVersion()
212145
}
213146

214-
Path jbangInstallPath = getResolvedInstallDir().get().getAsFile().toPath()
147+
Path jbangInstallPath = installDir.get().getAsFile().toPath()
215148
Path installDir = jbangInstallPath.toAbsolutePath()
216149
jbangHome = installDir.resolve("jbang-${jbangVersion}".toString())
217150

@@ -230,7 +163,7 @@ class JBangTask extends DefaultTask {
230163
}
231164

232165
private void download(String jbangVersion) {
233-
Path jbangInstallPath = getResolvedInstallDir().get().getAsFile().toPath()
166+
Path jbangInstallPath = installDir.get().getAsFile().toPath()
234167
Path installDir = jbangInstallPath.toAbsolutePath()
235168
String uri = String.format('https://github.com/jbangdev/jbang/releases/download/v%s/jbang-%s.zip', jbangVersion, jbangVersion)
236169

@@ -274,22 +207,22 @@ class JBangTask extends DefaultTask {
274207
command.add(findJBangExecutable() + ' version')
275208
try {
276209
return new ProcessExecutor()
277-
.command(command)
278-
.readOutput(true)
279-
.destroyOnExit()
280-
.execute()
210+
.command(command)
211+
.readOutput(true)
212+
.destroyOnExit()
213+
.execute()
281214
} catch (Exception e) {
282215
throw new BuildException('Error while fetching the JBang version', e)
283216
}
284217
}
285218

286219
private void executeTrust() {
287-
if (!getResolvedTrusts().get()) {
220+
if (!trusts.get()) {
288221
// No trust required
289222
return
290223
}
291224
List<String> command = command()
292-
String trustCommand = findJBangExecutable() + ' trust add ' + String.join(' ', getResolvedTrusts().get())
225+
String trustCommand = findJBangExecutable() + ' trust add ' + String.join(' ', trusts.get())
293226
command.add(trustCommand)
294227

295228
// Log the user-friendly trust command
@@ -307,13 +240,13 @@ class JBangTask extends DefaultTask {
307240
// A single string is needed, because if "sh -c jbang" is used for execution, the parameters need to be passed as single string
308241
StringBuilder executable = new StringBuilder(findJBangExecutable())
309242
executable.append(' run ')
310-
if (getResolvedJbangArgs().get()) {
311-
executable.append(' ').append(String.join(' ', getResolvedJbangArgs().get())).append(' ')
243+
if (jbangArgs.get()) {
244+
executable.append(' ').append(String.join(' ', jbangArgs.get())).append(' ')
312245
}
313246

314-
executable.append(getResolvedScript().get())
315-
if (getResolvedArgs().get()) {
316-
executable.append(' ').append(String.join(' ', getResolvedArgs().get()))
247+
executable.append(script.get())
248+
if (args.get()) {
249+
executable.append(' ').append(String.join(' ', args.get()))
317250
}
318251

319252
command.add(executable.toString())
@@ -331,11 +264,11 @@ class JBangTask extends DefaultTask {
331264
logger.debug "Full command with shell wrapper: $command"
332265
try {
333266
return new ProcessExecutor()
334-
.command(command)
335-
.redirectOutput(System.out)
336-
.redirectError(System.err)
337-
.destroyOnExit()
338-
.execute()
267+
.command(command)
268+
.redirectOutput(System.out)
269+
.redirectError(System.err)
270+
.destroyOnExit()
271+
.execute()
339272
} catch (Exception e) {
340273
throw new BuildException("Error while executing JBang", e)
341274
}

0 commit comments

Comments
 (0)