Automating version increase of R packages
If you are using git, then you can use git tags to create a version string. This is how we generate the version string of our igraph
library:
git describe HEAD --tags | rev | sed 's/g-/./' | sed 's/-/+/' | rev
It gives you a format like this:
0.8.0-pre+131.ca78343
0.8.0-pre
is the last tag on the current branch. (The last released version was 0.7.1, and we create a -pre
tag immediately after the release tag.) 131
is the number of commits since the last tag. ca78343
is the first seven character of the hex id of the last commit.
This would be great, except that you cannot have version strings like this in R packages, R does not allow it. So for R we transform this version string using the following script: https://github.com/igraph/igraph/blob/develop/interfaces/R/tools/convertversion.sh
Essentially it creates a version number that is larger than the last released version and smaller than the next versions (the one in the -pre
tag). From 0.8.0-pre+131.ca78343
it creates
0.7.999-131
where 131
is the number of commits since the last release.
I put the generation of the DESCRIPTION
file in a Makefile. This replaces the date, and the version number:
VERSION=$(shell ./tools/convertversion.sh)
igraph/DESCRIPTION: src/DESCRIPTION version_number
sed 's/^Version: .*$$/Version: '$(VERSION)'/' $< | \
sed 's/^Date: .*$$/Date: '`date "+%Y-%m-%d"`'/' > $@
This is quite convenient, you don't need to do anything, except for adding the release tags and
the -pre
tags.
Btw. this was mostly worked out by my friend and igraph co-developer, Tamás Nepusz, so the credit is his.
For a simpler approach, consider using the crant
tool with the -u
switch. For instance,
crant -u 3
will increment the third component of the version by one. There is also Git and SVN integration, and a bunch of other useful switches for roxygenizing, building, checking etc..