The current release script create_release_files.sh is one monolithic script that creates a release branch, changes versions in POMs and documentation, creates a release commit (but not a release tag), creates a source release, pushes Scala 2.10 and Scala 2.11 artefacts to maven, creates binary convenience releases for various Hadoop and Scala versions, stages the source and binary releases for release voting.
If anything goes wrong in the release process modification (or complete start-over) of the process is required. I'm proposing to create a set of modular release scripts that each perform a given action. (Actually, I would like to use the maven-release-plugin for that but this would require more work and doesn't work well for releasing with different Scala versions).
I'm proposing this set of scripts:
- create_release_branch.sh: Branch of for new release, update versions in POMs and doc, create release tag.
- create_source_release.sh: Selfexplanatory
- deploy_stating_jars.sh: Selfexplanatory
- create_binary_release.sh: Create a binary release for a specific version or for a whole matrix of versions.
Also, having the modular scripts allows, for example, to create the binary releases (which is time consuming) on a VM somewhere, then fetching them to the local machine and sign them there. I.e. this doesn't require putting a private key and passphrase on a remote machine.