cabal new-sdist 也包含测试文件

问题描述

我想为我的 Haskell 项目创建一个 sdist 包。 为简单起见,我们假设以下项目结构:

/ root
  | src
    | MyLib.hs
  | test
    | MyLibTest.hs
  | Changelog.md
  | MyProject.cabal
  | LICENSE

cabal 文件中定义了两个目标

library
  exposed-modules:    MyLib
  hs-source-dirs:     src
  -- ...

test-suite: MyProject-test
  type:               exitcode-stdio-1.0
  hs-source-dirs:     test
  main-is:            MyLibTest.hs
  -- ...

当我执行 cabal new-sdist --list-only 时,我得到以下列表:

./changelog.md
./MyProject.cabal
./LICENSE
./src/MyLib.hs
./test/MyLibTest.hs

我的问题:是否可以在 sdist 包中包含与测试相关的文件,或者我应该删除它们(如果是 - 如何)?

解决方法

好吧,如果您尝试生成仅限库的 sdist,则会出现此错误:

$ cabal new-sdist --list-only <library-name>
cabal: The component library cannot be packaged for distribution on its own.
Only entire packages may be packaged for distribution.

所以我会说建议上传整个内容。

Hackage 确实允许您在发布库之前使用候选包进行预览。我会说 upload your source tarball 作为候选包,并仔细检查您的测试没有出现。