Настроить Go

Реестр Go в SourceCraft поддерживает протокол Go Module Proxy. Вы можете загрузить в реестр ZIP-архив модуля и подключить опубликованный модуль к другому проекту с помощью команды go get.

Чтобы получать модули напрямую из публичного репозитория SourceCraft, воспользуйтесь инструкцией Использовать репозиторий SourceCraft в качестве источника пакетов для Go.

Подготовка к работе

  1. Установите Go.

  2. Создайте реестр типа Go или подключите существующий.

  3. Создайте персональный токен (PAT).

  4. Создайте переменные окружения с данными для аутентификации:

    export REGISTRY_USERNAME="iam"
    export REGISTRY_PASSWORD="<персональный_токен_PAT>"
    

Совет

Слаг организации и идентификатор реестра вы можете узнать на странице реестра в интерфейсе SourceCraft.

Создать модуль

  1. Создайте директорию модуля и перейдите в нее:

    mkdir mymodule
    cd mymodule
    
  2. Инициализируйте модуль, указав его полный путь в реестре:

    go mod init pkg.sourcecraft.tech/go/<слаг_организации>/<идентификатор_реестра>/mymodule
    
  3. Создайте файл hello.go с кодом модуля:

    package mymodule
    
    func Hello() string {
        return "Hello from my module!"
    }
    
  4. Синхронизируйте зависимости:

    go mod tidy
    

Подготовить архив и загрузить модуль

Команда go не поддерживает публикацию модулей. Для загрузки подготовьте ZIP-архив: пути всех файлов в нем должны начинаться с <полный_путь_модуля>@<версия>/. Полный путь должен совпадать со значением директивы module в файле go.mod, а версия должна содержать префикс v, например v1.0.0.

  1. В директории созданного модуля соберите архив:

    bsdtar -a -cf ../mymodule-v1.0.0.zip \
      -s '|^|pkg.sourcecraft.tech/go/<слаг_организации>/<идентификатор_реестра>/mymodule@v1.0.0/|' \
      go.mod hello.go
    

    Утилита bsdtar входит в состав libarchive. В Debian и Ubuntu ее можно установить командой sudo apt install libarchive-tools. В macOS используйте команду tar с теми же параметрами.

    Пример содержит два файла. Для своего модуля включите в архив нужные исходные файлы, go.mod и go.sum, если он существует. Архив должен соответствовать требованиям Go; его размер не должен превышать 500 МБ.

  2. Проверьте структуру архива:

    unzip -l ../mymodule-v1.0.0.zip
    

    Пути файлов должны иметь вид:

    pkg.sourcecraft.tech/go/<слаг_организации>/<идентификатор_реестра>/mymodule@v1.0.0/go.mod
    pkg.sourcecraft.tech/go/<слаг_организации>/<идентификатор_реестра>/mymodule@v1.0.0/hello.go
    
  3. Загрузите архив в реестр HTTP-запросом методом PUT:

    curl \
      --request PUT \
      --user "$REGISTRY_USERNAME:$REGISTRY_PASSWORD" \
      --upload-file ../mymodule-v1.0.0.zip \
      "https://pkg.sourcecraft.tech/go/<слаг_организации>/<идентификатор_реестра>/mymodule/1.0.0/mymodule-v1.0.0.zip"
    

    В URL для загрузки версия передается без префикса v: для v1.0.0 укажите 1.0.0. Имя модуля указывается без префикса pkg.sourcecraft.tech/go/<слаг_организации>/<идентификатор_реестра>/. Для модулей версии 2 и выше также уберите суффикс /vN из имени в URL загрузки. Например, для модуля sample/module/v2 используйте имя sample/module и версию 2.0.0.

    При необходимости добавьте параметр --header "X-Checksum-SHA256: <хеш_архива>", чтобы сервис проверил целостность архива после загрузки.

Скачать модуль и подключить к проекту

  1. Укажите реестр как прокси для загрузки модулей:

    export GOPROXY="https://pkg.sourcecraft.tech/go/<слаг_организации>/<идентификатор_реестра>,https://proxy.golang.org,direct"
    export GONOSUMDB="pkg.sourcecraft.tech/go/<слаг_организации>/<идентификатор_реестра>/*"
    

    GOPROXY задает порядок поиска: реестр SourceCraft, публичный прокси Go, затем исходный репозиторий. GONOSUMDB исключает модули вашего реестра из проверки через публичную базу контрольных сумм.

  2. Добавьте в файл ~/.netrc данные для аутентификации:

    machine pkg.sourcecraft.tech login iam password <персональный_токен_PAT>
    

    Укажите значение токена: файл ~/.netrc не подставляет переменные окружения. Ограничьте доступ к файлу:

    chmod 600 ~/.netrc
    
  3. Перейдите в корень проекта, в который вы хотите добавить модуль. Если в проекте еще нет файла go.mod, выполните go mod init <имя_проекта>.

  4. Подключите опубликованную версию модуля:

    go get pkg.sourcecraft.tech/go/<слаг_организации>/<идентификатор_реестра>/mymodule@v1.0.0
    

    Команда скачает модуль и добавит его в зависимости проекта. Для модулей версии 2 и выше укажите суффикс /vN, например sample/module/v2@v2.0.0.

Полезные ссылки