Most linux projects follow a similar release process, and to illustrate that, I will specifically describe the FSlint release process as depicted in the diagram above. Following is a presentation of the actual shell commands I run on my system to affect the releases to the various distributions. It's worth noting here that the config files used to create the packages for the linux distributions are maintained within the source tree of the FSlint project itself. However these config files are not included in the released source packages so that any changes specific to the distribution packages can be done independently of FSlint releases.
ver=2.22 #set the version referenced by the following commands

repository

Hosting your project on a public OSS hosting site is a very good idea. Some possible choices for project hosting are, SourceForge, Google, GNU or Berlios. Personally I don't like the structure of the SourceForge site, though it is improving lately. So I went with Google's project hosting as it became available when I was considering using a public hosting site for my project, and I really like Subversion.

Here we create the release in the google subversion repository and copy it locally.

cd ~/fslint/releases/
svn cp -m "tagging release $ver" \
https://fslint.googlecode.com/svn/trunk/ \
https://fslint.googlecode.com/svn/tags/$ver
svn export https://fslint.googlecode.com/svn/tags/$ver fslint-$ver
tar -c --exclude=debian --owner=root --numeric-owner fslint-$ver/ |
gzip -9 > fslint-$ver.tar.gz
rm -Rf fslint-$ver

fedora

First of all I build and sign an RPM for people who don't use the fedora package repositories, or want immediate access to the latest fedora package. Before Fedora 11 I did this:
sudo rpmbuild --sign -tb fslint-$ver.tar.gz
cp -a /usr/src/redhat/RPMS/noarch/fslint-$ver-1.noarch.rpm .
Since fedora 11 we need to do the following to create backwards compatible packages, that are hashed using md5 rather than sha256.
rpmbuild --sign -tb --define "_binary_filedigest_algorithm md5" fslint-$ver.tar.gz
cp -a ~/rpmbuild/RPMS/noarch/fslint-$ver-1.noarch.rpm .
Currently fedora uses a CVS repository and a higher level client to interact with the project. Until Fedora Core 6 this client was called "plague" but since F7 "koji" is used. I'm a fedora maintainer and so can affect releases to the devel branch and the various fedora releases directly, using the following commands.
cd ~/fslint/rpm/fedora/fslint/


export CVSROOT=":ext:pbrady@cvs.fedoraproject.org:/cvs/pkgs"
export CVS_RSH="ssh"
cvs update -dPA #update any build infrastructure changes
export KOJI_FLAGS="--nowait"

#release to rawhide (separate from below so as can check each step)
(
cd devel
cp -a ~/fslint/releases/fslint-$ver.tar.gz .
make new-sources FILES="fslint-$ver.tar.gz"
#manually update spec file with new version info
make noarch #to test locally
cvs commit -m "Update to $ver"
make tag build #test remote build
)
#check rawhide build info

#release to versions
for i in FC-6 F-7 F-8; do
  (
   cd $i
   cp -al ../devel/fslint-$ver.tar.gz . #note file only actually uploaded once
   make new-sources FILES="fslint-$ver.tar.gz"
   cp -fal ../devel/fslint.spec .
   #make noarch
   cvs commit -m "Update to $ver"
   make tag build
  )
done
#check FC5/FC6 build info
#check F7 build info

#Since the merge of Fedora Core and Extras in F7, we need to
#explicitly push koji builds into a distro staging area (using bodhi)

debian

I chroot to ubuntu from fedora and run the following, to create a source package. This also creates and signs a binary package for people who don't use debian, or want immediate access to the latest debian package.
ver=2.22
cd ~/fslint/releases/debian
ln -s ../fslint-$ver.tar.gz fslint_$ver.orig.tar.gz
tar xzf fslint_$ver.orig.tar.gz
(
 cd fslint-$ver
 svn export https://fslint.googlecode.com/svn/tags/$ver/debian
 dpkg-buildpackage -rfakeroot -tc -sa
)
mv fslint_$ver-1_all.deb ..
ln -s ../fslint_$ver-1_all.deb
rm -Rf fslint-$ver
The requirements of debian packages change often so it's important to use lintian to ensure conformance.
lintian -i -I -E fslint_$ver-1_all.deb
lintian -i -I -E fslint_$ver-1.dsc
I'm not a debian maintainer, so I must upload my source package to mentors.debian.net as follows, and then wait for someone to sponsor the package, i.e. upload it to debian.
dput mentors *$ver*.changes
I don't release directly to ubuntu, but they sync periodically with "Debian unstable". One can also request a sync from debian, or request sponsorship for non debian packages.

Publish to this site

cd .. && ./update.web $ver #update packages and sign checksums to local copy of site
#manually edit ~/public_html/fslint/index.html
cd ~/public_html && ./www.pixelbeat.org.sync #update public site

Publish to news sites

Possibly I could use an XML RPC interface to automate this, but I do releases infrequently enough, and the web forms are simple enough to do this manually. Currently I publish to freshmeat and gnomefiles from where it generally filters to other news sites.
© Jun 29 2007