2015-03-02

Recently, I ran into a small, but interesting, issue in a new
open-source project that I am working
on: RxnWeaver.
It is being developed in Go. Inspired by a few other projects
that I follow, I set up Travis CI for this project.

I do the development
in my fork of the
project, before raising periodic (or need-based) pull requests
to the main repository.

In a particular commit, I happened to add a few exported constants
to a package (let us call this Package A) in the
repository. In the next commit, I added code that depended on
some of those constants, to a different package (let us call
this Package B) in the repository. As usual, I pushed the
commits to my GitHub fork after making sure that the code was
formatted with go fmt and that the tree builds
without errors. I raised a pull request to the main repository,
and the fun began!

Travis CI reported failure saying that the build did not complete
successfully. A little investigation revealed the cause. In
Package B, references to Package A use the
official github.com/RxnWeaver/RxnWeaver import paths.
The official version of the package there, however, has the old
set of constants that does not include the new and required ones.
Therefore, Package B could not be built.

The commit, though, that was intended to update Package A was part
of the same pull request!

Of course, it was easy to fix, but the simple lesson is: if you do
not want to have to use the command line and some git
trickery, do not forget to raise a pull request (and have it
merged) for each piece that could be used as a dependency in a
different Go package!