diff --git a/CHANGELOG.md b/CHANGELOG.md index 3487e5cd..45175c71 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,6 @@ +## Changes in 0.39.6 + - Add support for top-level field `codeberg` + ## Changes in 0.39.5 - When rendering build dependencies in a Cabal file, Hpack no longer excludes the reference to the main library from the shorthand syntax such as diff --git a/README.md b/README.md index f74daaa6..881b4bfd 100644 --- a/README.md +++ b/README.md @@ -133,8 +133,8 @@ library: | `description` | · | | | | | | `category` | · | | May be a list (since `0.38.3`) | | | | `stability` | · | | | | | -| `homepage` | · | If `github` given, `#readme` | | | | -| `bug-reports` | · | If `github` given, `/issues` | | | | +| `homepage` | · | If `codeberg` or `github` is given, `#readme` | | | | +| `bug-reports` | · | If `codeberg` or `github` is given, `/issues` | | | | | `author` | · | | May be a list | | | | `maintainer` | · | `author` | May be a list | | | | `copyright` | · | | May be a list | | @@ -147,6 +147,7 @@ library: | `extra-files` | · | | Accepts [glob patterns](#file-globbing) | | `0.38.1` | | `data-files` | · | | Accepts [glob patterns](#file-globbing) | | | | `data-dir` | · | | | | | +| `codeberg` | `source-repository head` | | Accepts `owner/repo` or `owner/repo/subdir` | `codeberg: foo/bar` | | `github` | `source-repository head` | | Accepts `owner/repo` or `owner/repo/subdir` | `github: foo/bar` | | `git` | `source-repository head` | | No effect if `github` given | `git: https://my.repo.com/foo` | | | `custom-setup` | · | | See [Custom setup](#custom-setup) | | | diff --git a/hpack.cabal b/hpack.cabal index 4f104796..426acab9 100644 --- a/hpack.cabal +++ b/hpack.cabal @@ -1,11 +1,11 @@ cabal-version: 2.0 --- This file has been generated from package.yaml by hpack version 0.38.3. +-- This file has been generated from package.yaml by hpack version 0.39.1. -- -- see: https://github.com/sol/hpack name: hpack -version: 0.39.5 +version: 0.39.6 synopsis: A modern format for Haskell packages description: See the README at category: Development diff --git a/package.yaml b/package.yaml index 01ef327b..80e45691 100644 --- a/package.yaml +++ b/package.yaml @@ -1,6 +1,6 @@ spec-version: 0.36.0 name: hpack -version: 0.39.5 +version: 0.39.6 synopsis: A modern format for Haskell packages description: See the README at author: Simon Hengel diff --git a/src/Hpack/Config.hs b/src/Hpack/Config.hs index f8577041..e4bc8e63 100644 --- a/src/Hpack/Config.hs +++ b/src/Hpack/Config.hs @@ -610,6 +610,7 @@ data PackageConfig_ library executable = PackageConfig { , packageConfigDataFiles :: Maybe (List FilePath) , packageConfigDataDir :: Maybe FilePath , packageConfigGithub :: Maybe GitHub +, packageConfigCodeberg :: Maybe GitHub , packageConfigGit :: Maybe String , packageConfigCustomSetup :: Maybe CustomSetupSection , packageConfigLibrary :: Maybe library @@ -1380,7 +1381,7 @@ toPackage_ dir (Product g PackageConfig{..}) = do f name = "Specified source-dir " ++ show name ++ " does not exist" sourceRepository :: Maybe SourceRepository - sourceRepository = github <|> (`SourceRepository` Nothing) <$> packageConfigGit + sourceRepository = codeberg <|> github <|> (`SourceRepository` Nothing) <$> packageConfigGit github :: Maybe SourceRepository github = toSourceRepository <$> packageConfigGithub @@ -1388,18 +1389,26 @@ toPackage_ dir (Product g PackageConfig{..}) = do toSourceRepository :: GitHub -> SourceRepository toSourceRepository (GitHub owner repo subdir) = SourceRepository (githubBaseUrl ++ owner ++ "/" ++ repo) subdir + codeberg :: Maybe SourceRepository + codeberg = toSourceRepository <$> packageConfigCodeberg + where + toSourceRepository :: GitHub -> SourceRepository + toSourceRepository (GitHub owner repo subdir) = SourceRepository (codebergBaseUrl ++ owner ++ "/" ++ repo) subdir + homepage :: Maybe String homepage = case packageConfigHomepage of Just Nothing -> Nothing - _ -> join packageConfigHomepage <|> fromGithub + _ -> join packageConfigHomepage <|> fromCodeberg <|> fromGithub where + fromCodeberg = (++ "#readme") . sourceRepositoryUrl <$> codeberg fromGithub = (++ "#readme") . sourceRepositoryUrl <$> github bugReports :: Maybe String bugReports = case packageConfigBugReports of Just Nothing -> Nothing - _ -> join packageConfigBugReports <|> fromGithub + _ -> join packageConfigBugReports <|> fromCodeberg <|> fromGithub where + fromCodeberg = (++ "/issues") . sourceRepositoryUrl <$> codeberg fromGithub = (++ "/issues") . sourceRepositoryUrl <$> github maintainer :: Maybe (List String) diff --git a/src/Hpack/Syntax/DependencyVersion.hs b/src/Hpack/Syntax/DependencyVersion.hs index d832f45b..6efcfb83 100644 --- a/src/Hpack/Syntax/DependencyVersion.hs +++ b/src/Hpack/Syntax/DependencyVersion.hs @@ -4,6 +4,7 @@ {-# LANGUAGE ViewPatterns #-} module Hpack.Syntax.DependencyVersion ( githubBaseUrl +, codebergBaseUrl , GitRef , GitUrl @@ -45,6 +46,9 @@ import Data.Aeson.Config.FromValue githubBaseUrl :: String githubBaseUrl = "https://github.com/" +codebergBaseUrl :: String +codebergBaseUrl = "https://codeberg.org/" + type GitUrl = String type GitRef = String diff --git a/test/EndToEndSpec.hs b/test/EndToEndSpec.hs index e77cb036..bcf782f4 100644 --- a/test/EndToEndSpec.hs +++ b/test/EndToEndSpec.hs @@ -314,6 +314,18 @@ spec = around_ (inTempDirectoryNamed "my-package") $ do github: https://github.com/sol/hpack/issues/365 |] `shouldFailWith` "package.yaml: Error while parsing $.github - expected owner/repo or owner/repo/subdir, but encountered \"https://github.com/sol/hpack/issues/365\"" + describe "codeberg" $ do + it "accepts owner/repo" $ do + [i| + codeberg: sol/hpack + |] `shouldRenderTo` package [i| + homepage: https://codeberg.org/sol/hpack#readme + bug-reports: https://codeberg.org/sol/hpack/issues + source-repository head + type: git + location: https://codeberg.org/sol/hpack + |] + describe "homepage" $ do it "accepts homepage URL" $ do [i|