The purpose of this chapter 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 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.

. Note that the argouml-downloads checkout is large (over 2 GB) and will take a considerable time to check out so you'd better do this in advance.

. 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'''.

. 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.

. 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.

3. Set the argo.core.version to not include the "PRE-" part and commit the files.
. This is done in the default.properties-file in build/VERSION_GIVEN_VERSION/argouml/src/argouml-app and in the build.xml-file in build/VERSION_GIVEN_VERSION/argouml/documentation.

3. 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'''.

a. Make sure that the upcoming releases have target milestones created for them. This needs to be done for all components that has the same release scheme. 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.

a. Make sure that the upcoming releases have target milestones created for them[[FootNote(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.)]]. 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.

. These files are located in the svn/argouml-downloads/www/jws-directory.
a. 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.

. These files are located in the '''argouml-downloads/www/jws'''-directory.
a. 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'''.

The reason that this has happened is that one of the developers has made a mistake. You now must decide a way forward.

==== Fix the problem yourself. ====

If the problem is obvious to you and you can fix it quickly, do so. This is done by doing the following:

* Make the release tag into a branch
* Check out that branch
* Fix the problem in your checked out copy
* Commit the problem to the branch
* Continue the build process
. This is done by restarting the build dist-release-command and from that point on working in the branch instead of at the tag.
* Explain to the culprit what mistakes he has made and how to fix it.
. It is now his responsibility to make sure that the problem will not appear in the next version. He can do this either by merging in your fix or by fixing the problem in some other way.
. At this point an in-detail description of how poor programming skills the culprit has and how ugly his mother is, is probably in place but please keep it constructive! Remember, you might be mistaken when you guess who the responsible is.

==== Delay the release waiting for someone to fix the problem. ====

Create the branch as described in the previous section on how to “Fix the problem yourself.”. Then tell the culprit and everyone on the developer list what the problem is and that it is to be fixed in the release branch a.s.a.p.

Monitor the changes made to the branch to verify that no one commits anything else but the solutions to the problems.

When you get notified that it is completed, update your checked out copy and continue the release work.

The are some extra considerations when ["/Making a Stable release"].

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.

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

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."