I give a short motivation for a change to travis-ci's Haskell support. If you use travis-ci for your Haskell project, please give feedback!

Currently travi-ci runs cabal update in the install phase. This has the disadvantages, that any cabal install in the before_install phase uses a stale package list¹². So I'd run cabal update before any of travi-ci's phases (see 591fea6144).

This would mean, that cabal update is always run before any of your custom commands. But it would also mean, that you can not prevent cabal update by redefining a phase. Any issues with that?

Notes:

¹ This might yield unexpected results, say if you install a dependency foo, and both foo and your package depend on bar, you may end up with two different versions of bar, and cabal install will ultimately fail.

² Note, that, due to a recent change, installing packages manually is rarely necessary. But there are still situations where it is necessary, e.g. installing dependencies that are not on Hackage, or installing build tools like c2hs.