Compare commits

..

78 commits

Author SHA1 Message Date
acb492b30e Fixed badges. 2018-06-18 20:13:08 -07:00
a2bbaf9f0f Added CircleCI 2.0 configuration. 2017-10-31 16:17:14 -07:00
38d7714f22 Kobalt 1.0.90, TestNG 6.12 updates. 2017-10-31 16:16:54 -07:00
49a01d2586 Added release badge. 2017-05-30 15:12:46 -07:00
9d5b969dd9 Added circleci configuration. 2017-05-29 18:37:13 -07:00
dc99641c3e Kobalt 1.0.86 update. 2017-05-29 18:36:40 -07:00
b0e025206b Version 0.7.0 2017-04-30 16:14:03 -07:00
182b975b85 Clarified Os.WINDOWS exclusions. 2017-04-30 16:12:49 -07:00
0531a8a139 Formatting. 2017-04-30 15:59:56 -07:00
5672ad96b0 Examples cleanup. 2017-04-29 23:05:22 -07:00
a55d7f34eb Cleanup. 2017-04-29 18:55:11 -07:00
43d55803a9 Changed Os.WINDOWS to no longer include Cygwin, MinGW or MSYS. 2017-04-29 17:11:06 -07:00
6530e8f7be Kobalt 1.0.78 update. 2017-04-28 20:20:47 -07:00
3007041be4 Cleaned up examples. 2017-04-28 20:19:48 -07:00
9fb31c09e5 Added Cygwin, MinGW and MSYS support. 2017-04-28 10:55:59 -07:00
395fa127b9 Added taskName, dependsOn.
Changed commandLine(args) from List to vararg.
2017-04-28 00:26:04 -07:00
d990c6d598 Added clean for testing. 2017-04-28 00:24:10 -07:00
079d8877f1 Prep for 0.6.5 release. 2017-04-24 14:19:53 -07:00
a52cdc7079 Kobalt 1.0.75 update. 2017-04-24 14:19:30 -07:00
c132f817b4 Kobalt 1.0.69 update. 2017-04-18 17:58:33 -07:00
a89860e944 Formatting. 2017-04-18 17:54:48 -07:00
5f896dc03e Fix for new TaskResult signature. 2017-04-18 17:52:36 -07:00
d56671160c Removed test template. 2017-03-26 22:53:17 -07:00
663dcb637f Kobalt 1.0.30 update. 2017-03-26 22:53:04 -07:00
b04b7a9acb IDEA project update. 2017-03-26 22:51:59 -07:00
2601320749 Added before_cache 2017-03-21 18:39:07 -07:00
60f4a09815 Added autoGitTag. 2017-03-21 15:23:57 -07:00
8788ee4658 Updated to Kobalt 1.0.19. 2017-03-21 15:17:08 -07:00
ece42cb69f Updated scopes. 2017-03-08 13:16:02 -08:00
816dcd8843 Updated license copyright. 2017-03-08 12:19:43 -08:00
4171f5bb39 Kobalt 1.0.6 update. 2017-03-08 11:19:40 -08:00
f823f3be8c Added examples to main build file. 2017-03-08 10:05:39 -08:00
c4a59b86c3 Simplified imports. 2017-03-06 22:25:09 -08:00
91f5d23bc0 Release 0.6.3 prep 2017-03-06 21:16:50 -08:00
6013d9cfdf Added example to IDEA project. 2017-03-06 21:16:28 -08:00
a4a3b24a7b Kobalt 1.0.x syntax 2017-03-06 14:15:27 -08:00
53e80b18e7 Kotlin 1.1 and Kobalt 1.0.x optimization 2017-03-06 14:08:05 -08:00
572ddd0a9f Rebuilt IDEA project from scratch. 2017-03-06 14:07:23 -08:00
47ad7ed59e Start of Kotlin 1.1 and Kobalt 1.0.x migration. 2017-03-06 11:06:37 -08:00
fe121bb645 Kobalt 0.905 update 2016-10-03 15:49:36 -07:00
0fe3515faf Fixed TravisCI. 2016-08-07 11:08:33 -07:00
87b38723ab Debugging TravisCI. 2016-08-07 10:59:44 -07:00
eec696d1ea Debugging TravisCI. 2016-08-07 10:55:03 -07:00
50a6ba34af Debugging TravisCI. 2016-08-07 10:52:23 -07:00
063f869468 Debugging TravisCI. 2016-08-07 10:40:06 -07:00
13f2ff6e50 TravisCI fix. 2016-08-07 10:35:10 -07:00
39dc771930 Updated to Kobalt 0.890 2016-08-07 10:22:15 -07:00
ca0e2b2949 Cleaned build files. 2016-08-04 20:59:50 -07:00
159f96c1d6 Kobalt 0.889 update. 2016-08-04 20:59:17 -07:00
ef73af3fbf Version 0.6.2 2016-07-31 20:44:47 -07:00
f2a2ad9c04 Updated to Kobalt 0.879 2016-07-31 13:49:39 -07:00
cd08c52ce5 Updated to kobalt 0.869 2016-07-25 19:11:30 -07:00
bb15076c61 Version 0.6.1 2016-07-21 23:30:20 -07:00
eed5f8798a Updated t0 kobalt 0.867 2016-07-21 23:28:53 -07:00
fee2a46527 fixup! Update kobalt. 2016-07-21 14:59:55 -07:00
c06ca1c60c Update kobalt. 2016-07-21 14:22:21 -07:00
b5bc218d7f Fix for TravisCI. 2016-07-21 09:24:56 -07:00
27bccf5a8c Updated kobalt. 2016-07-21 00:05:28 -07:00
407ae4d3a5 Final (hopefully) testing with Travis. 2016-07-20 12:54:11 -07:00
0450b596e2 Debugging Travis build process. 2016-07-20 11:43:02 -07:00
ae46193054 Debugging Travis build process. 2016-07-20 11:34:06 -07:00
f2cf1d2b99 Updated to Kobalt 0.860. 2016-07-20 11:22:15 -07:00
bf42e81afb Trying new Travis build. 2016-07-17 20:06:44 -07:00
0ab03b67b2 Added download badge 2016-07-13 11:02:32 -07:00
51110488b5 Added Fail.NONE
More documentation.
2016-07-13 10:50:00 -07:00
adbfa2b2dd fixup! fixup! More documentation. 2016-07-13 01:35:40 -07:00
796343ee7b fixup! More documentation. 2016-07-13 01:32:43 -07:00
6ab9efe714 More documentation. 2016-07-13 01:13:49 -07:00
0dfaf8fe46 Added license. 2016-07-13 00:31:22 -07:00
84f64f5437 Added predefined operating systems value.
Started documentation.
2016-07-13 00:26:17 -07:00
f2ff209389 fixup! Added .gitattributes 2016-07-12 18:51:34 -07:00
5f4faa88a0 Added .gitattributes 2016-07-12 18:47:48 -07:00
10d4ac75b7 Made example kobaltw executable. 2016-07-12 18:43:48 -07:00
abacf3dd8d Made kobaltw executable. 2016-07-12 18:36:25 -07:00
2f54f85294 Added README.md. 2016-07-12 18:28:40 -07:00
0063848981 Added ConfigActor injection.
Added Tarvis CI configuration.
2016-07-12 17:56:49 -07:00
47beeb1510 Added version to pom. 2016-07-12 12:15:33 -07:00
0e1d0a3833 Made Fail.NORMAL default. 2016-07-12 12:01:58 -07:00
33 changed files with 1297 additions and 231 deletions

31
.circleci/config.yml Normal file
View file

@ -0,0 +1,31 @@
version: 2
jobs:
build:
docker:
- image: circleci/openjdk:8-jdk
working_directory: ~/repo
environment:
JVM_OPTS: -Xmx3200m
TERM: dumb
steps:
- checkout
- restore_cache:
keys:
- kobalt-dependencies-{{ checksum "kobalt/src/Build.kt" }}
# fallback to using the latest cache if no exact match is found
- kobalt-dependencies-
- run:
name: Check Versions
command: ./kobaltw checkVersions
- save_cache:
paths: ~/.kobalt
key: kobalt-dependencies-{{ checksum "kobalt/src/Build.kt" }}
- run:
name: Assemble
command: ./kobaltw assemble

