30
Jan

Jenkins (ex-Hudson) plugin to capture Flash Logs during build

Comments Off on Jenkins (ex-Hudson) plugin to capture Flash Logs during build

Lately I’ve been working on a plugin for Hudson / Jenkins that captures Adobe Flash Player logs during a build, making them available as build artifacts.

This plugin is useful when you want to debug Unit Test or Automated Tests which are failing in the CI machine.

For me information you can check http://wiki.hudson-ci.org/display/HUDSON/FlashLog+Plugin

05
Jan

Solving “file already exists” Maven/SVN Problem

Comments Off on Solving “file already exists” Maven/SVN Problem

Problem
Today I’ve been trying to perform a maven release on a project hosted on google-code and I’ve hit a major roadblock.

The build was failing due to a SVN error occurring when maven was committing into SVN, into the tags folder, the current version of the project:

[INFO] Unable to tag SCM
Provider message:
The svn tag command failed.
Command output:
svn: Commit failed (details follow):
svn: File '/svn/path/to/my/file/myclass.java' already exists

Solution
The solution is rather a workaround, than a solution: force a svn update before committing the code into SVN repository.
Searching to see if other people have had a similar problem I discovered this bug, and in one of the comments of the bug I saw the workaround:

# mvn release:prepare
== fails ==
# svn up -r head
# mvn release:prepare -Dresume

As you can see, you are being suggested to do a svn update after the build fails and resume the release process from that point.

I tested this workaround, and luckily for me, it worked. Going further, I thought that’s great, but how can I deal with these extra steps on my continuous integration machine ? I didn’t want to create a special job just to do the release of my library, so I started to see if I can integrate this workaround into a single maven command line.

Looking into the Maven Release Plugin, I discovered the preparationGoals property. As the documentation specifies, it defines which “goals to run as part of the preparation step, after transformation but before committing..

Into these preparation goals I executed a shell command, using Maven Exec Plugin.

mvn -e release:clean release:prepare release:perform \
  -DpreparationGoals="clean install exec:exec" \
  -Darguments="-Dexec.executable=svn -Dexec.args=up"

This single command did in the end the same thing. Forced a svn update before committing the code into SVN.

Apparently this bug occurs only for SVN versions up to 1.6.4. In SVN version 1.6.5 this shouldn’t be a problem anymore. Too bad that Google Code uses older versions of SVN.