I got it working on my side with a custom Python script:
I still need to keep improving it, for example ability to rely on environment variables for the id/secret, auto-committing
updates.json to Github, etc.
One (easily resolved) quirk I had is that there is a mistake in the signing API documentation:
channel must be part of form data, not the URI (fyi @jorgev ).
I am actually happy of the beta channel being discontinued, because this forced me into finding a solution to self-host, and now using the script approach makes publishing a beta version quite less of a burden compared to having to push manually on AMO as it used to be.