Извлеките репозиторий GitHub с помощью Bazel - PullRequest
0 голосов
/ 29 мая 2018

Мне нужно загрузить весь репозиторий GitHub, используя Bazel .Поскольку я довольно новичок в этом инструменте, я не совсем уверен, как этого добиться.

Моя основная идея заключается в следующем:

написать пользовательское правило репозитория в downloadgithubrepo.bzl (который находится в корне проекта точно так же, как файл WORKSPACE), например:

def _impl(repository_ctx):
    repository_ctx.download("url_to_zipped_github_repo", output='relative_path_to_output_file')

github = repository_rule(
    implementation = _impl

и в файле WORKSPACE написать что-то вроде этого:

load("//:downloadgithubrepo.bzl", "github")

и для вызова сборки необходим файл BUILD (также расположенный в корне проекта), его содержимое следующее:

cc_library(
    name = "testrun",
    srcs = "main.c",
)

Мне пришлось добавить основнойВ противном случае файл .c не удается собрать - это одна из проблем, и реальная проблема заключается в том, что это не работает, поскольку сборка проходит, но репозиторий GitHub не загружается.

Я на правильном путисовсем?Кто-нибудь делал что-то подобное раньше?

1 Ответ

0 голосов
/ 30 мая 2018

То, что вы ищете, может быть уже реализовано в правиле репозитория new_git_repository или в правиле git_repository, если в проекте GitHub уже есть файлы Bazel BUILD, подключенныеin.

Если у проекта GitHub нет файлов BUILD, файл BUILD требуется при использовании new_git_repository.Например, если вы хотите зависеть от целевого файла (например, /foo/bar.txt) или целевого правила (например, cc_library) в https://github.com/example/repositoryи в хранилище нет файлов BUILD, запишите эти строки в файл WORKSPACE вашего проекта:

new_git_repository(
    name = "example_repository",
    remote = "https://github.com/example/repository.git",
    build_file_content = """
exports_files(["foo/bar.txt"])

# you can also create targets
cc_library(
    name = "remote_cc_library",
    srcs = ["..."],
    hdrs = ["..."],
""",
)

В своем файле BUILD укажите ссылки на цели внешнего хранилища, используя@ префикс:

cc_library(
    name = "testrun",
    srcs = ["main.c"],
    data = ["@example_repository//:foo/bar.txt"],
    deps = ["@example_repository//:remote_cc_library"],
)

При запуске bazel build //:testrun Bazel будет ..

  1. Анализировать зависимости //:testrun, в том числе файл main.c ицели из внешнего репозитория @example_repository.
  2. Найдите файл WORKSPACE для внешнего репозитория с именем example_repository и найдет объявление new_git_repository.
  3. Выполните git clone дляremote атрибут, указанный в объявлении example_repository.
  4. Запись файла BUILD, содержащего строку build_file_content в корне проекта клонированного репозитория.
  5. Анализ целей @example_repository//:foo/bar.txt и @example_repository//:remote_cc_library
  6. Построение зависимостейи передает их в //:testrun cc_library.
  7. Build //:testrun.

Если проект GitHub имеет BUILD файлы, вы делаетене нужно предоставлять файл BUILD.Вы можете обратиться к целям непосредственно после указания зависимости WORKSPACE с помощью git_repository:

git_repository(
    name = "example_repository",
    remote = "https://github.com/example/repository.git",
)

Для получения дополнительной информации ознакомьтесь с документацией Bazel по Внешние репозитории .

...