Понять связи между вашими репозиториями и сторонним кодом

Когда дело доходит до поиска фрагмента кода, поиск на GitHub временами может быть менее чем полезным. В отличие от этого, общедоступная версия инструментария Google Code Search абсолютно надрала. Cs.android.com и cs.opensource.google - мои основные инструменты для поиска открытого кода Google, но, к сожалению, это всего лишь Google Code Search. Если вы ищете код, отличный от Google, вам не повезло. До сих пор.

GCP предлагает «облачные репозитории исходного кода», которые в основном представляют собой частные репозитории GitHub с одним важным преимуществом: Google создаст единый индекс вашего кода для всех репозиториев во всех проектах GCP, к которым у вас есть доступ. Это означает, что вы можете войти в систему с учетной записью, которая имеет доступ к вашим личным и рабочим проектам GCP, чтобы получить единое представление о каждой строке кода, которая имеет для вас значение.

В этом руководстве я предполагаю, что ваш код находится на GitHub, но GCP также поддерживает Bitbucket из коробки. Если ваш код находится не на одной из этих двух платформ (например, GitLab), вы всегда можете настроить ручное зеркалирование.

Давайте идти!

Создавайте сторонние репозитории, которые вам небезразличны

Чтобы отразить код из GitHub в GCP, вы должны быть владельцем рассматриваемого репозитория (или, по крайней мере, иметь права администратора). Это связано с тем, что репозитории исходного кода добавят в ваше репозиторий GitHub веб-перехватчик, который копирует все изменения по мере их появления. Поскольку у вас, вероятно, нет прав администратора в сторонних репозиториях, вы можете вместо этого выполнить их форк и отразить форк.

Одна небольшая проблема: ваша вилка быстро устареет без регулярной синхронизации. К счастью, GitHub Actions упрощает решение этой проблемы. Поместите это задание CRON в .github/workflows/fork-sync.yml файл рабочего процесса, и все будет готово:

name: Sync Fork

on:
  schedule:
    - cron: '0 0 * * *'

jobs:
  sync:
    runs-on: ubuntu-latest
    steps:
      - name: Sync
        uses: TG908/fork-sync@v1
        with:
          github_token: ${{ secrets.GITHUB_TOKEN }}
          # TODO(you): change this to the upstream repository owner.
          # In this case, I'm mirroring
          # https://github.com/gradle/gradle to
          # https://github.com/SUPERCILEX/gradle and telling
          # the action that `gradle` is the upstream repo to
          # pull from.
          owner: gradle

Создать проект GCP

Чтобы все было организовано, создайте новый проект GCP только для зеркалирования кода. Я позвонил своему alex-codesearch.

Примечание. Я полагаю, что для репозиториев исходного кода в какой-то момент потребуется настроить платежный аккаунт, но бесплатные квоты чрезвычайно щедры, и я еще не заплатил ни цента.

Отразите свои репозитории в GCP

Теперь вы можете, наконец, подключить свои репозитории.

Совет от профессионалов: если вы собираетесь зеркалировать несколько репозиториев, я бы порекомендовал открыть Chrome Dev Tools, прежде чем нажимать Connect selected repository. После нажатия кнопки «Подключиться» найдите запрос на исправление во вкладке «Сеть». Затем вы можете Copy as fetch этот запрос, вставить его в консоль, а затем заменить ссылку репозитория GitHub в нижней части URL-адреса выборки любыми другими репозиториями, к которым вы пытаетесь подключиться. Или, надеюсь, GCP добавит поддержку одновременного подключения нескольких репозиториев в своем пользовательском интерфейсе к тому времени, когда вы это прочтете.

Поиск!

Теперь все готово. Индекс начнет заполняться с source.cloud.google.com.

Примечание об общем доступе

В корпоративной среде вы можете создать группу Google в своем домене G Suite и предоставить электронной почте этой группы Viewer доступ к проекту Code Search GCP. После этого любой член группы сможет получить доступ к поиску кода.

В качестве забавного небольшого примера использования я хотел перенести свои рабочие процессы GitHub Actions на последние версии, поэтому я начал искать actions:

Ой, слишком много результатов. Давайте попробуем только файлы YAML:

Лучше, но все равно какие-то посторонние результаты. Давай попробуем "actions/":

Ага! Поскольку я знаю, что у upload-artifact есть v2 версия, давайте найдем все случаи, когда я все еще использую v1 действия:

По мере того, как вы станете лучше разбираться в поиске кода, вы сможете сразу перейти к последнему шагу, но эта демонстрация демонстрирует мощь потрясающих возможностей поиска.

Удачного поиска кода!

Первоначально опубликовано на https://alexsaveau.dev 17 июня 2020 г.