5
.gitattributes vendored Normal file
View file

@ -0,0 +1,5 @@
# Set the default behavior, in case people don't have core.autocrlf set.
* text=auto
# batch files are specific to windows and always crlf
*.bat eol=crlf

8
.gitignore vendored
View file

@ -4,8 +4,9 @@
**/.idea/tasks.xml **/.idea/tasks.xml
**/.idea/workspace.xml **/.idea/workspace.xml
*.iws *.iws
.DS_Store *.sublime-*
.classpath .classpath
.DS_Store
.gradle .gradle
.kobalt .kobalt
.nb-gradle .nb-gradle
@ -15,8 +16,10 @@
/build /build
/deploy /deploy
/dist /dist
/example/libs/
/gen /gen
/gradle.properties /gradle.properties
/lib
/libs /libs
/local.properties /local.properties
/out /out
@ -24,7 +27,6 @@
/project.properties /project.properties
/target /target
/test-output /test-output
Thumbs.db
ehthumbs.db ehthumbs.db
kobaltBuild kobaltBuild
/example/libs/ Thumbs.db

9
.idea/codeStyleSettings.xml generated Normal file
View file

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectCodeStyleSettingsManager">
<option name="PER_PROJECT_SETTINGS">
<value />
</option>
<option name="PREFERRED_PROJECT_CODE_STYLE" value="Erik's Code Style" />
</component>
</project>

23
.idea/compiler.xml generated
View file

@ -1,23 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="CompilerConfiguration">
<option name="DEFAULT_COMPILER" value="Javac" />
<resourceExtensions />
<wildcardResourcePatterns>
<entry name="!?*.java" />
<entry name="!?*.form" />
<entry name="!?*.class" />
<entry name="!?*.groovy" />
<entry name="!?*.scala" />
<entry name="!?*.flex" />
<entry name="!?*.kt" />
<entry name="!?*.clj" />
<entry name="!?*.aj" />
</wildcardResourcePatterns>
<annotationProcessing>
<profile default="true" name="Default" enabled="false">
<processorPath useClasspath="true" />
</profile>
</annotationProcessing>
</component>
</project>

View file

@ -1,6 +1,6 @@
<component name="CopyrightManager"> <component name="CopyrightManager">
<copyright> <copyright>
<option name="myName" value="Erik's Copyright Notice" /> <option name="myName" value="Erik's Copyright Notice" />
<option name="notice" value="&amp;#36;file.fileName&#10;&#10;Copyright (c) &amp;#36;today.year, Erik C. Thauvin (erik@thauvin.net)&#10;All rights reserved.&#10;&#10;Redistribution and use in source and binary forms, with or without&#10;modification, are permitted provided that the following conditions are met:&#10;&#10; Redistributions of source code must retain the above copyright notice, this&#10; list of conditions and the following disclaimer.&#10;&#10; Redistributions in binary form must reproduce the above copyright notice,&#10; this list of conditions and the following disclaimer in the documentation&#10; and/or other materials provided with the distribution.&#10;&#10; Neither the name of this project nor the names of its contributors may be&#10; used to endorse or promote products derived from this software without&#10; specific prior written permission.&#10;&#10;THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS &quot;AS IS&quot;&#10;AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE&#10;IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE&#10;DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE&#10;FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL&#10;DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR&#10;SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER&#10;CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,&#10;OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE&#10;OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." /> <option name="notice" value="&amp;#36;file.fileName&#10;&#10;Copyright (c) 2016-&amp;#36;today.year, Erik C. Thauvin (erik@thauvin.net)&#10;All rights reserved.&#10;&#10;Redistribution and use in source and binary forms, with or without&#10;modification, are permitted provided that the following conditions are met:&#10;&#10; Redistributions of source code must retain the above copyright notice, this&#10; list of conditions and the following disclaimer.&#10;&#10; Redistributions in binary form must reproduce the above copyright notice,&#10; this list of conditions and the following disclaimer in the documentation&#10; and/or other materials provided with the distribution.&#10;&#10; Neither the name of this project nor the names of its contributors may be&#10; used to endorse or promote products derived from this software without&#10; specific prior written permission.&#10;&#10;THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS &quot;AS IS&quot;&#10;AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE&#10;IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE&#10;DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE&#10;FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL&#10;DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR&#10;SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER&#10;CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,&#10;OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE&#10;OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." />
</copyright> </copyright>
</component> </component>

View file

@ -1,5 +1,5 @@
<component name="CopyrightManager"> <component name="CopyrightManager">
<settings default=""> <settings default="Erik's Copyright Notice">
<module2copyright> <module2copyright>
<element module="Source" copyright="Erik's Copyright Notice" /> <element module="Source" copyright="Erik's Copyright Notice" />
</module2copyright> </module2copyright>

View file

@ -1,7 +0,0 @@
<component name="InspectionProjectProfileManager">
<settings>
<option name="PROJECT_PROFILE" value="Project Default" />
<option name="USE_PROJECT_PROFILE" value="true" />
<version value="1.0" />
</settings>
</component>

10
.idea/kobalt.xml generated
View file

@ -4,9 +4,15 @@
<option name="linkedExternalProjectsSettings"> <option name="linkedExternalProjectsSettings">
<KobaltProjectSettings> <KobaltProjectSettings>
<option name="autoDownloadKobalt" value="true" /> <option name="autoDownloadKobalt" value="true" />
<option name="downloadSources" value="false" />
<option name="externalProjectPath" value="$PROJECT_DIR$" /> <option name="externalProjectPath" value="$PROJECT_DIR$" />
<option name="kobaltHome" value="$USER_HOME$/.kobalt/wrapper/dist/kobalt-0.847" /> <option name="kobaltHome" value="$USER_HOME$/.kobalt/wrapper/dist/kobalt-1.0.82" />
<option name="useAutoImport" value="true" /> <option name="modules">
<set>
<option value="$PROJECT_DIR$" />
</set>
</option>
<option name="profiles" value="" />
</KobaltProjectSettings> </KobaltProjectSettings>
</option> </option>
</component> </component>

42
.idea/misc.xml generated
View file

@ -38,27 +38,29 @@
<property name="caretWidth" class="java.lang.Integer" /> <property name="caretWidth" class="java.lang.Integer" />
</properties> </properties>
</component> </component>
<component name="EntryPointsManager"> <component name="ProjectInspectionProfilesVisibleTreeState">
<entry_points version="2.0" /> <entry key="Project Default">
<profile-state>
<expanded-state>
<State>
<id />
</State>
<State>
<id>Java</id>
</State>
<State>
<id>Portability issuesJava</id>
</State>
</expanded-state>
<selected-state>
<State>
<id>Android</id>
</State>
</selected-state>
</profile-state>
</entry>
</component> </component>
<component name="MavenImportPreferences"> <component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" project-jdk-name="1.8.x" project-jdk-type="JavaSDK">
<option name="generalSettings">
<MavenGeneralSettings>
<option name="mavenHome" value="Bundled (Maven 3)" />
</MavenGeneralSettings>
</option>
</component>
<component name="ProjectLevelVcsManager" settingsEditedManually="false">
<OptionsSetting value="true" id="Add" />
<OptionsSetting value="true" id="Remove" />
<OptionsSetting value="true" id="Checkout" />
<OptionsSetting value="true" id="Update" />
<OptionsSetting value="true" id="Status" />
<OptionsSetting value="true" id="Edit" />
<ConfirmationsSetting value="0" id="Add" />
<ConfirmationsSetting value="0" id="Remove" />
</component>
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_6" assert-keyword="true" jdk-15="true" project-jdk-name="1.8.x" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/kobaltBuild/classes" /> <output url="file://$PROJECT_DIR$/kobaltBuild/classes" />
</component> </component>
</project> </project>

1
.idea/modules.xml generated
View file

