Установить пакет Haskell непосредственно из репозитория git? - PullRequest
7 голосов
/ 18 марта 2020

stack позволяет определять git репозитории как пакеты, использующие файл stack.yaml. Можно ли сделать что-то вроде следующего непосредственно через командную строку:

stack install --resolver=lts-12.1 git@github.com:saurabhnanda/some-repo.git

Вариант использования: Установить инструмент командной строки, который я написал во время docker Процесс сборки. Я хочу избежать клонирования репо , а затем его построения. Есть ли для этого сокращение?

1 Ответ

2 голосов
/ 20 марта 2020

РЕДАКТИРОВАТЬ

Новое решение

Сразу после отправки ответа я подумал об отдельном решении.

Вы можете создайте пользовательский файл custom-snapshot.yaml в своем хранилище, который расширяет существующий снимок, например, lts-15.3 . Добавьте свой пакет к нему аналогично тому, как вы добавили бы его к stack.yaml. И указать на это при установке инструмента:

$ stack install --resolver https://raw.githubusercontent.com/saurabhnanda/my-cool-tool/master/custom-snapshot.yaml my-cool-tool

или еще короче :

$ stack install --resolver github:saurabhnanda/my-cool-tool:custom-snapshot.yaml my-cool-tool 

Отказ от ответственности - я не пробовал это, но в теории это должно работать.

Старое решение

Я не думаю, что вы можете сделать это в кли без stack.yaml

Итак, есть два варианта:

  • либо создать временный проект с stack new, добавить свой репозиторий в stack.yaml
  • или добавить ту же информацию в глобальный stack.yaml, местоположение которого можно найти программно:
$ stack path --config-location
/home/saurabhnanda/.stack/global-project/stack.yaml

и добавьте это к extra-deps:

- github: saurabhnanda/some-repo
  commit: master
  subdirs:
    - my-cool-tool

После этого запуск stack install my-cool-tool должен работать как обычно.

Я не думаю, что было бы слишком сложно написать сценарий Haskell, который мог бы выполнить одно из этих двух решений для вас, а хост - как сущность, которую можно curl редактировать и выполнять по требованию с помощью stack.

...