2015-12-02 2 views
2

До сих пор я использовал инструмент go для извлечения зависимостей. Я установил $GOPATH в ~/projects/holygrail, и я проверил свой код на src/mycodehosting.foo/myuser/holygrail.Go and Bazel: Использование внешних репозиториев Git

Учитывая, что я на самом деле зависит от таких вещей, как gRPC, что означает, что мне нужно построить protoc из источника protobuf v3, я написал небольшой скрипт, который помогает мне в этом. Я бы предпочел, чтобы не должны предварительно подготовить макет, когда я проверяю свой исходный код, и я бы предпочел не, чтобы использовать скрипт bash для извлечения моих зависимостей, а затем их создания.

Текущее предварительное решение:

  • использование Git подмодуль для получения внешних зависимостей (которые, к сожалению, не означает, что нет умных перенаправляет что go get знает, как это сделать)
  • использование Go 1.5 в vendoring листать GO15VENDOREXPERIMENT переменная 1
  • переключатель в Базеле, чтобы иметь вменяемый построить систему, которая будет знать, как построить различные зависимости только в соответствии с требованиями

К сожалению, я слегка застрял.

  • Я использую Bazel 0.1.1 с правилами Skylark для Go от мерзавца репо скопированных в ~/.bazel/base_workspace
  • Первоначально я попытался с помощью new_local_repository (позже перешла на использование new_git_repository) внутри WORKSPACE БАЗЕЛ, в указании пользовательских BUILD файл для одной из зависимостей
    • это разрушивших потому, что Базэл не смог найти Go Skylark правила
  • Я не уверен, как написать собственный файл BUILD -файлов для git-submodule -загруженных репозиториев в папке vendor/ и выставить их в Bazel.

Am Я на правильном пути? Правильно ли я использую подмодули? Правильно ли использовать вложенную папку vendor/ для хранения библиотек Go?

  • Что является рекомендуемым способом построения внешних зависимостей, используя Bazel, где оба кода и зависимостей записываются в Go?
  • Не могли бы вы привести пример хранилища, что:
    • правильно зависит от внешнего BUILD -file-менее хранилище Go (без фактического импорта в восходящем код)?
    • правильно строит код Go во внешнем репозитории?
    • правильно интегрирует код Go из внешнего репозитория в главный проект Go?

Некоторые дополнительные исследования в этом:

  • Kythe, кажется, есть один BUILD файл для многих зависимостей (даже если они не являются подмодули, что не делает разницы).
  • Это помощник правило использует go_package() правило. Но, похоже, это from Kythe itself.
    • Не похоже, чтобы начать использовать правила от Kythe, но это похоже на возможный путь?
    • Что делают другие люди?

ответ

0

На несколько версий назад, Базэл поддерживает слэш в именах правил. Наряду с взломанной поддержкой пользовательских имен пакетов (https://github.com/bazelbuild/rules_go/issues/16) это, похоже, охватывает мой прецедент.

tl; dr У меня есть //vendor:BUILD файл который имеет такие правила, как go_library(name='github.com/blah/blah', ...). Каталоги называются, например, //vendor/github.com/blah/blah. У каждого подпакета есть отдельное правило. Я указал вручную зависимости.

Смежные вопросы