What is the simplest way to tell cucumberjs to watch for source project files changes so that it can re-runs its tests?
You could add a gulp task. Here is more information on how gulp works https://gulpjs.com/docs/en/api/concepts
I'm using gradle-node-plugin to help reduce dependencies for my project. Gradlew is basically replacing grunt or gulp in my project. This makes java my only dependency.
Before, I'd use npm run tsc and I had an npm task that would run tsc -w but now that npm is a gradle plugin, I can't call npm directly. I have the following task in my build.gradle:
task watch(dependsOn: 'npmInstall', type: NpmTask) {
outputs.upToDateWhen { false }
args = ['run', 'tsc']
}
Technically it works. It first makes sure that the npm plugin has installed all it's pieces (including typescript) and then will run my tsc task. The problem is that tsc -w never terminates. It watches my files for changes until I choose to terminate it. It does this successfully, but gradle constantly reports that the task is Building 75% > :watch. I have another task in package.json that offers up my files in an http-server and it behaves in the same way.
Is there a preferred way to have gradle run a never ending task like this or should I just let it think it's perpetually building?
I'm trying to figure out how after a quick edit of say a .less file or an .html file or a .js file that I can quickly see the changes in the web application running Tomcat being served from IntelliJ.
We've wired Eirslett's frontend-maven-plugin into our project to run Gulp to generate the CSS from the LESS files and other tasks like JS minifying.
The only thing that I know works is to go to the command line and execute mvn clean install from the command line and then re-run the IntelliJ Tomcat configuration.
The problem is this takes many minutes with our build. Seems like there must be some trick where I can tell IntelliJ to just re-run Gulp and then redeploy the CSS, JS and HTML changes without re-compiling all the Java and restarting all my services and other gunk.
I know that if I'm just making changes to HTML or JS or CSS in a simple java web application that doesn't use Gulp that I can issue the 'Build, Compile' (CommandShiftF9) command on the affected files in IntelliJ and IntelliJ will re-deploy those selected files. I'm looking for something like that but that also runs Gulp before redeploying.
I've running Gulp from command line and seeing if IntelliJ would pick up the changes, but instead the Tomcat running in IntelliJ crashes with a bunch of these
23-Nov-2015 12:28:53.518 SEVERE [localhost-startStop-2] org.apache.catalina.startup.HostConfig.deployDescriptor Error deploying configuration descriptor /Users/jkirby/Library/Caches/IntelliJIdea15/tomcat/app1,_app2,_app3,_app4,_app5,_app6_(1)_cumulus/conf/Catalina/localhost/site.xml
java.lang.IllegalStateException: ContainerBase.addChild: start: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/site]]
Use Gulp watch instead of making Intellij run custom scripts on redeploy. As far as I can tell, it is not possible to run custom scripts when re deploying (CommandShiftF9)
If you want to give it a try, here is a related SO article on how to set it up: How to Gulp-Watch Multiple files?
I am using visual studio task runner (2015) to run a Gulp task bound to before build.
I have set it up so that when the gulp tasks fails it sends exit code 1 and at the end it says "Process terminated with code 1." however the build continues.
This will cancel the build in team city so seems an issue linked Task Runner inside visual studio.
How can I prevent the build from taking place if it exits with a code other than 0?
You are correct in that this seems to be a Task Runner issue. The task runner does not communicate with MSBuild to stop a build if a BeforeBuild task fails.
To get around this, you can run your Gulp task via the project's pre-build event instead of via the Task Runner bindings.
Set the pre-build event
For class libraries, you can access Build Events by right-clicking your project and selecting Properties -> Compile -> Build Events....
For web projects, they are located at Properties -> Build Events.
Here is the command I used to call the Gulp task in pre-build event, which will prevent the MSBuild from running if it exits with a failure:
gulp -b $(ProjectDir) --gulpfile $(ProjectDir)gulpfile.js my-task
This command calls Gulp passing absolute paths for working directory and gulpfile.js.
Notes:
I found all kinds of context and working directory issues trying to use a more straight up command like gulp my-task.
$(ProjectDir) is one of the Macros for Build Commands.
It is assumed that Gulp is installed globally: npm install -g gulp. See jonas.ninja's answer for how to build this install into the command (or for an alternative that does not require the global dependency).
I implemented davidmdem's solution above and it was great... on my system. I had gulp installed globally, but one of my coworkers did not, so the pre-build event would fail. Running gulp from Task Runner Explorer uses the project-level gulp installation, but running gulp from the pre-build script uses the global gulp installation.
To prevent the situation where a new developer doesn't have gulp installed, I expanded davidmdem's pre-build script to the following:
(gulp --version || npm install -g gulp#3.9.0) & gulp -b $(ProjectDir) --gulpfile $(ProjectDir)gulpfile.js my-task
This command installs gulp (version 3.9.0 to match the project-level gulp installation) only if it is not already installed. Now gulp is not something that you have to think about before you can build the project!
(Update:)
An alternative (in my opinion: better) solution to this problem is to use npm as an intermediary. Continuing and modifying from the example above, I have a gulp task my-task that is being called from the command line. This removed the global gulp dependency and still properly stops msbuild if gulp fails.
Pre-build event:
npm run build
package.json:
"scripts": {
"build": "gulp min"
}
I have build fail for jshint with gulp working (well enough for me, maybe sufficient for others.) I imagine it may be extended to include all the tasks in Task Runner.
Here is what I used/did...
As per this page, I added/edited this in my project.json, which hooks into the prebuild event...
"scripts": {
"prebuild": [ "gulp default" ]
}
As per this page, I included the following for my jshint task...
// =============================
// jsHint - error detection
// =============================
gulp.task("jshint", function () {
var jshGlobals = [
'$',
'jQuery',
'window',
'document',
'Element',
'Node',
'console'
];
gulp.src([paths.jsFiles, norefs])
.pipe(jshint({
predef: jshGlobals,
undef: true,
eqnull: true
}))
.pipe(jshint.reporter('jshint-stylish'))
.pipe(jshint.reporter('fail'))
});
The latter two lines being the most significant. You will need to npm install jshint-stylish if you don't already have it.
Alternatively, for jshint-stylish, you can let VS handle it for you. Add the line for jshint-stylish as indicated below to your package.json...
{
"name": "ASP.NET",
"version": "0.0.0",
"devDependencies": {
"es6-promise": "~3.1.2",
"gulp": "^3.8.11",
"del": "^2.2.0",
"jshint": "~2.9.1",
"jshint-stylish": "~2.1.0",
"gulp-jshint": "~2.0.0",
"gulp-flatten": "~0.2.0",
"gulp-rename": "~1.2.2",
"gulp-cssmin": "0.1.7",
"gulp-uglify": "1.2.0",
"gulp-postcss": "~6.1.0",
"autoprefixer": "~6.3.3"
}
}
Which gives me this when there is an error (in addition to the failed build) which is sufficient for me to dig further if/as necessary...
As opposed to the more detailed error info I get when running the same task via command line or Task Runner...
I imagine this solution can be improved but figured I would share as I hadn't seen a whole lot about it elsewhere.
Cheers.
I have a project which is setup with lineman and uses maven for build configurations. A maven pom.xml file is used to configure the jenkins builds. This file lists the necessary tasks that need to be done in order to build the project. The lineman tasks are specified here as well. The command lineman grunt spec-e2e starts the protractor tests.
This currently works on the jenkins server because it starts the webdriver and runs the tests. However, all specs in the tests fail since browser.get('myurl') can't find anything since nothing is running. I tried to add lineman run as a task but this causes the jenkins-build to get stuck on the watch task.
How can I get the project to run and therefore make it accessible for the protractor tests?