2015-12-02 1 views
2

Jusqu'ici, j'ai utilisé l'outil go pour récupérer des dépendances. J'ai mis $GOPATH à ~/projects/holygrail, et j'ai vérifié mon code dans src/mycodehosting.foo/myuser/holygrail. Étant donné que je dépend vraiment de choses telles que gRPC, ce qui signifie que j'ai besoin de construire protoc à partir de la source de protobuf v3, j'ai écrit un petit script qui m'aide à le faire. Je préférerais fortement pas de pré-préparer la mise en page lorsque je vérifie mon code source, et je préférerais fortement pas pour utiliser un script bash pour récupérer mes dépendances, puis les construire.Go et Bazel: Utilisation de référentiels Git externes

solution provisoire actuelle:

  • utiliser git sous-modules pour récupérer des dépendances externes (qui, malheureusement, signifie pas intelligent réoriente que go get sait comment faire)
  • utilisation ADRESSER vendoring de 1,5 en retournant le GO15VENDOREXPERIMENT variable à 1
  • passer à Bazel d'avoir un système de construction sain d'esprit qui saura comment construire diverses dépendances uniquement au besoin

Malheureusement, je suis légèrement coincé.

  • J'utilise Bazel 0.1.1 des règles Skylark pour Go de git copiés dans ~/.bazel/base_workspace
  • Au départ, j'ai essayé d'utiliser new_local_repository (plus tard passé à utiliser new_git_repository) à l'intérieur WORKSPACE de Bazel, en spécifiant une coutume BUILD fichier pour l'une des dépendances
    • sont tombés en panne parce que Bazel n'a pas pu trouver le Go Skylark règles
  • Je ne suis pas sûr de savoir comment j'écrirais des fichiers BUILD personnalisés pour les dossiers git-submodule téléchargés dans le dossier vendor/, et les exposerais à Bazel.

Suis-je sur la bonne voie? Est-ce que j'ai raison d'utiliser des sous-modules? Ai-je raison d'utiliser le sous-dossier vendor/ pour stocker les bibliothèques Go?

  • Quelle est la méthode recommandée pour construire des dépendances externes à l'aide Bazel, où le code et les dépendances sont écrites dans Go?
  • Pourriez-vous donner un exemple d'un référentiel:
    • dépend correctement sur un externe BUILD -file-less référentiel Go (sans importer réellement le code amont)?
    • construit correctement le code Go dans le référentiel externe?
    • intègre correctement le code Go à partir du référentiel externe dans le projet Go principal?

plus de recherche dans ce:

  • Kythe semble avoir un fichier BUILD pour de nombreuses dépendances (même si elles ne sont pas sous-modules, qui ne fait pas de différence).
  • Cette règle d'aide utilise la règle go_package(). Mais cela semble venir from Kythe itself.
    • Il ne semble pas correct de commencer à utiliser les règles de Kythe, mais cela semble être une voie possible?
    • Que font les autres?

Répondre

0

Comme il y a quelques versions, Bazel prend en charge les barres obliques dans les noms de règle. Avec un support piraté pour les noms de paquets personnalisés (https://github.com/bazelbuild/rules_go/issues/16) cela semble couvrir mon cas d'utilisation.

tl; dr J'ai le fichier //vendor:BUILD qui a des règles telles que go_library(name='github.com/blah/blah', ...). Les répertoires sont nommés, par exemple, //vendor/github.com/blah/blah. Chaque sous-paquet a une règle séparée. J'ai spécifié les dépendances manuellement.