Maintainer

About

This tool is basically a python script which allows you to do the most laborious tasks for you when you come to release a GNOME project.

  • I wanted to brush up on my Python
  • I was unhappy with the manual procedures involved when releasing
  • I didn't think the current tools worked very well

Features

  • Show updated translations (for the po/ and help/ directories)
  • Show fixed bugs
  • Show a summary of bugs fixed and their description
  • Show the description of your package
  • Show the website for package
  • Create a release note for sending out announcements
  • Create an email using the release note
  • Upload your release tarball (and install it with 'install-module')
  • Add the summary and translations to the NEWS file

Download

You can download 0.7 here: maintainer.py

If you install it with the following command you should be able to run the script directly:

$ /usr/bin/install -t /usr/bin maintainer.py

What's new since 0.6

  • Create email based on the release note (Martyn Russell)
  • Support retrieving the help manual translators and include them in the release note (Lucas Rocha)
  • Support retrieving the project website and include it in the release note (Xavier Claessens)
  • Fixed A bug when there are no bugs fixed, just features implemented (Xavier Claessens)
  • Run 'install-module' on master.gnome.org when your tarball is uploaded (Xavier Claessens)

How it works

The script is written in Python.

To do anything, you MUST provide the script with a revision or tag in the same fashion that you would with CVS and you MUST run this script from the directory of the project you are maintaining. Usually this would be the tag of the last released version of your project.

To get a list of options, you can simply use:

$ maintainer.py --help

I will use Gossip 0.20 just before a release as a model for the examples below

Showing updated translations

You can do this by typing:

$ maintainer.py -r GOSSIP_0_20 -t
- Updated nl: Wouter Bolsterlee
- Updated sv: Daniel Nylander

Showing fixed bugs

You can do this by typing:

$ maintainer.py -r GOSSIP_0_20 -b
391329,388306,390924,346465,388275,387652,361898,389280,388090,352066,383504,384013,380373

Showing a summary of bugs fixed

NOTE: This ONLY shows bugs which are closed, fixed or verified, so if the bug is still open, it will not be listed.

You can do this by typing:

$ maintainer.py -r GOSSIP_0_20 -s
- Fixed #346465, Provide way to join another group chat from group chat window (Martyn Russell)
- Fixed #352066, Join/leave messages are missing in groupchat (Martyn Russell)
- Fixed #361898, Save logs with account type & don't assume protocol has account parameter (Xavier Claessens, Martyn Russell)
- Fixed #380373, Add birthday support to contact information (Laurent Bigonville, Martyn Russell)
- Fixed #383504, HIGify dialogues (Christian Persch)
- Fixed #387652, Fix some object reference counting issues (Xavier Claessens)
- Fixed #388090, Disconnect signals properly when freeing GossipPrivateChat (Mikael Hallendal)
- Fixed #388275, Don't add & remove a contact from the roster for presence updates (Xavier Claessens)
- Fixed #388306, Birthday stub label in contact information dialog not shown (Martyn Russell)
- Fixed #389280, Use EphySpinner instead of GossipThrobber (Christian Persch)
- Fixed #390924, When connecting, accounts dialog shows account to be disconnected (Martyn Russell)

Show the description of your package

You can do this by typing:

$ maintainer.py -e
Gossip is an instant messaging client for GNOME with an easy-to-use interface, providing users of the GNOME Desktop with a friendly way to keep in touch with their friends.

Create a release note for sending out announcements

You can do this by typing:

$ maintainer.py -r GOSSIP_0_20 -n DEFAULT > news.txt

The file created looks like this

You can also create templates in HTML and use the -l flag to make the sure the variables are written in HTML

From the command line you can see that the template used is 'DEFAULT'. This is an internal template that comes with the script. There is also one for doing HTML release notes.

Upload your release tarball

What this does, is upload your tarball to master.gnome.org using scp with the user name you provide

You can do this by typing:

$ maintainer.py -u mr
Attempting to upload tarball: gossip-0.21.tar.gz to master.gnome.org...
Successfully uploaded tarball

Templates

A template is basically a text file with a few required variables that need to be included. These are:

  • $name
  • $version
  • $download
  • $news (currently unused, but should retrieve the new items in the NEWS file)
  • $fixed
  • $translations
  • $help_translations

Information formatting

The ChangeLog MUST use the following format for the script to be able to pick up fixed bugs:

2006-09-23  Martyn Russell  <martyn@imendio.com>
 
	* libgossip/gossip-account-manager.[ch]:
	* libgossip/gossip-account.[ch]:
	* libgossip/gossip-account.dtd:
	* libgossip/gossip-utils.[ch]: Reworked GossipAccount to be more
	agreeable to Telepathy, fixes bug #355797 (Xavier Claessens, Martyn Russell).

The crucial part here is bug #355797, the name after it in brackets is optional. The person committing the bug will be named against the bug if there is no name in brackets supplied.

The Translations part of the release note comes from the po/ChangeLog file and the Manual Translations part of the release note comes from the help/ChangeLog file and is similar to the normal ChangeLog. Again, if the person committing is not the one who made the changes, the real name can be added in brackets.

The What is it? part of the release note (if using the DEFAULT template) comes from Bugzilla. The description that is shown next to the project when you file a new bug is the description used here

The Fixed bugs part of the release note consists of the bugs found in the ChangeLog, the name associated with that bug and the short description of the bug according to Bugzilla

Future

I have plans to keep working on this script and any comments or input here is most welcome. Here are some of my ideas:

  • Get the $news from the NEWS file? (not sure on the formatting here, it might vary across projects)