| Home | Wiki | Use Cases | Work Flows | FAQ | Get Involved | Bugzilla | Build | Blog | Documentation

# Making A Release

Branch
Release Upload Announce

frysk is making point release, cut from the Git repository's `HEAD`, on the first Wednesday of each month. This lets us deliver new features quickly, with a relatively low overhead.

The relese branch is taken on the first Wednesday at `00:00 GMT`, just in time for frysk's Wednesday meeting. We then, during the meeting, conduct a brief review, check the NEWS file, and make a go/no-go decision. It is then pushed out, perhaps with a few minor fixes.

The process is also relatively simplistic. It assumes for instance:

- there's never a pre-release tar-ball
  that would require extra pre-release version numbers such as `0.1.90`... and then only at the last moment set the real version (`0.2`).
- if there's ever a need for a re-spin, it just gets assigned a patch-level number like `0.2.1` and use the original releases branch

## Cutting the Branch

Here's a suggested sequence:

- To make things easier, first lets set up a few standard shell variables; you'll want to set version to something more meaningful:

      cd frysk  (change dir to where you have a current frysk checked out)
      version=0.2 ! ! ! change this
      echo $version
      date=`date -u +"%Y.%m.%d"`
      echo date=$date 1>&2
      shar1=`git-rev-list --before=$date -n1 HEAD`
      echo shar1=$shar1 1>&2
      branch=frysk/$version
      echo $branch

- Next we create a branch (frysk release branches are named frysk/<version>), and push that upstream:

      echo branch=$branch shar1=$shar1
      git branch $branch $shar1
      git push origin $branch

- Finally, we update the version number of the branch, and push that:

      git checkout $branch
      echo $version > frysk-common/version.in
      cat frysk-common/version.in
      git add frysk-common/version.in
      git commit -m "Set version.in to $version"
      git push origin $branch

The branch can then be checked out by everyone and build locally. Of course the keen will have already checked out the branch point using something like:

    git checkout `git-rev-list --before='00:00 GMT' -n1 HEAD`

## Making the Release

Here's a sequence for releasing frysk, we're assuming that $version was set above:

- First lets find the shar1 of the branch head (so that it can be refered to later), and the corresponding release tag:

      echo branch=$branch
      shar1=`git-rev-list -n1 $branch`
      echo shar1=$shar1
      release=`git show $shar1:frysk-common/version.in`
      echo release=$release

- Then create a tar-ball using that shar1 marker:

      rm -rf frysk-$release
      git archive --prefix=frysk-$release/ $shar1 | tar xpf -
      tar cfj frysk-$release.tar.bz2 frysk-$release

- as a sanity check try to build the tar-ball locally:

      rm -rf build-$release && mkdir build-$release
      ( cd build-$release \
        && bunzip2 < ../frysk-$release.tar.bz2 | tar xpf - \
        && mkdir build \
        && cd build \
        && ../frysk-$release/autogen.sh \
        && make -j2 )

- finally, assuming the results are good, tag the release and push it:

      git tag -u <gpg-name> -m frysk-$release frysk-$release $shar1
      git push --tags

## Upload to Sourceware

You might need access to sourceware for this:

    chmod a=r frysk-$release.tar.bz2
    scp frysk-$release.tar.bz2 'sourceware.org:~ftp/pub/frysk'
    ssh sourceware.org 'rm -f ~ftp/pub/frysk/.message'
    cat <<EOF | ssh sourceware.org 'dd of=~ftp/pub/frysk/.message'

                Frysk $release

        `md5sum frysk-$release.tar.bz2`
        $shar1   GIT SHAR1

    EOF
    ssh sourceware.org 'chmod a=r ~ftp/pub/frysk/.message'

## Announce the Release

Some people like to immediatly post the announcement, while others prefer to delay it a day or so giving the distros a chance to prepare local frysk packages. Either way, the announcement should at least include:

- All the contributors to this release (you can get this by going through GIT and, perhaps, the `ChangeLog` files; something like: `git-log --after=frysk/0.2 --pretty=format:"%an %ae" | sort -u`
- The contents of the NEWS entry.

and might also include:

- Where to download frysk
- file check-sums
- a description of frysk
- ???