@ -3,6 +3,7 @@
<component name="ProjectModuleManager"> <component name="ProjectModuleManager">
<modules> <modules>
<module fileurl="file://$PROJECT_DIR$/kobalt/Build.kt.iml" filepath="$PROJECT_DIR$/kobalt/Build.kt.iml" /> <module fileurl="file://$PROJECT_DIR$/kobalt/Build.kt.iml" filepath="$PROJECT_DIR$/kobalt/Build.kt.iml" />
<module fileurl="file://$PROJECT_DIR$/kobalt-exec.iml" filepath="$PROJECT_DIR$/kobalt-exec.iml" />
</modules> </modules>
</component> </component>
</project> </project>

3
.idea/scopes/Copyright.xml generated Normal file
View file

@ -0,0 +1,3 @@
<component name="DependencyValidationManager">
<scope name="Copyright" pattern="file[kobalt-exec]:src/main/kotlin//*.kt" />
</component>

View file

@ -1,3 +0,0 @@
<component name="DependencyValidationManager">
<scope name="Source" pattern="file[kobalt-exec]:src/main/kotlin//**kt" />
</component>

19
.travis.yml Normal file
View file

@ -0,0 +1,19 @@
language: java
jdk:
- oraclejdk8
before_install:
- chmod +x kobaltw
install: true
cache:
directories:
- $HOME/.m2
- $HOME/.kobalt
before_cache:
- rm -rf .kobalt/*
script: ./kobaltw clean assemble

27
LICENSE.txt Normal file
View file

@ -0,0 +1,27 @@
Copyright (c) 2016-2017, Erik C. Thauvin (erik@thauvin.net)
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
* Neither the name of this project nor the names of its contributors may be
used to endorse or promote products derived from this software without
specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

172
README.md Normal file
View file

@ -0,0 +1,172 @@
# Command Line Execution plug-in for [Kobalt](http://beust.com/kobalt/home/index.html)
[![License (3-Clause BSD)](https://img.shields.io/badge/license-BSD%203--Clause-blue.svg?style=flat-square)](http://opensource.org/licenses/BSD-3-Clause) [![release](https://img.shields.io/github/release/ethauvin/kobalt-exec.svg)](https://github.com/ethauvin/kobalt-exec/releases/latest) [![Build Status](https://travis-ci.org/ethauvin/kobalt-exec.svg?branch=master)](https://travis-ci.org/ethauvin/kobalt-exec) [![CircleCI](https://circleci.com/gh/ethauvin/kobalt-exec/tree/master.svg?style=shield)](https://circleci.com/gh/ethauvin/kobalt-exec/tree/master) [![Download](https://api.bintray.com/packages/ethauvin/maven/kobalt-exec/images/download.svg)](https://bintray.com/ethauvin/maven/kobalt-exec/_latestVersion)
The plug-in allows for the execution of system commands, similarly to the [Gradle Exec](https://docs.gradle.org/current/dsl/org.gradle.api.tasks.Exec.html) or [Ant Exec](https://ant.apache.org/manual/Tasks/exec.html) tasks.
To use the plug-in include the following in your `Build.kt` file:
```kotlin
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](https://github.com/ethauvin/kobalt-exec/blob/master/example/kobalt/src/Build.kt)
To invoke the `exec` task:
```sh
./kobaltw exec
```
## `commandLine` Directive
The `commandLine` directive is used to execute command line(s) during the build process:
```kotlin
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.
```kotlin
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.
```kotlin
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
<sub>* Excluding Cygwin, MinGW and MSYS.</sub>
```kotlin
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.
```kotlin
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.
```kotlin
exec {
taskName = "start"
commandLine("./start.sh", os = setOf(Os.LINUX, Os.MAC))
}
exec {
taskName = "stop"
commandLine("./stop.sh", os = setOf(Os.LINUX, Os.MAC))
}
```
```sh
./kobaltw start
./kobaltw stop
```
## dependsOn
By default the `exec` task depends on `assemble`, use the `dependsOn` parameter to change the dependencies:
```kotlin
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:
```sh
./kobaltw exec --log 2
```
You could also redirect the error stream to a file:
```kotlin
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))
}
```

37
clean.sh Normal file
View file

@ -0,0 +1,37 @@
#!/bin/bash
DEBUG=false
rm="rm -rf"
if [ "$DEBUG" = true ]; then
rm="echo rm -rf"
fi
buildkt="kobalt/src/Build.kt"
name=$(cat $buildkt | grep -m 1 "name = " | cut -d"\"" -f 2)
group=$(cat $buildkt | grep -m 1 "group = " | cut -d"\"" -f 2)
if [ -z "$1" ]; then
version=$(cat $buildkt | grep -m 1 "version = " | cut -d"\"" -f 2)
else
version="$1"
fi
maven="/k/maven/repository/${group//.//}/${name}/${version}"
kobalt="$HOME/.kobalt/cache/${group//.//}/${name}/${version}"
localRepo="$HOME/.kobalt/localMavenRepo/${group//.//}/${name}/${version}"
read -p "Delete version ${version}? " -n 1 -r
echo
if [[ $REPLY =~ ^[Yy]$ ]]; then
for dir in "$kobalt" "$maven" "$localRepo"; do
if [ -d "$dir" ]; then
echo -e "Deleting : \e[32;1m$dir\e[0m"
$rm "$dir"
else
echo -e "Not Found: \e[31;1m$dir\e[0m"
fi
done
fi

View file

@ -1,32 +1,25 @@
import com.beust.kobalt.* import com.beust.kobalt.*
import com.beust.kobalt.plugin.packaging.*
import com.beust.kobalt.plugin.application.* import com.beust.kobalt.plugin.application.*
import com.beust.kobalt.plugin.java.* import com.beust.kobalt.plugin.packaging.*
import net.thauvin.erik.kobalt.plugin.exec.* import net.thauvin.erik.kobalt.plugin.exec.*
val pl = plugins(file("../kobaltBuild/libs/kobalt-exec-0.1.jar")) // ./kobaltw exec echo ps --log 2
// ./kobaltw exec --log 2
// ./kobaltw echo --log 2
// ./kobaltw ps --log 2
val p = project { val bs = buildScript {
repos(localMaven())
plugins("net.thauvin.erik:kobalt-exec:")
}
val example = project {
name = "example" name = "example"
group = "com.example" group = "com.example"
artifactId = name artifactId = name
version = "0.1" version = "0.1"
sourceDirectories {
path("src/main/java")
}
sourceDirectoriesTest {
path("src/test/java")
}
dependencies {
}
dependenciesTest {
}
assemble { assemble {
jar { jar {
} }
@ -37,7 +30,23 @@ val p = project {
} }
exec { exec {
commandLine(args = listOf("ls", "-l"), dir = "../libs", fail = setOf(Fail.NORMAL)) commandLine("ls", "-l", dir = "../kobalt/wrapper", os = setOf(Os.LINUX, Os.MINGW, Os.CYGWIN))
commandLine(listOf("cmd", "/c", "echo", "Test"), os = listOf("Win", "Windows"), fail = setOf(Fail.NORMAL)) commandLine("cmd", "/c", "dir /Q", dir = "../kobalt/wrapper", os = setOf(Os.WINDOWS))
}
exec {
taskName = "echo"
dependsOn = listOf("exec", "run")
val echo = arrayOf("echo", "Test", "Example")
commandLine(*echo, os = setOf(Os.LINUX, Os.MINGW, Os.CYGWIN))
commandLine("cmd", "/c", *echo, os = setOf(Os.WINDOWS))
}
exec {
taskName = "ps"
dependsOn = listOf() // no dependencies
commandLine("sh", "-c", "ps aux | grep bash", os = setOf(Os.LINUX, Os.MINGW, Os.CYGWIN))
commandLine("cmd", "/c", "tasklist | find \"cmd.exe\"", os = setOf(Os.WINDOWS), fail = setOf(Fail.EXIT))
} }
} }

View file

@ -1 +1 @@
kobalt.version=0.846 kobalt.version=1.0.90

3
example/kobaltw Normal file → Executable file
View file

@ -1 +1,2 @@
java -jar $(dirname $0)/kobalt/wrapper/kobalt-wrapper.jar $* #!/usr/bin/env sh
java -jar "`dirname "$0"`/kobalt/wrapper/kobalt-wrapper.jar" $*

4
example/kobaltw.bat Normal file
View file

@ -0,0 +1,4 @@
@echo off
set DIRNAME=%~dp0
if "%DIRNAME%" == "" set DIRNAME=.
java -jar "%DIRNAME%/kobalt/wrapper/kobalt-wrapper.jar" %*

682
kobalt-exec.iml Normal file
View file

@ -0,0 +1,682 @@
<?xml version="1.0" encoding="UTF-8"?>
<module external.linked.project.id="kobalt-exec" external.linked.project.path="$MODULE_DIR$" external.root.project.path="$MODULE_DIR$" external.system.id="KOBALT" type="JAVA_MODULE" version="4">
<component name="NewModuleRootManager">
<output url="file://$MODULE_DIR$/kobaltBuild/classes" />
<output-test url="file://$MODULE_DIR$/kobaltBuild/test-classes" />
<exclude-output />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/src/main/kotlin" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/test/kotlin" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
<excludeFolder url="file://$MODULE_DIR$/kobaltBuild" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="module-library" scope="TEST">
<library name="Kobalt: org.yaml:snakeyaml:jar:1.17">
<CLASSES>
<root url="jar://$USER_HOME$/.kobalt/cache/org/yaml/snakeyaml/1.17/snakeyaml-1.17.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</orderEntry>
<orderEntry type="module-library" scope="TEST">
<library name="Kobalt: org.jetbrains:annotations:jar:13.0">
<CLASSES>
<root url="jar://$USER_HOME$/.kobalt/cache/org/jetbrains/annotations/13.0/annotations-13.0.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</orderEntry>
<orderEntry type="module-library" scope="TEST">
<library name="Kobalt: org.jetbrains.kotlin:kotlin-stdlib:jar:1.1.2-2">
<CLASSES>
<root url="jar://$USER_HOME$/.kobalt/cache/org/jetbrains/kotlin/kotlin-stdlib/1.1.2-2/kotlin-stdlib-1.1.2-2.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</orderEntry>
<orderEntry type="module-library">
<library name="Kobalt: org.jetbrains:annotations:jar:13.0">
<CLASSES>
<root url="jar://$USER_HOME$/.kobalt/cache/org/jetbrains/annotations/13.0/annotations-13.0.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</orderEntry>
<orderEntry type="module-library" scope="TEST">
<library name="Kobalt: org.jetbrains.kotlin:kotlin-test:jar:1.1.2-2">
<CLASSES>
<root url="jar://$USER_HOME$/.kobalt/cache/org/jetbrains/kotlin/kotlin-test/1.1.2-2/kotlin-test-1.1.2-2.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</orderEntry>
<orderEntry type="module-library">
<library name="Kobalt: org.jetbrains.kotlin:kotlin-stdlib:jar:1.1.2-2">
<CLASSES>
<root url="jar://$USER_HOME$/.kobalt/cache/org/jetbrains/kotlin/kotlin-stdlib/1.1.2-2/kotlin-stdlib-1.1.2-2.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</orderEntry>
<orderEntry type="module-library" scope="TEST">
<library name="Kobalt: com.beust:jcommander:jar:1.64">
<CLASSES>
<root url="jar://$USER_HOME$/.kobalt/cache/com/beust/jcommander/1.64/jcommander-1.64.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</orderEntry>
<orderEntry type="module-library" scope="TEST">
<library name="Kobalt: org.testng:testng:jar:(0,]">
<CLASSES>
<root url="jar://$USER_HOME$/.kobalt/cache/org/testng/testng/6.11/testng-6.11.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</orderEntry>
<orderEntry type="module-library">
<library name="Kobalt: com.beust:kobalt-plugin-api:jar:(0,]">
<CLASSES>
<root url="jar://$USER_HOME$/.kobalt/cache/com/beust/kobalt-plugin-api/1.0.68/kobalt-plugin-api-1.0.68.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</orderEntry>
<orderEntry type="module-library">
<library name="Kobalt: com.google.inject:guice:jar:4.0">
<CLASSES>
<root url="jar://$USER_HOME$/.kobalt/cache/com/google/inject/guice/4.0/guice-4.0.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</orderEntry>
<orderEntry type="module-library">
<library name="Kobalt: com.google.inject.extensions:guice-assistedinject:jar:4.0">
<CLASSES>
<root url="jar://$USER_HOME$/.kobalt/cache/com/google/inject/extensions/guice-assistedinject/4.0/guice-assistedinject-4.0.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</orderEntry>
<orderEntry type="module-library">
<library name="Kobalt: com.google.guava:guava:jar:19.0">
<CLASSES>
<root url="jar://$USER_HOME$/.kobalt/cache/com/google/guava/guava/19.0/guava-19.0.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</orderEntry>
<orderEntry type="module-library">
<library name="Kobalt: org.apache.maven:maven-model:jar:3.3.9">
<CLASSES>
<root url="jar://$USER_HOME$/.kobalt/cache/org/apache/maven/maven-model/3.3.9/maven-model-3.3.9.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</orderEntry>
<orderEntry type="module-library">
<library name="Kobalt: io.reactivex:rxjava:jar:1.1.5">
<CLASSES>
<root url="jar://$USER_HOME$/.kobalt/cache/io/reactivex/rxjava/1.1.5/rxjava-1.1.5.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</orderEntry>
<orderEntry type="module-library">
<library name="Kobalt: com.squareup.retrofit2:retrofit:jar:2.1.0">
<CLASSES>
<root url="jar://$USER_HOME$/.kobalt/cache/com/squareup/retrofit2/retrofit/2.1.0/retrofit-2.1.0.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</orderEntry>
<orderEntry type="module-library">
<library name="Kobalt: com.squareup.retrofit2:converter-gson:jar:2.1.0">
<CLASSES>
<root url="jar://$USER_HOME$/.kobalt/cache/com/squareup/retrofit2/converter-gson/2.1.0/converter-gson-2.1.0.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</orderEntry>
<orderEntry type="module-library">
<library name="Kobalt: org.eclipse.jgit:org.eclipse.jgit:jar:4.5.0.201609210915-r">
<CLASSES>
<root url="jar://$USER_HOME$/.kobalt/cache/org/eclipse/jgit/org.eclipse.jgit/4.5.0.201609210915-r/org.eclipse.jgit-4.5.0.201609210915-r.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</orderEntry>
<orderEntry type="module-library">
<library name="Kobalt: org.slf4j:slf4j-simple:jar:1.7.3">
<CLASSES>
<root url="jar://$USER_HOME$/.kobalt/cache/org/slf4j/slf4j-simple/1.7.3/slf4j-simple-1.7.3.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</orderEntry>
<orderEntry type="module-library">
<library name="Kobalt: org.apache.maven.resolver:maven-resolver-api:jar:1.0.3">
<CLASSES>
<root url="jar://$USER_HOME$/.kobalt/cache/org/apache/maven/resolver/maven-resolver-api/1.0.3/maven-resolver-api-1.0.3.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</orderEntry>
<orderEntry type="module-library">
<library name="Kobalt: org.apache.maven.resolver:maven-resolver-spi:jar:1.0.3">
<CLASSES>
<root url="jar://$USER_HOME$/.kobalt/cache/org/apache/maven/resolver/maven-resolver-spi/1.0.3/maven-resolver-spi-1.0.3.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</orderEntry>
<orderEntry type="module-library">
<library name="Kobalt: org.apache.maven.resolver:maven-resolver-util:jar:1.0.3">
<CLASSES>
<root url="jar://$USER_HOME$/.kobalt/cache/org/apache/maven/resolver/maven-resolver-util/1.0.3/maven-resolver-util-1.0.3.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</orderEntry>
<orderEntry type="module-library">
<library name="Kobalt: org.apache.maven.resolver:maven-resolver-impl:jar:1.0.3">
<CLASSES>
<root url="jar://$USER_HOME$/.kobalt/cache/org/apache/maven/resolver/maven-resolver-impl/1.0.3/maven-resolver-impl-1.0.3.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</orderEntry>
<orderEntry type="module-library">
<library name="Kobalt: org.apache.maven.resolver:maven-resolver-connector-basic:jar:1.0.3">
<CLASSES>
<root url="jar://$USER_HOME$/.kobalt/cache/org/apache/maven/resolver/maven-resolver-connector-basic/1.0.3/maven-resolver-connector-basic-1.0.3.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</orderEntry>
<orderEntry type="module-library">
<library name="Kobalt: org.apache.maven.resolver:maven-resolver-transport-http:jar:1.0.3">
<CLASSES>
<root url="jar://$USER_HOME$/.kobalt/cache/org/apache/maven/resolver/maven-resolver-transport-http/1.0.3/maven-resolver-transport-http-1.0.3.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</orderEntry>
<orderEntry type="module-library">
<library name="Kobalt: org.apache.maven.resolver:maven-resolver-transport-file:jar:1.0.3">
<CLASSES>
<root url="jar://$USER_HOME$/.kobalt/cache/org/apache/maven/resolver/maven-resolver-transport-file/1.0.3/maven-resolver-transport-file-1.0.3.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</orderEntry>
<orderEntry type="module-library">
<library name="Kobalt: org.apache.maven:maven-aether-provider:jar:3.3.9">
<CLASSES>
<root url="jar://$USER_HOME$/.kobalt/cache/org/apache/maven/maven-aether-provider/3.3.9/maven-aether-provider-3.3.9.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</orderEntry>
<orderEntry type="module-library">
<library name="Kobalt: org.testng.testng-remote:testng-remote:jar:1.3.2">
<CLASSES>
<root url="jar://$USER_HOME$/.kobalt/cache/org/testng/testng-remote/testng-remote/1.3.2/testng-remote-1.3.2.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</orderEntry>
<orderEntry type="module-library">
<library name="Kobalt: commons-io:commons-io:jar:2.5">
<CLASSES>
<root url="jar://$USER_HOME$/.kobalt/cache/commons-io/commons-io/2.5/commons-io-2.5.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</orderEntry>
<orderEntry type="module-library">
<library name="Kobalt: org.junit.platform:junit-platform-surefire-provider:jar:1.0.0-M4">
<CLASSES>
<root url="jar://$USER_HOME$/.kobalt/cache/org/junit/platform/junit-platform-surefire-provider/1.0.0-M4/junit-platform-surefire-provider-1.0.0-M4.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</orderEntry>
<orderEntry type="module-library">
<library name="Kobalt: org.junit.platform:junit-platform-runner:jar:1.0.0-M4">
<CLASSES>
<root url="jar://$USER_HOME$/.kobalt/cache/org/junit/platform/junit-platform-runner/1.0.0-M4/junit-platform-runner-1.0.0-M4.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</orderEntry>
<orderEntry type="module-library">
<library name="Kobalt: org.junit.platform:junit-platform-console:jar:1.0.0-M4">
<CLASSES>
<root url="jar://$USER_HOME$/.kobalt/cache/org/junit/platform/junit-platform-console/1.0.0-M4/junit-platform-console-1.0.0-M4.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</orderEntry>
<orderEntry type="module-library">
<library name="Kobalt: org.junit.jupiter:junit-jupiter-engine:jar:5.0.0-M4">
<CLASSES>
<root url="jar://$USER_HOME$/.kobalt/cache/org/junit/jupiter/junit-jupiter-engine/5.0.0-M4/junit-jupiter-engine-5.0.0-M4.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</orderEntry>
<orderEntry type="module-library">
<library name="Kobalt: org.junit.vintage:junit-vintage-engine:jar:4.12.0-M4">
<CLASSES>
<root url="jar://$USER_HOME$/.kobalt/cache/org/junit/vintage/junit-vintage-engine/4.12.0-M4/junit-vintage-engine-4.12.0-M4.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</orderEntry>
<orderEntry type="module-library">
<library name="Kobalt: org.apache.commons:commons-compress:jar:1.13">
<CLASSES>
<root url="jar://$USER_HOME$/.kobalt/cache/org/apache/commons/commons-compress/1.13/commons-compress-1.13.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</orderEntry>
<orderEntry type="module-library">
<library name="Kobalt: javax.inject:javax.inject:jar:1">
<CLASSES>
<root url="jar://$USER_HOME$/.kobalt/cache/javax/inject/javax.inject/1/javax.inject-1.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</orderEntry>
<orderEntry type="module-library">
<library name="Kobalt: aopalliance:aopalliance:jar:1.0">
<CLASSES>
<root url="jar://$USER_HOME$/.kobalt/cache/aopalliance/aopalliance/1.0/aopalliance-1.0.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</orderEntry>
<orderEntry type="module-library">
<library name="Kobalt: org.codehaus.plexus:plexus-utils:jar:3.0.22">
<CLASSES>
<root url="jar://$USER_HOME$/.kobalt/cache/org/codehaus/plexus/plexus-utils/3.0.22/plexus-utils-3.0.22.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</orderEntry>
<orderEntry type="module-library">
<library name="Kobalt: org.apache.commons:commons-lang3:jar:3.4">
<CLASSES>
<root url="jar://$USER_HOME$/.kobalt/cache/org/apache/commons/commons-lang3/3.4/commons-lang3-3.4.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</orderEntry>
<orderEntry type="module-library">
<library name="Kobalt: com.squareup.okhttp3:okhttp:jar:3.3.0">
<CLASSES>
<root url="jar://$USER_HOME$/.kobalt/cache/com/squareup/okhttp3/okhttp/3.3.0/okhttp-3.3.0.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</orderEntry>
<orderEntry type="module-library">
<library name="Kobalt: com.google.code.gson:gson:jar:2.7">
<CLASSES>
<root url="jar://$USER_HOME$/.kobalt/cache/com/google/code/gson/gson/2.7/gson-2.7.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</orderEntry>
<orderEntry type="module-library">
<library name="Kobalt: com.jcraft:jsch:jar:0.1.53">
<CLASSES>
<root url="jar://$USER_HOME$/.kobalt/cache/com/jcraft/jsch/0.1.53/jsch-0.1.53.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</orderEntry>
<orderEntry type="module-library">
<library name="Kobalt: com.googlecode.javaewah:JavaEWAH:jar:0.7.9">
<CLASSES>
<root url="jar://$USER_HOME$/.kobalt/cache/com/googlecode/javaewah/JavaEWAH/0.7.9/JavaEWAH-0.7.9.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</orderEntry>
<orderEntry type="module-library">
<library name="Kobalt: org.apache.httpcomponents:httpclient:jar:4.3.6">
<CLASSES>
<root url="jar://$USER_HOME$/.kobalt/cache/org/apache/httpcomponents/httpclient/4.3.6/httpclient-4.3.6.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</orderEntry>
<orderEntry type="module-library">
<library name="Kobalt: org.slf4j:slf4j-api:jar:1.7.3">
<CLASSES>
<root url="jar://$USER_HOME$/.kobalt/cache/org/slf4j/slf4j-api/1.7.3/slf4j-api-1.7.3.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</orderEntry>
<orderEntry type="module-library">
<library name="Kobalt: org.slf4j:jcl-over-slf4j:jar:1.6.2">
<CLASSES>
<root url="jar://$USER_HOME$/.kobalt/cache/org/slf4j/jcl-over-slf4j/1.6.2/jcl-over-slf4j-1.6.2.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</orderEntry>
<orderEntry type="module-library">
<library name="Kobalt: org.apache.maven:maven-model-builder:jar:3.3.9">
<CLASSES>
<root url="jar://$USER_HOME$/.kobalt/cache/org/apache/maven/maven-model-builder/3.3.9/maven-model-builder-3.3.9.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</orderEntry>
<orderEntry type="module-library">
<library name="Kobalt: org.apache.maven:maven-repository-metadata:jar:3.3.9">
<CLASSES>
<root url="jar://$USER_HOME$/.kobalt/cache/org/apache/maven/maven-repository-metadata/3.3.9/maven-repository-metadata-3.3.9.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</orderEntry>
<orderEntry type="module-library">
<library name="Kobalt: org.eclipse.aether:aether-api:jar:1.0.2.v20150114">
<CLASSES>
<root url="jar://$USER_HOME$/.kobalt/cache/org/eclipse/aether/aether-api/1.0.2.v20150114/aether-api-1.0.2.v20150114.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</orderEntry>
<orderEntry type="module-library">
<library name="Kobalt: org.eclipse.aether:aether-spi:jar:1.0.2.v20150114">
<CLASSES>
<root url="jar://$USER_HOME$/.kobalt/cache/org/eclipse/aether/aether-spi/1.0.2.v20150114/aether-spi-1.0.2.v20150114.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</orderEntry>
<orderEntry type="module-library">
<library name="Kobalt: org.eclipse.aether:aether-util:jar:1.0.2.v20150114">
<CLASSES>
<root url="jar://$USER_HOME$/.kobalt/cache/org/eclipse/aether/aether-util/1.0.2.v20150114/aether-util-1.0.2.v20150114.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</orderEntry>
<orderEntry type="module-library">
<library name="Kobalt: org.eclipse.aether:aether-impl:jar:1.0.2.v20150114">
<CLASSES>
<root url="jar://$USER_HOME$/.kobalt/cache/org/eclipse/aether/aether-impl/1.0.2.v20150114/aether-impl-1.0.2.v20150114.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</orderEntry>
<orderEntry type="module-library">
<library name="Kobalt: com.google.auto.service:auto-service:jar:1.0-rc3">
<CLASSES>
<root url="jar://$USER_HOME$/.kobalt/cache/com/google/auto/service/auto-service/1.0-rc3/auto-service-1.0-rc3.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</orderEntry>
<orderEntry type="module-library">
<library name="Kobalt: org.testng:testng:jar:6.11">
<CLASSES>
<root url="jar://$USER_HOME$/.kobalt/cache/org/testng/testng/6.11/testng-6.11.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</orderEntry>
<orderEntry type="module-library">
<library name="Kobalt: org.junit.platform:junit-platform-launcher:jar:1.0.0-M4">
<CLASSES>
<root url="jar://$USER_HOME$/.kobalt/cache/org/junit/platform/junit-platform-launcher/1.0.0-M4/junit-platform-launcher-1.0.0-M4.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</orderEntry>
<orderEntry type="module-library">
<library name="Kobalt: org.apache.maven.surefire:surefire-api:jar:2.19.1">
<CLASSES>
<root url="jar://$USER_HOME$/.kobalt/cache/org/apache/maven/surefire/surefire-api/2.19.1/surefire-api-2.19.1.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</orderEntry>
<orderEntry type="module-library">
<library name="Kobalt: org.apache.maven.surefire:common-java5:jar:2.19.1">
<CLASSES>
<root url="jar://$USER_HOME$/.kobalt/cache/org/apache/maven/surefire/common-java5/2.19.1/common-java5-2.19.1.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</orderEntry>
<orderEntry type="module-library">
<library name="Kobalt: org.junit.platform:junit-platform-suite-api:jar:1.0.0-M4">
<CLASSES>
<root url="jar://$USER_HOME$/.kobalt/cache/org/junit/platform/junit-platform-suite-api/1.0.0-M4/junit-platform-suite-api-1.0.0-M4.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</orderEntry>
<orderEntry type="module-library">
<library name="Kobalt: junit:junit:jar:4.12">
<CLASSES>
<root url="jar://$USER_HOME$/.kobalt/cache/junit/junit/4.12/junit-4.12.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</orderEntry>
<orderEntry type="module-library">
<library name="Kobalt: org.junit.jupiter:junit-jupiter-api:jar:5.0.0-M4">
<CLASSES>
<root url="jar://$USER_HOME$/.kobalt/cache/org/junit/jupiter/junit-jupiter-api/5.0.0-M4/junit-jupiter-api-5.0.0-M4.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</orderEntry>
<orderEntry type="module-library">
<library name="Kobalt: com.squareup.okio:okio:jar:1.8.0">
<CLASSES>
<root url="jar://$USER_HOME$/.kobalt/cache/com/squareup/okio/okio/1.8.0/okio-1.8.0.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</orderEntry>
<orderEntry type="module-library">
<library name="Kobalt: org.apache.httpcomponents:httpcore:jar:4.3.3">
<CLASSES>
<root url="jar://$USER_HOME$/.kobalt/cache/org/apache/httpcomponents/httpcore/4.3.3/httpcore-4.3.3.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</orderEntry>
<orderEntry type="module-library">
<library name="Kobalt: commons-logging:commons-logging:jar:1.1.3">
<CLASSES>
<root url="jar://$USER_HOME$/.kobalt/cache/commons-logging/commons-logging/1.1.3/commons-logging-1.1.3.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</orderEntry>
<orderEntry type="module-library">
<library name="Kobalt: commons-codec:commons-codec:jar:1.6">
<CLASSES>
<root url="jar://$USER_HOME$/.kobalt/cache/commons-codec/commons-codec/1.6/commons-codec-1.6.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</orderEntry>
<orderEntry type="module-library">
<library name="Kobalt: org.codehaus.plexus:plexus-interpolation:jar:1.21">
<CLASSES>
<root url="jar://$USER_HOME$/.kobalt/cache/org/codehaus/plexus/plexus-interpolation/1.21/plexus-interpolation-1.21.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</orderEntry>
<orderEntry type="module-library">
<library name="Kobalt: org.codehaus.plexus:plexus-component-annotations:jar:1.6">
<CLASSES>
<root url="jar://$USER_HOME$/.kobalt/cache/org/codehaus/plexus/plexus-component-annotations/1.6/plexus-component-annotations-1.6.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</orderEntry>
<orderEntry type="module-library">
<library name="Kobalt: org.apache.maven:maven-artifact:jar:3.3.9">
<CLASSES>
<root url="jar://$USER_HOME$/.kobalt/cache/org/apache/maven/maven-artifact/3.3.9/maven-artifact-3.3.9.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</orderEntry>
<orderEntry type="module-library">
<library name="Kobalt: org.apache.maven:maven-builder-support:jar:3.3.9">
<CLASSES>
<root url="jar://$USER_HOME$/.kobalt/cache/org/apache/maven/maven-builder-support/3.3.9/maven-builder-support-3.3.9.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</orderEntry>
<orderEntry type="module-library">
<library name="Kobalt: com.google.auto:auto-common:jar:0.3">
<CLASSES>
<root url="jar://$USER_HOME$/.kobalt/cache/com/google/auto/auto-common/0.3/auto-common-0.3.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</orderEntry>
<orderEntry type="module-library">
<library name="Kobalt: com.beust:jcommander:jar:1.64">
<CLASSES>
<root url="jar://$USER_HOME$/.kobalt/cache/com/beust/jcommander/1.64/jcommander-1.64.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</orderEntry>
<orderEntry type="module-library">
<library name="Kobalt: org.yaml:snakeyaml:jar:1.17">
<CLASSES>
<root url="jar://$USER_HOME$/.kobalt/cache/org/yaml/snakeyaml/1.17/snakeyaml-1.17.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</orderEntry>
<orderEntry type="module-library">
<library name="Kobalt: org.junit.platform:junit-platform-engine:jar:1.0.0-M4">
<CLASSES>
<root url="jar://$USER_HOME$/.kobalt/cache/org/junit/platform/junit-platform-engine/1.0.0-M4/junit-platform-engine-1.0.0-M4.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</orderEntry>
<orderEntry type="module-library">
<library name="Kobalt: org.hamcrest:hamcrest-core:jar:1.3">
<CLASSES>
<root url="jar://$USER_HOME$/.kobalt/cache/org/hamcrest/hamcrest-core/1.3/hamcrest-core-1.3.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</orderEntry>
<orderEntry type="module-library">
<library name="Kobalt: org.junit.platform:junit-platform-commons:jar:1.0.0-M4">
<CLASSES>
<root url="jar://$USER_HOME$/.kobalt/cache/org/junit/platform/junit-platform-commons/1.0.0-M4/junit-platform-commons-1.0.0-M4.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</orderEntry>
<orderEntry type="module-library">
<library name="Kobalt: org.opentest4j:opentest4j:jar:1.0.0-M2">
<CLASSES>
<root url="jar://$USER_HOME$/.kobalt/cache/org/opentest4j/opentest4j/1.0.0-M2/opentest4j-1.0.0-M2.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</orderEntry>
</component>
</module>

View file

@ -1,12 +1,42 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<module type="JAVA_MODULE" version="4"> <module external.linked.project.id="Build.kt" external.linked.project.path="$MODULE_DIR$/.." external.root.project.path="$MODULE_DIR$/.." external.system.id="KOBALT" type="JAVA_MODULE" version="4">
<component name="NewModuleRootManager" inherit-compiler-output="true"> <component name="NewModuleRootManager">
<output url="file://$MODULE_DIR$/out/classes" />
<output-test url="file://$MODULE_DIR$/out/test-classes" />
<exclude-output /> <exclude-output />
<content url="file://$MODULE_DIR$"> <content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" /> <sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
</content> </content>
<orderEntry type="inheritedJdk" /> <orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" /> <orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="library" name="kobalt.jar" level="project" /> <orderEntry type="module-library">
<library name="Kobalt: kobalt-versioneye-0.4.5.jar">
<CLASSES>
<root url="jar://$USER_HOME$/.kobalt/cache/net/thauvin/erik/kobalt-versioneye/0.4.5/kobalt-versioneye-0.4.5.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</orderEntry>
<orderEntry type="module-library">
<library name="Kobalt: kobalt-maven-local-0.5.3.jar">
<CLASSES>
<root url="jar://$USER_HOME$/.kobalt/cache/net/thauvin/erik/kobalt-maven-local/0.5.3/kobalt-maven-local-0.5.3.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</orderEntry>
<orderEntry type="module-library">
<library name="Kobalt: com.beust.kobalt:kobalt:jar:1.0.82">
<CLASSES>
<root url="jar://$USER_HOME$/.kobalt/wrapper/dist/kobalt-1.0.82/kobalt/wrapper/kobalt-1.0.82.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES>
<root url="jar://$USER_HOME$/.kobalt/wrapper/dist/kobalt-1.0.82/kobalt/wrapper/kobalt-1.0.82-sources.jar!/" />
</SOURCES>
</library>
</orderEntry>
</component> </component>
</module> </module>

View file

@ -1,15 +1,23 @@
import com.beust.kobalt.buildScript
import com.beust.kobalt.localMaven
import com.beust.kobalt.file
import com.beust.kobalt.plugin.packaging.assemble import com.beust.kobalt.plugin.packaging.assemble
import com.beust.kobalt.plugin.publish.autoGitTag
import com.beust.kobalt.plugin.publish.bintray import com.beust.kobalt.plugin.publish.bintray
import com.beust.kobalt.profile
import com.beust.kobalt.project import com.beust.kobalt.project
import com.beust.kobalt.repos import net.thauvin.erik.kobalt.plugin.versioneye.versionEye
import org.apache.maven.model.Developer import org.apache.maven.model.Developer
import org.apache.maven.model.License import org.apache.maven.model.License
import org.apache.maven.model.Model import org.apache.maven.model.Model
import org.apache.maven.model.Scm import org.apache.maven.model.Scm
val repos = repos() val bs = buildScript {
repos(localMaven())
plugins("net.thauvin.erik:kobalt-versioneye:", "net.thauvin.erik:kobalt-maven-local:")
}
val dev = false val dev by profile()
val kobaltDependency = if (dev) "kobalt" else "kobalt-plugin-api" val kobaltDependency = if (dev) "kobalt" else "kobalt-plugin-api"
val p = project { val p = project {
@ -17,11 +25,10 @@ val p = project {
name = "kobalt-exec" name = "kobalt-exec"
group = "net.thauvin.erik" group = "net.thauvin.erik"
artifactId = name artifactId = name
version = "0.5.0-beta" version = "0.7.0"
pom = Model().apply { pom = Model().apply {
name = project.name description = "Command Line Execution plug-in for the Kobalt build system."
description = "Command line execution plugin for the Kobalt build system"
url = "https://github.com/ethauvin/kobalt-exec" url = "https://github.com/ethauvin/kobalt-exec"
licenses = listOf(License().apply { licenses = listOf(License().apply {
name = "BSD 3-Clause" name = "BSD 3-Clause"
@ -39,28 +46,36 @@ val p = project {
}) })
} }
sourceDirectories {
path("src/main/kotlin")
}
sourceDirectoriesTest {
path("src/test/kotlin")
}
dependencies { dependencies {
compile("com.beust:$kobaltDependency:0.842") compile("com.beust:$kobaltDependency:")
compile("org.jetbrains.kotlin:kotlin-stdlib:1.1.51")
} }
dependenciesTest { dependenciesTest {
compile("org.testng:testng:") compile("org.testng:testng:6.12")
compile("org.jetbrains.kotlin:kotlin-test:1.1.51")
} }
assemble { assemble {
mavenJars {} mavenJars {
fatJar = true
}
}
autoGitTag {
enabled = true
push = false
message = "Version $version"
} }
bintray { bintray {
publish = false publish = true
description = "Release version $version"
vcsTag = version
}
versionEye {
org = "Thauvin"
team = "Owners"
} }
} }

Binary file not shown.

View file

@ -1 +1 @@
kobalt.version=0.847 kobalt.version=1.0.90

3
kobaltw Normal file → Executable file
View file

@ -1 +1,2 @@
java -jar $(dirname $0)/kobalt/wrapper/kobalt-wrapper.jar $* #!/usr/bin/env sh
java -jar "`dirname "$0"`/kobalt/wrapper/kobalt-wrapper.jar" $*

4
kobaltw.bat Normal file
View file

@ -0,0 +1,4 @@
@echo off
set DIRNAME=%~dp0
if "%DIRNAME%" == "" set DIRNAME=.
java -jar "%DIRNAME%/kobalt/wrapper/kobalt-wrapper.jar" %*

View file

@ -1,7 +1,7 @@
/* /*
* ExecPlugin.kt * ExecPlugin.kt
* *
* Copyright (c) 2016, Erik C. Thauvin (erik@thauvin.net) * Copyright (c) 2016-2017, Erik C. Thauvin (erik@thauvin.net)
* All rights reserved. * All rights reserved.
* *
* Redistribution and use in source and binary forms, with or without * Redistribution and use in source and binary forms, with or without
@ -31,18 +31,21 @@
*/ */
package net.thauvin.erik.kobalt.plugin.exec package net.thauvin.erik.kobalt.plugin.exec
import com.beust.kobalt.Plugins
import com.beust.kobalt.TaskResult import com.beust.kobalt.TaskResult
import com.beust.kobalt.api.* import com.beust.kobalt.api.*
import com.beust.kobalt.api.annotation.Directive import com.beust.kobalt.api.annotation.Directive
import com.beust.kobalt.api.annotation.Task import com.beust.kobalt.api.annotation.Task
import com.beust.kobalt.misc.log import com.beust.kobalt.misc.log
import java.io.BufferedReader import com.google.inject.Inject
import java.io.File import com.google.inject.Singleton
import java.io.InputStream import java.io.*
import java.io.InputStreamReader import java.util.*
import java.util.concurrent.TimeUnit import java.util.concurrent.TimeUnit
class ExecPlugin : BasePlugin(), ITaskContributor { @Singleton
class ExecPlugin @Inject constructor(val taskContributor: TaskContributor, val configActor: ConfigsActor<ExecConfig>) :
BasePlugin(), ITaskContributor, IConfigsActor<ExecConfig> by configActor {
// ITaskContributor // ITaskContributor
override fun tasksFor(project: Project, context: KobaltContext): List<DynamicTask> { override fun tasksFor(project: Project, context: KobaltContext): List<DynamicTask> {
return emptyList() return emptyList()
@ -54,30 +57,104 @@ class ExecPlugin : BasePlugin(), ITaskContributor {
override val name = NAME override val name = NAME
@Task(name = "exec", description = "Execute a command line process.") override fun apply(project: Project, context: KobaltContext) {
fun taskExec(project: Project): TaskResult { configurationFor(project)?.let { configs ->
return executeCommands(project) configs.forEach { config ->
taskManager.addTask(this, project, config.taskName,
description = "Execute a command line process.",
group = "Other",
dependsOn = config.dependsOn,
task = { executeCommands(project, config) })
taskContributor.addVariantTasks(this, project, context, config.taskName,
dependsOn = config.dependsOn,
runTask = { executeCommands(project, config) })
}
}
} }
private fun executeCommands(project: Project): TaskResult { private fun isCygwin(): Boolean {
val path: String? = System.getenv("ORIGINAL_PATH")
return path?.contains("/cygdrive/") ?: false
}
private fun isMinGW(os: Os = Os.MINGW, any: Boolean = false): Boolean {
val msys: String? = System.getenv("MSYSTEM")
if (!msys.isNullOrBlank()) {
if (any) {
return true
} else if (os.equals(Os.MSYS)) {
return msys!!.startsWith("MSYS")
} else if (os.equals(Os.MINGW)) {
return msys!!.startsWith("MINGW")
}
}
return false
}
private fun matchOs(os: Os): Boolean {
val curOs: String = System.getProperty("os.name").toLowerCase(Locale.US)
when (os) {
Os.WINDOWS -> {
if (!isMinGW(any = true) && !isCygwin()) {
return curOs.contains("windows")
} else {
return false
}
}
Os.MAC -> {
return (curOs.contains("mac") || curOs.contains("darwin") || curOs.contains("osx"))
}
Os.LINUX -> {
return curOs.contains("linux")
}
Os.FREEBSD -> {
return curOs.contains("freebsd")
}
Os.SOLARIS -> {
return (curOs.contains("sunos") || curOs.contains("solaris"))
}
Os.OPENVMS -> {
return curOs.contains("openvms")
}
Os.ZOS -> {
return (curOs.contains("z/os") || curOs.contains("os/390"))
}
Os.TANDEM -> {
return curOs.contains("nonstop_kernel")
}
Os.OS400 -> {
return curOs.contains("os/400")
}
Os.CYGWIN -> {
return isCygwin()
}
Os.MINGW -> {
return isMinGW()
}
Os.MSYS -> {
return isMinGW(Os.MSYS)
}
}
}
private fun executeCommands(project: Project, config: ExecConfig): TaskResult {
var success = true var success = true
val config = configs[project.name]
val errorMessage = StringBuilder() val errorMessage = StringBuilder()
if (config != null) {
for ((args, dir, os, fail) in config.commandLines) { for ((args, dir, os, fail) in config.commandLines) {
val wrkDir = File(if (dir.isNullOrBlank()) project.directory else dir) val wrkDir = File(if (dir.isNullOrBlank()) project.directory else dir)
if (wrkDir.isDirectory) { if (wrkDir.isDirectory) {
var execute = (os.size == 0) var execute = (os.isEmpty())
if (!execute) { if (!execute) {
val curOs: String = System.getProperty("os.name")
for (name in os) { for (name in os) {
execute = curOs.startsWith(name, true) execute = matchOs(name)
if (execute) break if (execute) break
} }
} }
if (execute) { if (execute) {
log(2, "> " + args.joinToString(" ")) log(2, (if (!wrkDir.name.equals(".")) wrkDir.name else "") + "> " + args.joinToString(" "))
val pb = ProcessBuilder().command(args.toList()) val pb = ProcessBuilder().command(args.toList())
pb.directory(wrkDir) pb.directory(wrkDir)
val proc = pb.start() val proc = pb.start()
@ -86,10 +163,10 @@ class ExecPlugin : BasePlugin(), ITaskContributor {
val stderr = if (proc.errorStream.available() > 0) fromStream(proc.errorStream) else emptyList() val stderr = if (proc.errorStream.available() > 0) fromStream(proc.errorStream) else emptyList()
val cmdInfo = "Program \"" + args.joinToString(" ") + "\" (in directory \"${wrkDir.path}\"): " val cmdInfo = "Program \"" + args.joinToString(" ") + "\" (in directory \"${wrkDir.path}\"): "
if (err == false) { if (!err) {
errorMessage.append(cmdInfo).append("TIMEOUT") errorMessage.append(cmdInfo).append("TIMEOUT")
success = false success = false
} else if (fail.isNotEmpty()) { } else if (!fail.contains(Fail.NONE)) {
val all = fail.contains(Fail.ALL) val all = fail.contains(Fail.ALL)
val output = fail.contains(Fail.OUTPUT) val output = fail.contains(Fail.OUTPUT)
if ((all || fail.contains(Fail.EXIT) || fail.contains(Fail.NORMAL)) && proc.exitValue() > 0) { if ((all || fail.contains(Fail.EXIT) || fail.contains(Fail.NORMAL)) && proc.exitValue() > 0) {
@ -113,17 +190,11 @@ class ExecPlugin : BasePlugin(), ITaskContributor {
if (!success) break if (!success) break
} }
}
//@TODO until cedric fixes it. //@TODO until Cedric fixes it.
if (!success) error(errorMessage) if (!success) error(errorMessage)
return TaskResult(success, errorMessage.toString()) return TaskResult(success)
}
private val configs = hashMapOf<String, ExecConfig>()
fun addExecConfig(projectName: String, config: ExecConfig) {
configs.put(projectName, config)
} }
private fun fromStream(ins: InputStream): List<String> { private fun fromStream(ins: InputStream): List<String> {
@ -142,27 +213,35 @@ class ExecPlugin : BasePlugin(), ITaskContributor {
} }
} }
enum class Fail() { enum class Fail {
ALL, NORMAL, STDERR, STDOUT, OUTPUT, EXIT ALL, EXIT, NONE, NORMAL, OUTPUT, STDERR, STDOUT
} }
data class CommandLine(var args: List<String> = emptyList(), var dir: String = "", enum class Os {
var os: List<String> = emptyList(), var fail: Set<Fail> = emptySet()) CYGWIN, FREEBSD, LINUX, MAC, MINGW, MSYS, OPENVMS, OS400, SOLARIS, TANDEM, WINDOWS, ZOS
data class ExecConfig(val project: Project) {
val commandLines = arrayListOf<CommandLine>()
@Directive fun commandLine(args: List<String> = emptyList(), dir: String = "", os: List<String> = emptyList(),
fail: Set<Fail> = emptySet()) {
if (args.size > 0) commandLines.add(CommandLine(args, dir, os, fail))
}
} }
data class CommandLine(var args: List<String> = emptyList(), var dir: String = "", var os: Set<Os> = emptySet(),
var fail: Set<Fail> = setOf(Fail.NORMAL))
@Directive @Directive
fun Project.exec(init: ExecConfig.() -> Unit): ExecConfig { class ExecConfig {
with(ExecConfig(this)) { var taskName: String = "exec"
init() val commandLines = arrayListOf<CommandLine>()
(Kobalt.findPlugin(ExecPlugin.NAME) as ExecPlugin).addExecConfig(name, this) var dependsOn = listOf("assemble")
return this
@Suppress("unused")
fun commandLine(vararg args: String, dir: String = "", os: Set<Os> = emptySet(),
fail: Set<Fail> = setOf(Fail.NORMAL)) {
if (args.isNotEmpty()) commandLines.add(CommandLine(listOf(*args), dir, os, fail))
}
}
@Suppress("unused")
@Directive
fun Project.exec(init: ExecConfig.() -> Unit) {
ExecConfig().let { config ->
config.init()
(Plugins.findPlugin(ExecPlugin.NAME) as ExecPlugin).addConfiguration(this, config)
} }
} }

View file

@ -1,39 +0,0 @@
/*
* MainTest.kt
*
* Copyright (c) 2016, Erik C. Thauvin (erik@thauvin.net)
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* Redistributions of source code must retain the above copyright notice, this
* list of conditions and the following disclaimer.
*
* Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* Neither the name of this project nor the names of its contributors may be
* used to endorse or promote products derived from this software without
* specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
package com.example
import org.testng.annotations.Test
class ExampleTest {
@Test
fun f() = println("Running test")
}

Binary file not shown.

View file

@ -1 +0,0 @@
kobalt.version=0.843