Skip to content

Command Line Execution Plug-in for the Kobalt build system

License

Notifications You must be signed in to change notification settings

ethauvin/kobalt-exec

Repository files navigation

Command Line Execution plug-in for Kobalt

License (3-Clause BSD) release Build Status CircleCI Download

The plug-in allows for the execution of system commands, similarly to the Gradle Exec or Ant Exec tasks.

To use the plug-in include the following in your Build.kt file:

import net.thauvin.erik.kobalt.plugin.exec.*

val bs = buildScript {
    plugins("net.thauvin.erik:kobalt-exc:")
}

val p = project {
    name = "example"

    exec {
       commandLine("echo", "Hello, World!")
    }
}

View Example

To invoke the exec task:

./kobaltw exec

commandLine Directive

The commandLine directive is used to execute command line(s) during the build process:

exec {
    commandLine("cmd", "/c", "stop.bat", dir = "../tomcat/bin", os = setOf(Os.WINDOWS))
    commandLine("./stop.sh", dir = "../tomcat/bin", os = setOf(Os.MAC, Os.LINUX))
    commandLine("sh", "-c", "ps aux | grep tomcat", os = setOf(Os.MAC, Os.LINUX), fail = setOf(Fail.EXIT))
    commandLine("cmd", "/c", "tasklist | find \"tomcat\"", os = setOf(Os.WINDOWS), fail = setOf(Fail.EXIT))
}

Parameters

args

The full command line including the executable and all arguments.

exec {
    commandLine(args = "ls")
    commandLine("ls", "-l")
    commandLine("cmd", "/c", "dir /Q")
}

dir

The working directory in which the command should be executed. Defaults to the project directory.

exec {
    commandLine("cmd", "/c", "stop.bat", dir = "../tomcat/bin")
    commandLine("./stop.sh", dir = "../tomcat/bin")
}

os

List of operating systems on which the command may be executed. If the current OS is contained within the list, the command will be executed.

The following predefined values are available:

Name Operating System
Os.CYGWIN Cygwin for Windows
Os.FREEBSD FreeBSD
Os.LINUX Linux
Os.MAC Apple Macintosh / OS X
Os.MINGW Minimalist GNU for Windows
OS.MSYS MinGW Minimal System
Os.OPENVMS OpenVMS
Os.OS400 OS/400
Os.SOLARIS Solaris / SunOS
Os.TANDEM Tandem's Non-Stop
Os.WINDOWS Microsoft Windows*
Os.ZOS z/OS / OS/390

* Excluding Cygwin, MinGW and MSYS.

exec {
    commandLine("cmd", "/c", "stop.bat", os = setOf(Os.WINDOWS))
    commandLine("./stop.sh", os = setOf(Os.LINUX, Os.MAC))
}

fail

List of error options to specify whether data returned to the standard streams and/or an abnormal exit value constitute build failure signaling.

The following predefined values are available:

Name Failure When
Fail.EXIT Exit value > 0
Fail.NORMAL Exit value > 0 or any data to the standard error stream (stderr)
Fail.OUTPUT Any data to the standard output stream (stdout) or stderr.
Fail.STDERR Any data to stderr.
Fail.STDOUT Any data to stdout.
Fail.ALL Any of the conditions above.
Fail.NONE Never fails.

Fail.NORMAL is the default value.

exec {
    commandLine("cmd", "/c", "stop.bat", fail = setOf(Fail.EXIT))
    commandLine("./stop.sh", fail = setOf(Fail.EXIT, Fail.STDOUT))
}

taskName

Additionally, you can specify a task name to easily identify multiple exec tasks.

exec {
    taskName = "start"
    commandLine("./start.sh", os = setOf(Os.LINUX, Os.MAC))
}

exec {
    taskName = "stop"
    commandLine("./stop.sh", os = setOf(Os.LINUX, Os.MAC))
}
./kobaltw start
./kobaltw stop

dependsOn

By default the exec task depends on assemble, use the dependsOn parameter to change the dependencies:

exec {
    dependsOn = listOf("assemble", "run")
    commandLine("cmd", "/c", "start.bat", fail = setOf(Fail.EXIT))
}

Logging / Debugging

To view the output of the exec task, use:

./kobaltw exec --log 2

You could also redirect the error stream to a file:

exec {
    commandLine("sh", "-c", "./stop.sh 2> error.txt", os = setOf(Os.LINUX))
    commandLine("cmd", "/c", "stop.bat 2> error.txt", os = setOf(Os.WINDOWS))
}