You still have a month to go before you are too busy covering up for your colleague. I suggest that you use the time to "train " him to take due diligence and do a better job of coding by letting him pay the price for his screw ups and fix his own code, even if the result of not lifting a finger proactively is damage to the customer - as long as the damage can be unambiguously laid at his door.
Fix his code errors only as they affect your own work but when you do that,let him and let your management know that there was a problem with his code that you had to fix to make your code work.It doesn't matter if your colleague still does not get that he is the source of the problem as long as everyone around him including the management does.
As for your heretofore good relationship with your colleague, forget it. It was good because it was based on the basis of you continually cleaning up after him so there was something fake about the relationship anyway.
Going forward, your relationship with your colleague should be good for the right reason i.e. your colleague is doing his job in the way he is expected to, not the wrong reason which is you going out of your way to clean up after him at the cost of your own deadlines.
You've got one thing going for you and it is that the management cares about the screw ups and reacts aggressively to them. Take advantage of the fact that management cares and make it work for you. If he suffers, he brought it on himself. If he wants to stop suffering, he knows what he has to do.Let Let him suffer - and I do mean, let him suffer - until he sees the light.