How to make a release - ZoneMinder/zoneminder GitHub Wiki

Overview

This document details the steps required to be taken in order for a new release to be made. These steps have been made as basic and as complete as possible because sometimes I forget the steps and need reminding.

Release Naming Conventions

The ZoneMinder project uses the following triple dotted notation for release names:

  1. a.bb.c where "a" is the major release, "bb" is the minor release, and "c" is the micro release. Releases must always have a micro release value. Do not neglect this.

Prerequisites

  1. Install github-changelog-generator https://github.com/skywinder/github-changelog-generator
  2. Generate your own github token https://github.com/settings/tokens/new
    This token needs repo:status and public_repo permissions.
  3. The ZoneMinder github project is already on your local drive and "upstream" points to the main repository.

User Forum - Major Releases Only

  1. Create a new forum topic titled "ZoneMinder a.bb.c"
  2. Review existing forums topics and consider archiving the oldest

Github Forum

  1. Create a new Issue topic titled "Release a.bb.c"
  2. Identify any remaining issues that must be resolved before release
  3. Attempt to assign developers to each remaining issue
  4. Invite others to discuss
  5. Make a reminder that any issue not discussed in this thread shall be considered not eligible for the next release and will be dealt with following release.

Create the release

  1. Make sure you are in the master branch
    git checkout master
  2. Make sure your local master branch is up to date
    git pull upstream master
  3. Double check to see if you need to create the file db/zm_update-a.bb.c.sql. If no database changes are required then we do not need this file. Use the contents of db/zm_update-1.30.0.sql as an example.
    cp db/zm_update-1.30.0.sql db/zm_update-a.bb.c.sql
    vi db/zm_update-a.bb.c.sql
  4. Bump the file "version" in the root project folder to a.bb.c
    echo a.bb.c > version
  5. Commit changes
    git add . git commit -m "Bump version to a.bb.c"
  6. Create a new release branch if this is a new major release git checkout -b release-a.bb.c
  7. Update the release branch with the new version
    git push upstream release-a.bb
  8. Create a tag before pushing upstream

Create a new tag

  1. To create a new Release:
    git tag -a a.bb.c
  2. Make sure and set the "-a" annotate flag or Steve will bug you
  3. If the tag already exists, use the "-f" flag to force the update
  4. Push the new branch with tag to release branch
    git push upstream release-a.bb
  5. Verify the new tag is present on github.com. If it is not, force it with
    git push --tags upstream master
  6. Don't forget to merge the changes to master. git checkout master git merge release-a.bb git push upstream master

Generate the Release Notes

  1. Install github_changelog_generator (required Ruby)
    gem install github_changelog_generator
  2. Run the generator with the following command
    github_changelog_generator -u ZoneMinder -p zoneminder -t <your github token> -o CHANGELOG.md --no-issues --since-tag d.ee.f --future-release a.bb.c --release-branch master
  3. You may have to set --max-issues NUM to prevent Github from crying about abuse

Create a new Release on the github site

  1. Go to https://github.com/ZoneMinder/ZoneMinder/releases/new
  2. In the 'Tag version' field, enter the tag created previously. Github will notify you the tag already exists.
  3. Chose a release title based on a Metallica theme. Verify the title has not already been used.
  4. Write a short message to describe the significant changes in this release.
  5. Copy the contents of CHANGELOG.md from the changelog generator and paste it into the github release

Follow-Up Tasks

  1. Get Kyle to bump the version at http://update.zoneminder.com/version.txt
  2. Make a Release announcement on Facebook
  3. Make a Release announcement on Twitter
  4. Create a new blog entry on zoneminder.github.io then update zoneminder.com when changes look correct.
⚠️ **GitHub.com Fallback** ⚠️