The purpose of this description is to simplify the procedure for the person actually doing the release work, and to make sure that everything is done in the exact same way every time without anything being forgotten.
The scripts involved have been developed and are mostly run on a Cygwin system. They will hopefully work on any UNIX system but most likely they will need some adjustments.
The scripts and tools used specifically for the build are maintained in the argoumlinstaller project. From the argouml project the files argouml/build.xml and other build.xml files are reused.
Prerequisites (what you need to be able to do this):
Subversion write access to the argouml projects (to create the releases branch/tag). The projects involved are specified in the file argoumlinstaller/build-release.sh.
- Subversion write access to the argouml-downloads project (to upload the result).
- A machine with 10GB of disk to use for this purpose (October 2009. In September 2006 it was 3GB).
- This is probably the machine you use for your development if you are an argouml developer.
The machine needs Internet access (it is not a small download and upload so at least 128KB Internet connection to keep the time reasonable < 2 hours), the correct version of Java installed (should be a JDK for Java5), SVN installed, Unix or Cygwin to be able to run the scripts.
- The argoumlinstaller and argouml-downloads projects checked out alongside each other.
- If this is not in place from a previous release this is done using the commands
cd wherever svn co http://argoumlinstaller.tigris.org/svn/argoumlinstaller/trunk argoumlinstaller svn co http://argouml-downloads.tigris.org/svn/argouml-downloads/trunk argouml-downloads
Note that the argouml-downloads checkout is large (over 6 GB download) and will take a considerable time to check out so you'd better do this in advance.
The JimiProClasses.zip downloaded and copied into argoumlinstaller/build.
- You have generated a key to sign the jar files (for Java Web Start).
Run the command keytool -list -v and give the keystore password secret. You should have a key named argouml that is valid several months in the future.
- This is to make sure that you have a valid key for the purpose of signing the jar files.
- Since the ArgoUML project and the Tigris organization are loose organizations we cannot buy a "real" key. The keys we use are the unsigned keys that can be generated by anyone using the keytool provided with Java.
A key is generated with the command keytool -genkey -alias argouml -storepass secret.
- By default these keys have a validity of just three (3) months but by giving the -validity days the validity can be extended.
- Don't forget to upload your new key to the Downloads area. This is for those who want to see the key on the site separately.
Here are the steps to be done when one actually does a release:
- Check for new projects.
If there are any new projects to be included in the release, add them to the list of projects in argoumlinstaller/build-release.sh. You also need to create the releases-directory at the top of the SVN repository.
- Create the release branch/tag and checkout that copy.
This is done using the command ./build-release.sh -tc in the argoumlinstaller project and giving the release name.
- You must have set JAVA_HOME for this to work.
- The script will check that the releases top directory is present in all the involved projects and that the given release name is not already present in any of the involved projects.
- Set the version to not include the "PRE-" part and commit the files.
This is done in the ArgoVersion.java-file in build/VERSION_GIVEN_VERSION/argouml/src/argouml-app/src/org/argouml/application and in the build.xml-file in build/VERSION_GIVEN_VERSION/argouml-documentation.
- Build ArgoUML and the sub-projects, and sign the jar files.
This is done using the command ./build-release.sh -bs
- Build the pdf version of the documentation.
This is done using the command ./build-release.sh -d
- Go through Issuezilla and check things.
- Things to check are:
- That there is a Version created in Issuezilla for the newly created release.
- The purpose of this is to make it possible for everyone to report bugs on the new release.
Make sure that the upcoming releases have target milestones created for them1. Also see that the numbering is the same in all components and that it is in the correct chronological order except for the not yet done releases that come before the already completed.
Change the target milestones of all the not yet resolved issues for this release to ---.
Change the target milestones of any fixed issue in component argouml with target milestone --- to that of the current release.
- This is probably some developer that has fixed an issue but forgotten to set the target milestone correctly.
- Move all issues reported on 'current' to this release (for the component argouml).
- These items were reported between the previous version and this version. Since 'current' will be reused for the next release, they need to be locked to the closest release to where they were found.
- Reopen RESOLVED/REMIND
- This can also be a good time to change all RESOLVED/REMIND. Search for them and Reopen them.
- Check RESOLVED/LATER
- It could also be good to check that all RESOLVED/LATER has a valid target milestone (must be an upcoming milestone). Search for them and Reopen the ones that haven't. Also, if the milestone denotes or is going to be resolved in the upcoming release, Reopen them with a comment that they are now active.
- For stable releases, decide on when FIXED issues that are RESOLVED or VERIFIED will be closed.
- Add a message to all VERIFIED issues and verify all RESOLVED issues stating when they will be closed. Suggested message:
"The solution to this issue is included in the stable release X.XX that can be downloaded from http://argouml-downloads.tigris.org/argouml-X.XX. If you, when you test this, find that the issue is not solved, please reopen the issue. If you don't it will be closed on 34th of Sebruary. If you find other problems when testing this, please create a new issue."
- After that period, close all the issues unless they have been reopened. Suggested message:
"The solution to this issue is included in the stable release X.XX that can be downloaded from http://argouml-downloads.tigris.org/argouml-X.XX. If you, when you test this, find that the issue is not solved, create a new issue and mention this issue in the description or as a reference."
- Run the installers.
- This is what you do:
- Create the zip files and the tgz files, copy the documentation, copy changed Java web start files and create new Java web start jnlp files.
This is done by the command ./official.sh.
- For Java Web Start, update the "Latest development" or perhaps the "Latest stable" files essentially with the contents of the newly created JNLP file.
These files are located in the argouml-downloads/www/jws-directory.
Update the index files for the downloads project to point out the new release. The index.html is for the stable releases, the devrel.html for all releases.
They should point out the release at /argouml-RELEASENAME/, the Java web start file at /jws/argouml-RELEASENAME.jnlp.
- Commit the release in the argouml-downloads project
- The following commands will do it for you:
cd ../argouml-downloads/www svn commit -m'The release RELEASENAME.'
- Tag the argoumlinstaller directory.
- The following command will do it for you:
svn copy \ http://argoumlinstaller.tigris.org/svn/argoumlinstaller/trunk \ http://argoumlinstaller.tigris.org/svn/argoumlinstaller/releases/VERSION_GIVEN_VERSION \ -m'Installer used for GIVEN_VERSION.'
- Prepare the trunk for commits towards the next release.
This is done by updating the PRE-VERSION in the trunk version of the files mentioned in 3
The are some extra considerations when /Making a Stable release.
1 This needs to be done for all components that has the same release scheme. This is the main reason we have everything that is released in the same component.