# Making a release

This chapter describes the steps necessary to create a software release of LCDproc. It is intended to guide the release manager when creating a new release.

## Creating a source code release

## Steps to create a new software release of LCDproc

1. Update year of release in HEAD. The following files need to be updated:

   - `server/main.c`

   - `clients/lcdproc/main.c`

   - `docs/lcdproc-user/bookinfo.docbook`

   - `docs/lcdproc-dev/bookinfo.docbook`

2. Make a backup of the CVS repository to the local disk. This is needed if something goes wrong. Run: `rsync -av 'lcdproc.cvs.sourceforge.net::cvsroot/lcdproc/*' .`

3. Check out the CVS stable release branch. Run: `cvs -d:ext:`<your_sf_userid>`@lcdproc.cvs.sourceforge.net:/cvsroot/lcdproc checkout -r stable-0-5-x -d lcdproc-0-5-x lcdproc` and change into the `stable-0-5-x` directory.

4. Merge HEAD to stable. This step is only required if the release will be done from HEAD.

   1. Run: `cvs -q update -j stable-0-5-x -j HEAD`

   2. Update version numbers for stable branch. See files-with-version-numbers for the list of affected files.

   3. Commit everything. Run: `cvs commit -m "Sync with HEAD"`

5. 1. Tag the stable tree to indicate the file revision where the branch was made. This eases later diffs against that point.

      Run: `cvs tag LCDPROC_0_5_`A`_BP` (where `A` is the version number of the next release and _BP means branch point).

      Tag names are all uppercase with underscores to separate elements!

   2. Create a release branch in CVS. Run: `cvs tag -b lcdproc-0-5-`A``

      Release branch names are all lowercase with hyphens to separate elements!

   3. Now you have created a branch from which the new release will done. Before continuing either checkout this new branch to a new working directory or update the current one by running: `cvs update -r lcdproc-0-5-`A``

6. Update version numbers for release and commit the changes. See files-with-version-numbers for the list of affected files.

7. Set a CVS tag for the release. Run: `cvs tag LCDPROC_0_5_`A`_RELEASE` where `A` is the version number of the next release.

8. Export the release source tree as anonymous. This step is intended to check if all files are correctly tagged with the new release in the source tree.

   Run: `cvs -d :pserver:anonymous@lcdproc.cvs.sourceforge.net:/cvsroot/lcdproc -z3 export -r LCDPROC_0_5_`A`_RELEASE lcdproc`

9. Create the release tarball by running:

           sh autogen.sh
           ./configure
           make distcheck

10. Test the newly created release tarball at least once. Try to build and install it with all drivers enabled. Better: Try to build and install with several library options turned on and off.

11. Create the release notes. The release notes should be an easy to read summary of changes in this release. The `ChangeLog` file is not very good as release notes as it is just a chronological list of things that happen.

    The release notes should talk about:

    - Fingerprint (SHA-1) of the release tarball

    - Known bugs

    - New drivers

    - Other important changes within drivers, the server core and clients

    - Everything else the user has to know for upgrading his installed version

    grouped by topics of interest.

12. Upload the new release and release notes to Sourceforge.

13. Announce the new release.

    Send notice about the new release to the LCDproc mailing list (lcdproc@lists.omnipotent.net) and the lcdproc-announce mailing list on Sourceforge (lcdproc-announce@lists.sourceforge.net). Also mention the new release on the LCDproc website download and front page.

## Files that need version numbers updated

- `BUGS`

- `ChangeLog`

- `configure.ac`

- `server/menuscreens.c`

- `docs/lcdproc-dev/bookinfo.docbook`

- `docs/lcdproc-dev/driver-api.docbook`

- `docs/lcdproc-dev/introduction.docbook`

- `docs/lcdproc-user/bookinfo.docbook`

- `docs/lcdproc-user/how-to-obtain.docbook`

## Creating a documentation release

Any release of LCDproc is accompanied the the user guide and developer guide. Here is how to create these documentation packages.

## Steps to create the documentation package

1. Get the release tarball and extract it (or change to the CVS directory exported in releasing-software and change to `docs/lcdproc-user`.

2. Create the documentation package by running: `xmlto -o lcdproc-0-5-`A`-user-html xhtml lcdproc-user.docbook`

3. Create a tarfile of the documentation package: `tar -czf lcdproc-0-5-`A`-user-html.tar.gz lcdproc-0-5-`A`-user-html`

4. Repeat the above steps for the developers guide, replacing -user with -dev where appropriate.

5. Upload the files to the Sourceforge file release system.

The online documentation consists of the user and developer guide, each converted to a single file for viewing online.

## Steps to create the online documentation

1. Get the release tarball and extract it (or change to the CVS directory exported exported in releasing-software and change to `docs/lcdproc-user`.

2. Create the documentation file by running: `xmlto xhtml-nochunks lcdproc-user.docbook`

3. Rename the file: `mv lcdproc-user.html lcdproc-0-5-`A`-user.html`

4. Repeat the above steps for the developers guide, replacing -user with -dev where appropriate.

5. Upload the files to our Sourceforge web site (not the file release system!) and change `htdocs/docs/index.html` to point to the new files.