Tracking down a bug with tox and git

Today I wanted to track down what broke the CI of an open source library (django-coverage-plugin) which is testing against Django main branch.

The build was passing recently, but broke a few days ago. I needed to run something like a git bisect, except it was not on the project itself (which hadn’t changed much) but on Django, while running the project’s test suite.

The project is tested with tox, which I used to run an isolated environment to install a version of Django from an archive based on a git commit, which GitHub exposes:

deps =

I looked at the recent commits from the main branch, picked one from a few days ago, made sure it worked, and saved it as djangook env. I then selected the most recent one, made sure that it failed, and saved it as djangoko env.

I chose the middle revision and replaced djangook or djangoko, depending on the result, which led me to find the commit which broke the test for the coverage plugin.

This is more or less the steps that happens when doing a git bisect -or a dichotomy in mathematics- except here I couldn’t use this tool, so I had to do it manually. Tox saved me ton of time as I was able to create several isolated environments quickly.