New releases of Diagrams' dependencies require point releases of many Diagrams packages at once. At least two maintainers have written personal tools to automate parts of our release process. (Brent's, Daniel's) This page has ideas & requirements for building a less ad-hoc tool, which is usable by people besides the author.
Tasks to Automate
- git pull latest master & release branches
- stow (symlink) specified version of GHC
- update dependency bounds in .cabal files
- delete a cabal sandbox in the current working directory, and restore, preserving add-source dependencies
- install packages with flags, first dry-run, highlight-versions
- git commit for .cabal + code changes
- update Changelog & git commit (using version number from .cabal)
- bump version & git commit (should git tag, doesn't currently)
- pick commits to cherry-pick from master branch
- upload to Hackage
Either Brent's tool or Daniel's (or both) performs each of the tasks listed above. In some cases the code should be more general or more robust.
We've discussed several interface options.
- One or more executables with command-line flags for each task (like Daniel's script)
- An executable which asks the user whether to run various tasks (like Brent's script)
- A Haskell DSL with multiple interpreters, for simulating or executing the various tasks
- At minimum, a function to execute each task, on which a more convenient interface can be built