Easily write a script to release a new version, with variable steps.
Releasing software usually is a pain. There are several checks that the developer must make for each new version. The developer is prone to forget one of them or perform the checks out of the optimal order. As Murphy would have it, many buggy releases are created for this reason.
releaser is a little framework the developer can use to write a script to guide him through the new version release process, such that the checks are performed automatically. (Each software project will have a release script that differs a little bit from others.)
Many steps of a common release process have already been implemented, and you can easily write your own. If you do write a step, please donate it to the project by making a pull request on GitHub.
Activate your virtualenv, then:
easy_install -UZ releaser
Simply download this script to the root of your project:
curl -O https://raw.github.com/nandoflorestan/releaser/master/release_new_version.py chmod +x ./release_new_version.py git add release_new_version.py
Then edit the script if necessary. (You can read it here.)
When you execute the script, the configured steps are executed in order. The screen shows little information, but you have all details in the log file.
Some of the steps require human intervention; for instance, you may be asked to verify the contents of a zip file before it is uploaded to pypi. releaser also makes you type the number of the version being released, which is then validated (for instance, it is compared to the current version), then written to a source code file that belongs to your project.
If any one of the steps fails, releaser asks you whether you would like it to rewind the process. (Yes, you get to decide.) How does this work?
A few of the steps (especially those involving git) have a rollback() method. For other steps (especially those that just check things at the beginning) rewinding wouldn't make any sense since they don't leave durable artifacts.
If your steps are correctly configured, rolling back leaves you exactly as you were before releaser ran. But:
Note the GitPush step has special behaviour. When it executes successfully but an error occurs in a later step, releaser decides NOT to roll back GitPush and the steps that preceded it. This is because one cannot delete git history once it has been pushed to a public server and GitPush tends to be one of the last steps anyway, so it is easier to finish the release manually than to deal with git history inconsistencies.
Other steps (such as creating a release on pypi) cannot be automatically rewinded for technical reasons, but releaser warns you that you have to do it manually before asking whether to roll back the release.