Настроить Go
Реестр Go в SourceCraft поддерживает протокол Go Module Proxy. Вы можете загрузить в реестр ZIP-архив модуля и подключить опубликованный модуль к другому проекту с помощью команды go get.
Чтобы получать модули напрямую из публичного репозитория SourceCraft, воспользуйтесь инструкцией Использовать репозиторий SourceCraft в качестве источника пакетов для Go.
Подготовка к работе
-
Создайте реестр типа Go или подключите существующий.
-
Создайте персональный токен (PAT).
-
Создайте переменные окружения с данными для аутентификации:
export REGISTRY_USERNAME="iam" export REGISTRY_PASSWORD="<персональный_токен_PAT>"
Совет
Слаг организации и идентификатор реестра вы можете узнать на странице реестра в интерфейсе SourceCraft.
Создать модуль
-
Создайте директорию модуля и перейдите в нее:
mkdir mymodule cd mymodule -
Инициализируйте модуль, указав его полный путь в реестре:
go mod init pkg.sourcecraft.tech/go/<слаг_организации>/<идентификатор_реестра>/mymodule -
Создайте файл
hello.goс кодом модуля:package mymodule func Hello() string { return "Hello from my module!" } -
Синхронизируйте зависимости:
go mod tidy
Подготовить архив и загрузить модуль
Команда go не поддерживает публикацию модулей. Для загрузки подготовьте ZIP-архив: пути всех файлов в нем должны начинаться с <полный_путь_модуля>@<версия>/. Полный путь должен совпадать со значением директивы module в файле go.mod, а версия должна содержать префикс v, например v1.0.0.
-
В директории созданного модуля соберите архив:
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 МБ. -
Проверьте структуру архива:
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 -
Загрузите архив в реестр 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: <хеш_архива>", чтобы сервис проверил целостность архива после загрузки.
Скачать модуль и подключить к проекту
-
Укажите реестр как прокси для загрузки модулей:
export GOPROXY="https://pkg.sourcecraft.tech/go/<слаг_организации>/<идентификатор_реестра>,https://proxy.golang.org,direct" export GONOSUMDB="pkg.sourcecraft.tech/go/<слаг_организации>/<идентификатор_реестра>/*"GOPROXYзадает порядок поиска: реестр SourceCraft, публичный прокси Go, затем исходный репозиторий.GONOSUMDBисключает модули вашего реестра из проверки через публичную базу контрольных сумм. -
Добавьте в файл
~/.netrcданные для аутентификации:machine pkg.sourcecraft.tech login iam password <персональный_токен_PAT>Укажите значение токена: файл
~/.netrcне подставляет переменные окружения. Ограничьте доступ к файлу:chmod 600 ~/.netrc -
Перейдите в корень проекта, в который вы хотите добавить модуль. Если в проекте еще нет файла
go.mod, выполнитеgo mod init <имя_проекта>. -
Подключите опубликованную версию модуля:
go get pkg.sourcecraft.tech/go/<слаг_организации>/<идентификатор_реестра>/mymodule@v1.0.0Команда скачает модуль и добавит его в зависимости проекта. Для модулей версии 2 и выше укажите суффикс
/vN, напримерsample/module/v2@v2.0.0.