Hi all,
I have been working on the scripts to automate our release process. Here is where things are at.
First, if you want to take a look at the scripts they are in my github repo in a branch called “build_scripts”:
https://github.com/jdeolive/geoserver/tree/build_scripts/build
Here is how they work. And I actually haven’t setup all the hudson jobs yet, but the underlying scripts are working. So here is how it will work.
On our main hudson server there is a job called “geoserver-release”:
http://hudson.opengeo.org/hudson/job/geoserver-release/
The job takes the following parameters:
- branch to release from
- revision to tag
- release name
The underlying scripts actually take more parameters but i will get to those later. When run the above job does the following:
- creates the tag from the specified parameters
- checks out the tag and preps for release, updating version numbers, etc…
- performs the main release build
- assembles artifacts and uploads them to a distribution directory, currently located here:
http://gridlock.opengeo.org/geoserver/release/
- Fires off two installer jobs (one for windows, one for osx) on remote hudsons. The two hudsons are currently on our internal network so i can’t provide access to them.
- When the installer jobs complete they upload the artifacts to the same distribution directory specified above.
The end result is all the artifacts wind up in a single directory matching the release name. For example:
http://gridlock.opengeo.org/geoserver/release/2.2-beta2/
The above list of tasks is an overview, the main release script actually does a bit more which is what i would like to discuss. The script also checks jira and determines two things:
- is the release actually released on jira
- does the release have any open/unresolved issues filed against it
To do so it uses the jira rest api (which is nice btw). This is something I would like feedback on. We have a couple of options here on what to do with respect to jira.
- don’t do any checks against jira, and leave that a manual process
- halt the build if the release is not released in jira or there are unresolved issues, making releasing on a jira manually a precursor to running the script
- mark the release as released in jira, and push back any unresolved issues to the next version
More options welcome.
The second thing I would like to discuss is how we handle the README. Currently when we release we update the README on the main branch (and not the tag). I would kind of like to avoid committing anything to the main branch in an automated process. For example what happens if we run the release, it fails and we run it again. We have to check if the readme has been already updated, etc… While certainly possible with some script mojo it seems like an error prone process I would like to avoid.
So what I would like to propose is the following. We don’t ever update the README on the main release branch. We leave it generic with information about the project, where to find the docs, etc… On the tag we create we would generate a new file called “RELEASE_NOTES.txt” (or something to that effect) that contains the stuff we usually put in the README like revision info and the new and noteworthy info for that release. To generate the new and noteworthy for the release notes i was thinking we could come up with a heuristic. One such heuristic could be to pull out any new feature or improvement, and perhaps any issue that is a high priority one. Anyways, you get the idea. And naturally it would contain the link to the entire changelog from jira like we do now. Perhaps we should just stick to simple and put the revision info and the changelog link in the release notes. Probably what I will do for a first pass if people are into the idea.
Those are the two main things I need input on thus far. Aside from the above stuff the main thing left to do is to do the upload to sourceforge. I think this will be pretty straight forward. The idea is that there would be a second release job (called geoserver-release-publish or something) that would take the release tag as input and basically just upload all the artifacts from the distribution directory to sourceforge. The idea is that after the main release job (and the hudson installer jobs) complete the person doing the release would do a quick sanity check on the artifacts, fix issues, etc… Once completed the release publish job would do the final push.
Oh, and another TODO will be to take the associated geotools info (version, revision, etc…) and ensure that is what is included in the geoserver build. I guess same goes for geowebcache as well.
That is it for now. Looking forward to hearing feedback.
-Justin
–
Justin Deoliveira
OpenGeo - http://opengeo.org
Enterprise support for open source geospatial.