The Boston Diaries

The ongoing saga of a programmer who doesn't live in Boston, nor does he even like Boston, but yet named his weblog/journal “The Boston Diaries.”

Go figure.

Monday, November 13, 2017

It shouldn't be this hard to deploy a new version

I spent more time fighting git and Github than I did in writing the code to support the JSON Feed. Yeah, the code was straightforward and I had it done rather quickly. Deploying the code was something else entirely.

So I finished the code, and the new templates to generate the feed and my tests were good and life was fine. I then committed my changes to git and that's where the first problem occured—not all the changes were committed! The issue came down to an overbroad directive to git to ignore a certain file—it was a general “ignore all files of the given name” instead of “ignore this one file” that I forgot about. So I tagged the release (version 5.0.0), pushed the changes to Github (for public consumption of the source code) and then went to update the copy of mod_blog on the server. It was there when I discovered the critical missing file (one of the templates for the new JSON Feed).


I had been a bit too hasty in pushing the code out to Github, so now I was stuck with releasing version 5.0.1. Only now something got munged up with my copy of the code on the server since it compiled the program with a version number of 5.0.0-1-gd096362 instead of a version number of 5.0.1.

A bit of background: I use git to tag versions, and in the Makefile I have the following bit of code:

VERSION := $(shell git describe --tag)



so I don't have to update the version number in code by hand (the override exists so I can specify different compiler flags and still have the version information propagated to the program; I also handle the case when git isn't available, but that comes in later in my tale of woe). Running git tag showed a tag of 5.0.1, but git describe --tag was only coming up with 5.0.0-1-gd096362.


Did I not update things properly? Was it a problem with the version of git on the server? Did I lose the signal? Was it lost in translation? Wat?

Some quick changes, try version 5.0.2. That worked—kind of. Now on the server the version was reporting back version 5.0.1.

Then I discovered another issue. I have code in the Makefile to handle the case when the version number isn't available through git—it's just a check to see if git describe --tag returned anything and if not, use a hard coded version specified in the Makefile. Now, to prevent me from pushing an update to Github with an incorrect version number in the Makefile, I have a script that is supposed to run when I push changes to Github (specifically, when I push changes to a remote host). Only the last change to that script rendered it non-executable, so it wasn't running. The version on Github had the wrong version number specified in the Makefile, and I was still having this weird “one version back” problem on the server.

I was still having problems with version 5.0.3 when I gave up. I wanted a nice, clean, 5.0.0 release, and instead, I was on my way to version 5.0.137 the way things were going. And all because I didn't check in a critical file because of a typo. If only I hadn't pushed the code to Github so quickly. If only there were a way to remove the tagged versions from Github, but there didn't seem to be an obvious way to me.

As I eventually found out, there was a way—from the command line on my development machine, I just had to run this blindingly obvious sequence of commands:

GenericUnixPrompt> git tag -d 12345
GenericUnixPrompt> git push origin :refs/tags/12345


I'm surprised I didn't realize that sooner.

So I removed the tags for versions 5.0.3, 5.0.2, 5.0.1, and 5.0.0, made sure I had all the files and whatnot, and re-released version 5.0.0.

Good Lord!

So now all is right with the world, and I have a new JSON Feed file.

Obligatory Picture

[It's the most wonderful time of the year!]

Obligatory Links

Obligatory Miscellaneous

You have my permission to link freely to any entry here. Go ahead, I won't bite. I promise.

The dates are the permanent links to that day's entries (or entry, if there is only one entry). The titles are the permanent links to that entry only. The format for the links are simple: Start with the base link for this site:, then add the date you are interested in, say 2000/08/01, so that would make the final URL:

You can also specify the entire month by leaving off the day portion. You can even select an arbitrary portion of time.

You may also note subtle shading of the links and that's intentional: the “closer” the link is (relative to the page) the “brighter” it appears. It's an experiment in using color shading to denote the distance a link is from here. If you don't notice it, don't worry; it's not all that important.

It is assumed that every brand name, slogan, corporate name, symbol, design element, et cetera mentioned in these pages is a protected and/or trademarked entity, the sole property of its owner(s), and acknowledgement of this status is implied.

Copyright © 1999-2019 by Sean Conner. All Rights Reserved.