h1. Recipes Commond recipes for Buildr, collected from the mailing list. h2. Creating a classpath For Java, the classpath argument is simply a list of paths joined with an OS-specific path separator: {{{!ruby cp = paths.join(File::PATH_SEPARATOR) }}} This assumes @paths@ points to files and/or directories, but what if you have a list of artifact specifications? You can turn those into file names in two steps. First, use @artifacts@ to return a list of file tasks that point to the local repository: {{{!ruby tasks = Buildr.artifacts(specs) }}} Next, map that list of tasks into list of file names (essentially calling @name@ on each task): {{{!ruby paths = tasks.map(&:name) }}} This works as long as the artifacts are already in your local repository, otherwise they can't be found, but you can ask Buildr to download them by calling @invoke@ on each of these tasks: {{{!ruby tasks = Buildr.artifacts(specs).each(&:invoke) }}} So let's roll this all into a single line: {{{!ruby cp = Buildr.artifacts(specs).each(&:invoke).map(&:name).join(File::PATH_SEPARATOR) }}} h2. Keeping your Profiles.yaml file DRY YAML allows you to use anchors (@&@), similar to ID attributes in XML, and reference them later on (@*@). For example, if you have two profiles that are identical, you can tell YAML that one is an alias for the other: {{{!yaml development: &common db: oracle port: 8080 test: *common production: *common }}} If you have two elements that are almost identical, you can merge the values of one element into another (@<<@), for example: {{{!yaml development: &common db: hsql jdbc: hsqldb:mem:devdb test: <<: *common jdbc: hsqldb:file:testdb }}} h2. Speeding JRuby When using JRuby you will notice that Buildr takes a few seconds to start up. To speed it up, we recommend switching to Java 1.6 and running the JVM in client mode: {{{! $ export JAVA_OPTS=-client }}} h2. Continuous Integration with Atlassian Bamboo This recipe outlines how to configure a new Bamboo project to use Buildr. The following steps assume that you have logged-on to Bamboo as an Administrator. *1. Configure a Builder* * Select the Administration tab from the Bamboo toolbar. * Select the Builders area (first option) from the Administration menu. * Using the Add Builder dialog, configure a custom builder for Buildr with the following options: ** Label: @buildr@ ** Type: @Custom Command@ ** Path: @/path/to/buildr@ (typically "/usr/bin/buildr") *2. Create a Plan* * Select the Create Plan tab from the Bamboo toolbar to enter the Create Plan wizard. * In "1. Plan Details", define your build plan including project name, project key, build plan name and build plan key. * In "2. Source Repository", specify your source code repository settings (CVS or SVN). * In "3. Builder Configuration", specify the "buildr" builder that you defined above, along with the following: ** Argument: @"test=all"@ (ensures that all tests are run through even if failures are encountered) ** Test Results Directory: @"**/reports/junit/*.xml"@ (or your path to test results, if different). * The remaining wizard sections may be either skipped or configured with your preferred settings. *3. Trigger a Build* A build should occur automatically at the point of project creation. It can also be manually triggered at any time * Navigate to the project summary page (located at: @http://YOUR_BAMBOO_URL/browse/PROJECTKEY-YOURPLAN@). * Click on the small arrow to the left of the label "Build Actions" * Select "Checkout and Build" from the pop-up menu to force a build. The project page will contain full status information for previous builds and the results tabs will integrate the results from your JUnit tests.