9
votes

Over time I've developed a messy system level Haskell installation that I'm not sure how to completely clean up. But for the most part this isn't of much concern as I simply use stack to manage per-project Haskell configurations. However as my project requirements diverge from my system Haskell setup, I wonder what the best way is to build and upload packages for Hackage.

Specifically (1) should I be using

stack exec -- cabal sdist
stack exec -- cabal upload

instead of simply

cabal sdist
cabal upload

and (2) should is there any reason to install a project version of cabal (with stack build cabal?)

Or is there some better stack-based approach to building and distributing to Hackage that doesn't involve invoking cabal directly?

1
There is stack sdist and stack upload which I believe should work without invoking cabal directly. - ppb
It seems like stack upload . isn't seeing the credentials that cabal upload sees (I'm asked for my name, etc.). Any idea how to set those so I'm not asked each time? - orome
From what I'm seeing it should save them automatically under '~/.stack/upload/credentials.json' (in world-readable plain text) after first upload. - ppb
@ppb: That seems to work, but after confirming that upload was successful I get "Environment variable GPG_TTY is not set (see man gpg-agent)" and "Unable to find gpg2 or gpg executable". Any idea what's happening there? - orome
@ppb: I think stack sdist and stack upload constitute an answer. - orome

1 Answers

10
votes

Adding an answer based on my earlier comment.


stack
  • stack sdist
  • stack upload

commands, which don't require interfacing with cabal directly in stack-based projects.

A full list of commands supported by stack can be obtained via:

$ stack --help

and the official documentation.

Individual commands also support --help to see what command line flags they support.