Что означает «не указанная версия» в моей сборке Cabal? - PullRequest
0 голосов
/ 01 октября 2018

Последняя сборка Travis CI версии разработки из моего пакета Haskell сообщает об ошибке

MissingH должен совпадать>= 1.3.0.1, но в конфигурации стека нет указанной версии (последняя соответствующая версия - 1.4.0.1)

при сборке для GHC 8.6.1 , хотя у меня есть

MissingH >=1.3.0.1 

по моему build-depends.

Я не понимаю эту ошибку: она кажется противоречивой.У меня нет верхнего предела для MissingH, так почему он выдает ошибку и не использует последнюю версию?

1 Ответ

0 голосов
/ 01 октября 2018

Вам необходимо добавить MissingH к stack.yaml.

extra-deps:
  - 'MissingH-1.4.0.1'
  • В файле *.cabal вашего пакета указано, какие версии зависимостей совместимы с вашим пакетом.Это слабая спецификация, не все комбинации на самом деле могут работать (потому что они могут иметь противоречивые границы для транзитивных зависимостей или есть непредвиденный сбой в конкретной версии, с которой вы не тестировали).

  • Напротив, stack.yaml описывает конкретный снимок пакетов, закрепленных за конкретными версиями.Это точно говорит о том, что «мой пакет работает с этими версиями».Конечно, поддерживать версию каждой зависимости утомительно, и для этого команда Stackage поддерживает «распознаватель», курируемый набор версий пакетов, о которых известно, что они работают вместе, которые можно использовать для указания версии множества пакетов одновременно., установив resolver: поле stack.yaml соответственно.Средство распознавания перечисляет только подмножество пакетов в Hackage, поэтому, когда одна из ваших зависимостей отсутствует, вам необходимо добавить ее в stack.yaml как extra-dep.


Обновление: после обсуждения необходимы некоторые дополнительные сведения о настройке travis.

Во-первых, мое текущее предпочтительное решение для CI проектов на Haskell - не беспокоиться о стеке и использовать вместо него https://github.com/haskell-CI/haskell-ciкоторый генерирует сценарий travis с использованием cabal-install.

Теперь для менее радикального решения.

В настоящее время travis script только изменяет параметр --resolver, но какнасколько я могу судить, нет опции командной строки для добавления extra-dep.Кажется, stack.yaml файлы - единственный способ для этого.Кроме того, мы хотим указать MissingH в качестве дополнительного депозита для последних ночных ночников, потому что LTS уже включают его.

Таким образом, я предлагаю следующее:

  1. Создайте отдельный stack.yaml только для ночного распознавателя, назовите его как-нибудь еще, поскольку у вас уже есть такой, например, stack-nightly.yaml

    packages:
    - .
    extra-deps:
    - 'MissingH-1.4.0.1'
    
  2. Установите переменную окружения в точкудо stack-nightly.yaml, если распознаватель работает по ночам, может быть:

    env:
    ...
    - $RESOLVER=nightly STACK_YAML=stack-nightly.yaml
    # Not sure of the syntax.
    

    В противном случае вы можете использовать параметр командной строки --stack-yaml.

...