До сих пор я использовал инструмент 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
файл для многих зависимостей (даже если они не являются подмодули, что не делает разницы).- Вот их BUILD file
- Вот их additional helper rule
- Это помощник правило использует
go_package()
правило. Но, похоже, это from Kythe itself.- Не похоже, чтобы начать использовать правила от Kythe, но это похоже на возможный путь?
- Что делают другие люди?