hkgr 0.4.3.2 → 0.4.4
raw patch · 5 files changed
+40/−28 lines, 5 filesdep +simple-cmd
Dependencies added: simple-cmd
Files
- CHANGELOG.md +8/−0
- README.md +4/−2
- data/template.cabal.tmpl +4/−2
- hkgr.cabal +3/−2
- src/Main.hs +21/−22
CHANGELOG.md view
@@ -1,4 +1,12 @@ # Changelog+## 0.4.4 (2024-05-03)+- .cabal template: add autogen-modules and update tested-with ghc versions+- publish,build: output message before cabal build+- use simple-cmd +-+++## 0.4.3.2 (2023-10-20)+- use a cabal.project for pristine sdist/build to ignore any parent project+- .cabal template: updated tested-with ghc versions ## 0.4.3.1 (2023-07-05) - fix the template file SPDX license tag and cabal-version field placement
README.md view
@@ -70,10 +70,12 @@ ## Help `$ hkgr --version`+ ```-0.4.3.2+0.4.4 ``` `$ hkgr --help`+ ``` Hackage Release tool @@ -171,6 +173,6 @@ hkgr uses `cabal-install` >=2, `git`, and also `hlint` if available. ## Contribute-`hkgr` is distributed under GPL version 3 or later.+`hkgr` is licensed and distributed under the GPL version 3 or later. Reports and contributions are welcome at <https://github.com/juhp/hkgr>.
data/template.cabal.tmpl view
@@ -18,8 +18,9 @@ -- tested-with: GHC == 8.10.7 -- || == 9.0.2 -- || == 9.2.8--- || == 9.4.7--- || == 9.6.3+-- || == 9.4.8+-- || == 9.6.5+-- || == 9.8.2 source-repository head type: git@@ -28,6 +29,7 @@ executable @PROJECT@ main-is: Main.hs -- other-modules: Paths_@PROJECT_@+-- autogen-modules: Paths_@PROJECT_@ hs-source-dirs: src build-depends: base < 5, @PROJECT@
hkgr.cabal view
@@ -1,6 +1,6 @@ cabal-version: 2.0 name: hkgr-version: 0.4.3.2+version: 0.4.4 synopsis: Simple Hackage release workflow for package maintainers description: Hkgr (Hackager) is a tool to help make new releases of@@ -13,7 +13,7 @@ license-file: LICENSE author: Jens Petersen <juhpetersen@gmail.com> maintainer: Jens Petersen <juhpetersen@gmail.com>-copyright: 2019-2023 Jens Petersen+copyright: 2019-2024 Jens Petersen category: Util build-type: Simple data-dir: data@@ -38,6 +38,7 @@ , extra , filepath , simple-cabal >= 0.1.0+ , simple-cmd , simple-cmd-args >= 0.1.6 , simple-prompt >= 0.2 , typed-process
src/Main.hs view
@@ -12,11 +12,9 @@ import Data.Char import Data.List.Extra import Data.Maybe-#if !MIN_VERSION_base(4,11,0)-import Data.Monoid ((<>))-#endif import Data.Version.Extra import SimpleCabal+import SimpleCmd ((+-+)) import SimpleCmdArgs import SimplePrompt (promptNonEmpty, promptPassword) import System.Directory@@ -127,7 +125,7 @@ assertTagOnBranch :: String -> IO () assertTagOnBranch tag = whenM (null <$> cmdOut (git "branch" ["--contains", "tags/" ++ tag])) $- error' $ tag ++ " is no longer on branch: use --force to move it"+ error' $ tag +-+ "is no longer on branch: use --force to move it" tagDistCmd :: Bool -> Bool -> Bool -> IO () tagDistCmd existingtag force noHlint = do@@ -137,19 +135,19 @@ when (not force && isJust mtagHash) $ assertTagOnBranch tag if existingtag then if isNothing mtagHash- then error' $ "tag " ++ tag ++ " does not exist"+ then error' $ "tag" +-+ tag +-+ "does not exist" else sdist force noHlint pkgid else do if isJust mtagHash && not force then do headHash <- cmdOut (git "rev-parse" ["HEAD"]) let onHead = Just headHash == mtagHash- putStrLn $ "tag is " ++ (if onHead then "" else "not ") ++ "on HEAD"+ putStrLn $ "tag is" +-+ (if onHead then "" else "not") +-+ "on HEAD" let tarball = sdistDir </> showPkgId pkgid <.> tarGzExt exists <- doesFileExist tarball if exists- then error' $ "tag " ++ tag ++ " exists: use --force to " ++- (if exists then "override tarball and " else "") ++ "move"+ then error' $ "tag" +-+ tag +-+ "exists: use --force to" +-++ (if exists then "override tarball and" else "") +-+ "move" else sdist force noHlint pkgid else do git_ "tag" $ ["--force" | force] ++ [tag]@@ -181,7 +179,7 @@ let pkg = packageName pkgid cabalfile = unPackageName pkg <.> "cabal" unlessM (doesFileExist cabalfile) $- error' $ ".cabal filename differs from package name: " ++ unPackageName pkg+ error' $ ".cabal filename differs from package name:" +-+ unPackageName pkg diff <- cmdOut (git "diff" ["-U0", "HEAD", cabalfile]) when (any ("+version:" `isPrefixOf`) (lines (map toLower diff))) $ error' "Please commit or revert the changed package Version first"@@ -190,10 +188,10 @@ checkNotPublished pkgid = do let published = sdistDir </> showPkgId pkgid <.> tarGzExt <.> "published" exists <- doesFileExist published- when exists $ error' $ showPkgId pkgid <> " was already published!!"+ when exists $ error' $ showPkgId pkgid +-+ "was already published!!" let oldpublished = "dist" </> showPkgId pkgid <.> tarGzExt <.> "published" oldExists <- doesFileExist oldpublished- when oldExists $ error' $ showPkgId pkgid <> " was already published!!"+ when oldExists $ error' $ showPkgId pkgid +-+ "was already published!!" sdistDir :: FilePath sdistDir = ".hkgr"@@ -206,7 +204,7 @@ when haveTarget $ if force then removeFile target- else error' $ target <> " exists already!"+ else error' $ target +-+ "exists already!" cwd <- getCurrentDirectory withTempDirectory "tmp-sdist" $ do git_ "clone" ["-q", "--no-checkout", "..", "."]@@ -258,7 +256,7 @@ git_ "push" ["origin", tag] userpassBS <- getUserPassword void $ P.readProcessInterleaved_ (P.setStdin (P.byteStringInput userpassBS) $ P.proc "cabal" ("upload" : ["--publish" | publish] ++ [tarball]))- putStrLn $ (if publish then "Published at " else "Uploaded to ") ++ "https://hackage.haskell.org/package/" ++ showPkgId pkgid ++ if publish then "" else "/candidate"+ putStrLn $ (if publish then "Published at" else "Uploaded to") +-+ "https://hackage.haskell.org/package/" ++ showPkgId pkgid ++ if publish then "" else "/candidate" when publish $ createFileLink (takeFileName tarball) (tarball <.> "published") @@ -271,7 +269,7 @@ if exists then readFile cabalConfig else do- putStrLn $ "Warning: " ++ cabalConfig ++ " not found!"+ putStrLn $ "Warning:" +-+ cabalConfig +-+ "not found!" return "" muser <- maybeGetHackage "username" False cabalConfig mpasswd <- maybeGetHackage "password" True cabalConfig@@ -281,7 +279,7 @@ maybeGetHackage field hide cabalConfig = if haveCabalConfigField then return Nothing- else Just <$> prompt hide ("hackage.haskell.org " ++ field)+ else Just <$> prompt hide ("hackage.haskell.org" +-+ field) where haveCabalConfigField :: Bool haveCabalConfigField =@@ -300,7 +298,7 @@ _out <- P.readProcessInterleaved_ (P.setStdin (P.byteStringInput userpassBS) $ P.proc "cabal" ("upload" : "--documentation" : ["--publish" | publish])) pkgid <- getPackageId- putStrLn $ (if publish then "Published at " else "Uploaded to ") ++ "https://hackage.haskell.org/package/" ++ showPkgId pkgid ++ if publish then "" else "/candidate"+ putStrLn $ (if publish then "Published at" else "Uploaded to") +-+ "https://hackage.haskell.org/package/" ++ showPkgId pkgid ++ if publish then "" else "/candidate" cabal_ :: String -> [String] -> IO () cabal_ c args =@@ -316,7 +314,7 @@ needProgram :: String -> IO () needProgram prog = do mx <- findExecutable prog- unless (isJust mx) $ error' $ "program needs " ++ prog+ unless (isJust mx) $ error' $ "program needs" +-+ prog -- #endif -- FIXME warning if upstream template changed (keep a versioned template copy)@@ -356,14 +354,14 @@ whenM (doesFileExist "CHANGELOG.md") $ renameFile "CHANGELOG.md" "ChangeLog.md" unlessM (doesFileExist "README.md") $- writeFile "README.md" $ "# " ++ name ++ "\n"+ writeFile "README.md" $ "#" +-+ name ++ "\n" unless origsetup $ do setup <- doesFileExist setupFile when setup $ removeFile setupFile setupCabalTemplate name Just cblName -> when (cblName /= name) $- putStrLn $ "Warning: " ++ cblName ++ " different to " ++ name+ putStrLn $ "Warning:" +-+ cblName +-+ "different to" +-+ name haveStackCfg <- doesFileExist "stack.yaml" mstack <- findExecutable "stack" -- FIXME add stack.yaml template too@@ -399,11 +397,11 @@ replaceHolder "EMAIL" usermail userTemplate githubuser <- cmdOut $ git "config" ["--global", "github.user"] replaceHolder "USER" githubuser userTemplate- putStrLn $ userTemplate ++ " set up"+ putStrLn $ userTemplate +-+ "set up" copyFile userTemplate $ name <.> "cabal" replaceHolder "PROJECT" name $ name <.> "cabal" replaceHolder "PROJECT_" (map underscore name) $ name <.> "cabal"- replaceHolder "SUMMARY" (name ++ " project") $ name <.> "cabal"+ replaceHolder "SUMMARY" (name +-+ "project") $ name <.> "cabal" year <- cmdOut (P.proc "date" ["+%Y"]) replaceHolder "YEAR" year $ name <.> "cabal" let modulePath = "src/MyLib.hs"@@ -470,9 +468,10 @@ let tarball = cwd </> sdistDir </> showPkgId pkgid <.> tarGzExt exists <- doesFileExist tarball unless exists $- error' $ "Please 'tagdist' first: " ++ tarball ++ " not found"+ error' $ "Please 'tagdist' first:" +-+ tarball +-+ "not found" withTempDirectory "tmp-build" $ do cmd_ "tar" ["xf", tarball] setCurrentDirectory $ showPkgId pkgid addCabalProject+ putStrLn $ "cabal building" +-+ showPkgId pkgid <.> tarGzExt cabal_ "build" []