diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,11 @@
 # Revision history for releaser
 
+## 0.3.0.0 -- 2020-05-04
+
+* Upload to haddock support
+
+* LTS-15 support
+
 ## 0.2.1.0 -- 2019-12-02
 
 * Use cabal v2 commands to avoid compatibility issues
diff --git a/releaser.cabal b/releaser.cabal
--- a/releaser.cabal
+++ b/releaser.cabal
@@ -1,7 +1,7 @@
 cabal-version: 2.4
 name: releaser
 synopsis: Automation of Haskell package release process
-version: 0.2.1.0
+version: 0.3.0.0
 license: Apache-2.0
 license-file: LICENSE
 maintainer: domen@dev.si
@@ -24,7 +24,6 @@
         base >=4.7 && <5,
         Cabal -any,
         regex-tdfa -any,
-        regex-tdfa-text -any,
         process -any,
         pretty-terminal -any,
         text -any
diff --git a/releaser/Main.hs b/releaser/Main.hs
--- a/releaser/Main.hs
+++ b/releaser/Main.hs
@@ -24,3 +24,7 @@
   gitPush "origin"
   gitPushTags "origin"
   cabalUpload tarball
+
+  -- make haddocks and upload them
+  docsTarball <- cabalMakeHaddocks "."
+  cabalUploadDocs docsTarball
diff --git a/src/Releaser/Primitives.hs b/src/Releaser/Primitives.hs
--- a/src/Releaser/Primitives.hs
+++ b/src/Releaser/Primitives.hs
@@ -6,6 +6,8 @@
   , cabalBumpVersion
   , cabalSdist
   , cabalUpload
+  , cabalMakeHaddocks
+  , cabalUploadDocs
   -- git primitives
   , gitCheckout
   , gitGetTags
@@ -71,7 +73,7 @@
 cabalRead :: FilePath -> IO CabalInfo
 cabalRead dir = do
   logStep $ "Looking for a cabal file in " <> dir
-  cabalFile <- tryFindPackageDesc dir
+  cabalFile <- tryFindPackageDesc silent dir
   genericPackageDescription <- readGenericPackageDescription silent cabalFile
   let pkgversion = pkgVersion $ package $ packageDescription genericPackageDescription
       pkgname = pkgName $ package $ packageDescription genericPackageDescription
@@ -87,7 +89,7 @@
 cabalWriteVersion dir versionStr = do
   if validCabalVersion versionStr
   then do
-    cabalFile <- tryFindPackageDesc dir
+    cabalFile <- tryFindPackageDesc silent dir
     cabalinfo <- cabalRead dir
     cabal <- T.readFile cabalFile
     let versionPrev :: T.Text
@@ -124,6 +126,23 @@
   let sdistTarball = "dist-newstyle/sdist/" <> name cabalinfo <> "-" <> version cabalinfo <> ".tar.gz"
   logStep $ "Created " <> sdistTarball
   return sdistTarball
+
+cabalMakeHaddocks :: FilePath -> IO FilePath
+cabalMakeHaddocks dir = do
+  logStep "Running $ cabal haddock"
+  cabalinfo <- cabalRead dir
+  void $ readProcess "cabal" ["v2-haddock", "--haddock-for-hackage"] mempty
+  let docsTarball = "dist-newstyle/" <> name cabalinfo <> "-" <> version cabalinfo <> "-docs.tar.gz"
+  logStep $ "Created " <> docsTarball
+  return docsTarball
+
+cabalUploadDocs :: FilePath -> IO ()
+cabalUploadDocs docsTarball = do
+  logStep "Running $ cabal upload -d"
+  -- TODO: recommend that credentials are configured via ~/cabal/config
+  interactiveProcess (proc "cabal" ["upload", "-d", "--publish", docsTarball]) $ \_ -> do
+    promptRetry "cabal upload -d"
+    cabalUploadDocs docsTarball
 
 cabalUpload :: FilePath -> IO ()
 cabalUpload sdistTarball = do
