Forge Project Automation
This page documents plans, progress, and issues relating to automating the build, testing, deployment, and site generation for Terracotta Forge projects.
Dates
- Oct 15: Feature Complete
- Oct 22: Go Live
- Oct 18: Test Rave
Plans
For each registered forge project, we will automate
- Building project artifacts
- Executing the unit tests for the project
- Deploying project artifacts to the Terracotta Maven repository, or a Maven repository specified for the project
- Generating and deploying the project web site and linking it to the main Terracotta Forge web site
Since we will be relying on Maven to provide these features, this automation will apply only to projects that use Maven as the build system.
To make it easier to create new forge projects, we will also be providing
- A Maven archetype to create project skeletons for config modules or sample apps
- A set of parent POMs that may be used by forge projects to centralize common configurations and reduce duplication
- A Terracotta Maven plugin to assist with using Terracotta in Maven projects (see the [Terracotta Maven Plugin] page)
Progress
- Created autobuild script that deploys project artifacts and generates project web sites
- Created archetype for config modules
- Converted clustered-ehcache config modules to Mavenized forge project
- Converted jmx-util project to Mavenized forge project
- Created parent POM hierarchy: forge-parent <-- config-module-parent <-- config-module-system-tests-parent
- Created archetype for POJO apps
- Ported the Chatter demo app using the new POJO apps archetype
- Ported the SharedEditor demo app using the new POJO apps archetype
- Integrated the tc-maven-plugin with the new Chatter demo
- Created skin for Terracotta Forge projects
- Autobuild script now generates an RSS feed listing the results of the latest publications
- Enhanced Maven deployment process to include a POM with a full set of dependencies so that transitive dependency management will work when using Terracotta Maven artifacts
- Added project information for categorization and tags
TODO
Fix Terracotta test framework to work independently of tcbuild (Done for at least clustered-ehcache tests, but may require more work as other projects are ported to the forge.)
- Integrate autobuild script with Forge project web site. Dave needs to provide an rsync job to publish script results, and Taylor needs to provide link(s) to generated page(s).
Integrate Terracotta Surefire Maven plugin into clustered-ehcache project so that tests can run. Done, although used standard Surefire plugin instead of Terracotta plugin (except for creating boot jar).
- Investigate Continuum as CI tool to complement or replace custom autobuild script
Create archetype for sample apps
Integerate Terracotta Maven Plugin into port of the Forge application projects
For the main Terracotta Maven artifacts (terracotta.jar, tc-compile.jar, etc.) we should include a POM with dependency information so that other projects using these artifacts can rely on transitive dependency management and not need to redeclare the dependencies individually
- Go over each project so that each project has proper documentation content ("About", "Configuration", etc.)
- Go over each download page to ensure that artifacts are downloadable.
Issues
- How do we determine which projects should be subject to autobuild?
- How do we tag/categorise projects in the forge?
- Use the project's .info file (a default is generated by the archetypes).
- How are permissions going to be managed across different forge projects?
- Should autobuild run on a schedule or be triggered by commits? If it is a schedule, what is the frequency?
It could be that Maven's Release plugin would be appropriate for this.
- For now, just run as a daily cron job. In the future, maybe trigger on Subversion commit.
- What is the process for registering a new forge project and becoming a committer?
Do we need to create an archetype for web app projects?
Etc.
Here's a list of things that I think ought to be done by Friday (08/05/2007):
Forge skin
Archetype for a basic forge project
- Forge publishing script
It's written already, but it needs to go "live" in kong
Publish to orgstage server
Front page for the Forge + RSS (+some other format that Taylor could consume)
Port of a couple of the demos in the kit as a Forge project
- Port of at least one config module as a Forge project
Make the Forge project's source, binary, and project files available for download
Here's a list of things that I think ought to be done before we could sign-off of this project:
- (the list above)
- Forge port of all the demos from the kit
- This may require further thought. The reorganization of the forge repository might have some impact on this, specifically in regard to archetypes and inheritance of parent POMs.
ie: pojo, spring, rife, sessions
Archetype for webapps Very likely based on our spring and rife demos DONE
- Forge port of all the config modules in the kit
- Forge port of select labs projects
- Better organization for the Forge repository
- Revisit inheritance of Maven parent POMs. The deep parent hierarchy is causing some problems with site generation and skinning among other things. It is probably best to move to a shallow (single level) parent hierarchy
- Move labs parallel to projects
Here's a list of things that I think are still unresolved:
- Who handles the Forge developer registration?
- Who handles the front-page for the Forge?
Thinking about it this morning, maybe we ought to have a basic webapp that handles the Forge stuff,
and terracotta.org's Integrations page should just direct users to it - we should put this on the table for discussion)
- Switch to Continuum?
The script it seems will hold up for now...
Etc:
- Utilise Maven's Release Plugin?
Could be overkill at this point in time.