Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

CI-friendly automated builds for as3/flex projects

Disclaimer: I am relatively unfamiliar with the flash build processes, so some/all of this may be misinformed nonsense. Please feel free to suggest alternative approaches.

We're currently developing a flex web app and our build situation is far from ideal. At present we're (as in individual developers) just building using FlashBuilder and deploying manually. The programmers are currently screaming bloody murder for two reasons, though:

  • The lack of CI is like going back to the stone age
  • We don't much care for FlashBuilder

(Note: We're only using FlashBuilder because it was the easiest way to set up a flex project in conjunction with Away3d and get it building / rendering correctly -- it's a stopgap solution).

As a predominately .NET development shop, we're used to doing continuous integration as well as continuous deployment. Ideally, we'd like to get something comparable to this for our flash projects without tying ourselves to a particular IDE.

Requirements:

The build process must be:

  • .. runnable via the commandline
  • .. runnable on both developer and CI build machines (and certainly not requiring an IDE!)
  • .. preferably as IDE-independent as possible (pragmatism will kick in though; if this causes a lot of friction we'll just pick one).
  • .. able to run on Windows (we develop using Windows)

We don't mind a touch of duplication or a few manual steps (e.g. tarting up the build scripts if we add a new project via an IDE, or generating one configuration from another if tools exist), but the less duplication / maintenance required the better.

I've read quite a few articles / blog posts and watched some short screencasts, but most of them are very thin on the ground on how the build system sits alongside IDEs. Most articles/screencasts have the same formula: How to create a "Hello World" build using a single file & text editors (no IDE).

I've not seen the topic of multiple libraries/projects etc. being broached, either.

After reading around the issue for a while, I'm considering investigating the following options:

  • Project Sprouts
  • Flexmojos
  • Maven Flex Plugin
  • buildr as3

Does anyone have any experience of the above solutions (or others I'm unaware of) and, if so, what do you make of them? Any help / pointers appreciated.

like image 614
Mark Simpson Avatar asked Jan 27 '12 18:01

Mark Simpson


2 Answers

I recently started building with Gradle and the GradleFx plugin and I immediately fell in love with its power and ease of use.

Gradle is ANT + Maven + Ivy evolved and is primarily used from the command-line. You can:

  • write scripts in Groovy (a powerful Ruby-like language that runs in the Java Virtual Machine)
  • access all existing Maven and Ivy repositories as well as your own repos
  • use existing ANT tasks
  • integrate with CI (in Jenkins you just tick a checkbox to activate Gradle support)
  • although it has originally grown from the Java/Groovy community, it is in fact language agnostic. You add language-specific plugins for added functionality. GradleFx is such a plugin that provides you with additional ActionScript/Flex building tasks.
  • do easy multi-project builds. e.g. you can compile, unit test, package and deploy both your .NET service layer and your Flex client application with just one command.
  • use convention over configuration: if you stick to the conventions, your build scripts will be extremely terse
  • generate all kinds of reports: unit testing, checkstyles, codenarc, ...
  • generate Eclipse, IDEA or other IDE projects
  • all the things I haven't discovered yet

And best of all: it's very easy to learn. I had no knowledge of Maven before I started with Gradle and could get a multi-project build with some customizations working quite quickly.

Edit (comparison to Buildr AS3 and Maven)

I can compare this only to one of the projects you mentioned: Buildr AS3. It seems to start from a philosophy that is similar to Gradle's. But I've tried to use it about half a year ago and couldn't even get a simple 'Hello World' app to work. I e-mailed the developer for help: no response.

Compared to GradleFx: I had a small forum discussion with the developer (on a rather philosophical topic, since I didn't really need any help because it just worked right away). He answered within minutes.

As for Maven: (for what it's worth) I've only glanced at some configurations and they seem overly complicated when I compare them to a Gradle script.

There is one thing Maven does that you can't do with GradleFx (yet). It can pull the right Flex SDK from a Maven repo and build against that. With GradleFx you have to have your SDK's available locally.

like image 185
RIAstar Avatar answered Sep 18 '22 10:09

RIAstar


I'm quite familiar with using maven as the main build tool and the flexmojos plugin from Sonatype. My experience has been a bit of a roller coaster with flexmojos. Maven is completely solid, it works all the time without issue, the only issue is the flexmojos plugin which has fluctuated a lot between versions. If you choose to go this route make sure to grab the source for flexmojos so you can see what your configuration options are actually doing to the command line parameters etc. For Flex 3.x flexmojos 3.x up to around 3.9 is good and works fine with regard to the goal for generating the .project eclipse files, believe there's also a mojo (a maven plugin) for generating intelliJ IDEA project files as well as others. If you're using Flex 4 you can compile with the latest flexmojos 4.0RC2 but it appears to me that the goal for generating flex/flashbuilder project properties is now gone (I'm not sure if this is because it's been replaced by another plugin altogether or what the deal is). However building with maven and flexmojos does fulfill all of your goals above (we also use it for building our service layer, so in a single mvn clean install we get a jar packed in a war packed in an ear with everything configured and a swf, that part is really nice). Also you can do continuous integration using bamboo (or simply write your own script that is triggered from a cron job or in windows as a batch file executed with a scheduled task if you don't have a *nix server around). Let me know if you'd like any more details or if I missed something major.

Shaun

like image 34
shaunhusain Avatar answered Sep 17 '22 10:09

shaunhusain