<div dir="ltr">I've only just started uploading packages to hackage (my package listing is <a href="https://hackage.haskell.org/user/clinton">here</a>) but currently there's a lot of repetitive activities for creating and updating packages.<a href="/"></a><div><br></div><div>For example, here's the steps in creating a package:</div><div><br></div><div><ol><li>Initialise a repository on github</li><li>Initialise git repository locally</li><li>Set github repository as remote</li><li>Add a LICENSE file</li><li>Add a standard ".gitignore file"</li><li>Create a cabal file with the appropriate files that hackage requires including:</li><ol><li>Git repository source</li><li>Issues page</li><li>Licence</li><li>Licence file</li></ol><li>Run <a href="https://github.com/hvr/multi-ghc-travis">multi-ghc-travis</a> to create a ".travis.yml" file</li><li>Make an initial commit and push</li><li>Refresh <a href="http://travis-ci.org">travis-ci.org</a>'s repository list so it detects the new repository </li></ol><div>There's also the stack stuff, but the GUI I'm using, IntelliJ with a Haskell plugin, handles most of that. It also creates a cabal file, but it's missing a number of key fields as mentioned above.<br><br>When I actually want to upload the package I go though these steps:</div></div><div><br></div><div><ol><li>Push to github</li><li>Wait for Travis-CI to compile the package (this is a test to ensure it builds in a clean remote environment).</li><li>Run "cabal sdist 2>&1"</li><li>Parse the output of sdist to see where the dist file is.<br></li><li>Run "<a href="https://hackage.haskell.org/package/hup">hup</a> packup fileFromSDist" to upload the package, putting in my hackage user/pass</li><li>Run "hup docboth", to both build and upload the documentation.</li><li>Tag the commit as a release</li></ol><div>Currently, I've got two scripts with help with a lot of this, but it's a bit adhoc, and it's not fully automated (for example, I still have to manually ensure all the correct fields are in the cabal file, usually by copy/pasting from another package and modifying). </div></div><div><br></div><div>Are there any tools that I haven't found that make this process a bit more painless? I'm a bit new to this area, and I've only started using git recently as a prelude to uploading my Haskell packages, so admittedly I may have missed something obvious or perhaps I'm just doing it all wrong.<br><br>But if other people do find it painful like me, perhaps I'll put some effort into rewriting my perl scripts into nice haskell packages and executables for others to use. </div></div>