Wednesday, May 28, 2014¶
Another contribution¶
Joe sent two pull requests for export_excel
and print_pisa
. Thank you, Joe! I beg your pardon that I
still did not find time to have a closer look at them.
export_excel
would probably be of
immediate benefit.
(See also Removed the “Export to .csv” button later on this page.)
Thoughts about versioning and release process¶
Yesterday I made an upgrade on a Lino Welfare production server, including data migration. So before doing “anything else” I should bump certain version numbers and tag the repositories.
Lino Welfare needs a new version number (must change from version 1.1.12 to 1.1.13) because North database migration works using the application’s version number. (Which by the way is an important difference with South or the coming Django migration system, who use an individual “version” counters for every app.)
The lino package,
north
anddjangosite
need a new version number because they might have influence on the Lino Welfare database structure, and thus Lino Welfare needs to be able to specify “I want this version of lino, of north and/or of djangosite”.The “anything else” above is not absolute. We are talking about changes in trunk/master of
djangosite
,north
,lino
andlino_welfare
itself. But for exampleatelier
, DavLink and eidreader are special because they have no influence on the database.Changing the version number is itself easy thanks to
atelier
: I just need to change theproject_info.py
file, which currently contains:SETUP_INFO = dict( name='lino-welfare', version='1.1.12', # not yet released install_requires=['lino', 'suds', 'vobject', 'django-iban'], ...
But before actually doing this, I must “release” the current versions.
In fact I don’t need to release them officially on PyPI right now. As long as nobody asks for a new released version, I can save time by skipping this step. But I must be ready to do it retroactively some day in the future.
So I should tag the current state of the involved repositories. To get back into this, I needed to read the Git docs about Tagging
The author of Git Tag Does the Wrong Thing by Default claims that I should not use lightweight tags. And Why should I care about lightweight vs. annotated tags? explains it more in detail.
AlBlue 20110426 writes another interesting must-know about tags:
A tag is like a branch, in that it identifies a specific commit with a descriptive label.
What’s the difference between tags and branches? The workspace is (almost always) associated with a branch, called
master
by default. When it is, a commit will automatically update themaster
reference to point to that new commit; in other words, branches are mutable references.A tag, on the other hand, is created to point to a specific commit and thereafter does not change, even if the branch moves on. In other words, tags are immutable references.
So I now made an annotated tag on each project:
$ go site
$ git tag -a v0.1.8 -m v0.1.8
$ git push origin v0.1.8
$ go north
$ git tag -a v0.1.7 -m v0.1.7
$ git push origin v0.1.7
$ go lino
$ git tag -a v1.6.13 -m v1.6.13
$ git push origin v1.6.13
$ go welfare
$ git tag -a v1.1.12 -m v1.1.12
$ git push origin v1.1.12
Each git push origin
commands gave output similar to this:
$ git push origin v0.1.7
Counting objects: 1, done.
Writing objects: 100% (1/1), 160 bytes | 0 bytes/s, done.
Total 1 (delta 0), reused 0 (delta 0)
To git@github.com:lsaffre/north.git
* [new tag] v0.1.7 -> v0.1.7
The next step then was to increment the version numbers.
Note the fab esi
command.
For example in Lino Welfare:
$ go welfare
$ fab esi
And change the file to:
SETUP_INFO = dict(
name='lino-welfare',
version='1.1.13',
install_requires=['lino', 'suds', 'vobject', 'django-iban'],
...
Oops, then I noticed that I probably made a little mistake. Released versions should specify versions in their install_requires. So in fact before setting the tags I should have done something like:
SETUP_INFO = dict(
name='lino-welfare',
version='1.1.12',
install_requires=['lino==1.6.12', 'suds', 'vobject', 'django-iban'],
...
And then, afterwards remove the version specificier (==1.6.12
)
again because it can be disturbing in development versions. Is that
true?
If you use Git and followed until here, please tell me:
Did I get it right?
Another thing is to make this process more automatic. That’s for later.