Carlton broke Django for a few hours recently. In this mini episode we discuss how this is possible and explain how Django releases work.
William: Hello and welcome to another episode of Django Chat. I'm Will Vincent, joined by Carlton. Hi Carlton!
Carlton: Hello. Hi Will. Hi.
William: And we were just talking about the fact that Carlton broke Django the other day with and we thought we might share how one does that and give a peek at the insides of Django. So Carlton: how did you break Django? How come I didn't notice it until you told me?
Carlton: Oh well, you know, because I recovered quickly is the main point.
So I was releasing some builds. Django 2.2.1 beta, Django 2.1.6 maybe,1.11.17 maybe. Something went wrong with the packaging so we run. We use setup tools and run setup to py which is got to build the source distribution which we then upload to the Python package and the three of those four releases, all but the 2.2 beta, the files that went into the package weren't correct.
There was some files from master from the 2.2 branch which just shouldn't have been. And so when people downloaded those, tried to install them and run the unit tests or their CI they just...
William: So people trying to download the latest version right after you would have...
Carlton: Yeah, right after. So they see the release announcement...
William: Yeah, I saw it. Well yeah I saw the release announcement. I didn't go ahead and download it.
Carlton: Right. Yeah. And so within about half an hour of the release is being released that is up to three tickets opened on the Django issue tracker. OK. This is a duplicate of the first. This is a duplicate the first of all. Whoa I'm on it! I'll fix it.
I then spent, I don't know, an hour or two hours trying to reproduce the packaging and I couldn't do that I have no idea what went wrong there some git weirdness is all I can presume. And then I created new versions and I uploaded those two PyPi and all was fixed. And so the reason you didn't notice is because you weren't right there there and then trying to stall it was only two three hours in between the broken builds being uploaded and the new releases.
William: Right. Right. Well yeah, because I remember when we you know we spoke I think the day after and I was like oh what's new? And you're like, oh I broke Django, blew up my day.
Because like most people I think I was like, Oh I didn't notice but glad you fixed it.
Carlton: Yeah. But it totally took up the afternoon.
William: Yeah. So I think now's a good chance for people to you know. So you're you're one of two Django Fellows so to talk about why you have the authority to break Django. Right. Or the hierarchy right because Django is a community. But you as the Django Fellow-- you and I mean Tim Graham--historically are in charge of releasing the new versions.
Carlton: You're right. So part of our role is to release Django. I mean there are a few other people in the community that can do it and have got all the right keys and access permissions and all the rest. But it's Tim and I who do it as part of our fellow responsibility. There's two reasons I guess for that I guess: one is it's a job, it's laborious, it requires work that's moderately complicated so it's something you have to pay attention to, and two if you don't pay attention things can go wrong and you know I'm not saying it wasn't paying attention when it did this but you know things do go wrong and you need to be on hand so it's better that it's done by a Fellow than a volunteer contributor who might be able to do one release and then but what if it goes wrong maybe they haven't got the capacity to follow up with a follow up release.
William: Right, the day job gets in the way because ... and I mean I'm actually I don't know how long have the Django Fellowes been around, because that's pretty recent?
Carlton: About four years.
William: So only within the last four years has there been part time pay for volunteers who have otherwise done this laborious work of just the release part.
Carlton: Well no, but it's not just the release part it's triaging tickets. That's the main part of the work is every day there's three, four, five new tickets on Django. Are these legitimate tickets. What are we going to do then is reviewing the patches which again is hard work and then merging them in and making sure that they're back ported to the right branch. You know if there's a bug fix then that will get back ported to the latest stable release branch if there's a security fix then that gets backported to all the support it branches and these kind of things.
William: So this is either glamorous the glamorous side.
Carlton: It's fine. It's not, you know, these are the bits that wouldn't get done. A project of Django's size if it weren't for the Fellows. Yeah. This is where projects fall down it's not that people are willing to write code it's the people country out the tickets and people can't just keep. You can't do it on a volunteer basis. So you know there's lots of open source projects that will because of that.
William: I don't know how people do it. I mean even just I have a repo, awesome-Django, that I'm still in the process of trying to plug into the awesome repo repository and the maintainer. He's been very helpful but it's you know I've just been busy. Yeah. The goodwill goes away at some point it's nice to have, you know, a little bit of a paycheck to grind through the things that one has to grind through.
Carlton: Yeah I mean it's just it's absolutely unrealistic to expect people to maintain an open source project indefinitely for free.
You know it's one thing to have a side project that you maintain. No problem. But to keep a big project going it's not gonna happen. People used to describe Django as the meat grinder and because it would get you new contributors would come along and they get eaten up by the meat grinder and they'd say, Oh we need some fresh meat for the meat grinder.
William: This was a mini Django chat episode. We plan to do more of these in the future around timely events. So rest assured of Carlton breaks Django again you'll hear about here. See you next time.