Внутренние импорты в Go-проекте на GitHub и Travis CI
12 июля 2015 Golang 8027 просмотров
Расскажу об одной проблеме, с которой я столкнулся при настройке TravisCI для проекта на Го, хостившемся на GitHub. Проект включает в себя несколько пакетов и является по-сути веб-приложением. Он готов и работает, некоторые пакеты импортируют другие общие пакеты. Включаем проект на TravisCI, создаем .travis.yml файл в корне:
language: go
go:
 - 1.4
install:
 - go get github.com/gorilla/mux
 - go get github.com/gorilla/sessions
 - go get github.com/gorilla/context
 - go get github.com/lib/pq
script:
 - go test -v ./...
install - это то, что мы запускаем перед запуском тестов, тут я добавил загрузку зависимостей. Кстати, Travis поддерживает godep.

script - это то как мы запускаем тесты.

Примечание. Импорты делаю без приставки github.com/plutov. Т.е. import "tea-weekly/app/common". Ок, TravisCI запускает сборку и выходит с кодом 1 и ошибкой:
imports tea-weekly/app/common: unrecognized import path "tea-weekly/app/common"
Дело в том, что TravisCI помещает мой проект в своей VM в папку $HOME/gopath/src/github.com/plutov/tea-weekly . А $GOPATH это $HOME/gopath. Т.е. пакет tea-weekly/app/common он найти не может.

Моим решением было поменять все импорты на github.com/plutov/… Это создает некоторые проблемы, после этого локально мой код не сработал, пришлось перенести проект в $GOPATH/src/github.com/…

На Live-сервере я так сделать не был готов, поэтому просто перед деплоем запускаю go get github.com/plutov/tea-weekly.

Теперь TravisCI запускает мои тесты, а не выходит с ошибкой. Если честно, мне не нравится такой подход тем, что подключение TravisCI мне вручило зависимость от github. Возможно, читатель сталкивался с этим и решил проблему по-другому? Спасибо.