Перейти к содержанию

Работа с Go

CodeScoring.Save реализует Go Module Proxy Protocol с префиксом /go/<project>/<repository>/. Совместим со стандартным Go toolchain (go mod, go build, go install).

Proxy-репозиторий

curl -X POST https://save.example.com/api/v1/repos \
  -H "Content-Type: application/json" \
  -u "<username>:<password>" \
  -d '{
    "project": "backend",
    "name": "go-proxy",
    "format": "go",
    "repository_type": "proxy",
    "remote_url": "https://proxy.golang.org",
    "cache_ttl": 86400
  }'

Hosted-репозиторий

curl -X POST https://save.example.com/api/v1/repos \
  -H "Content-Type: application/json" \
  -u "<username>:<password>" \
  -d '{
    "project": "backend",
    "name": "go-hosted",
    "format": "go",
    "repository_type": "hosted"
  }'

Hosted-репозиторий принимает PUT-загрузку модулей по URL вида:

PUT /go/<project>/go-hosted/<module>/@v/<version>.zip

Module paths используют case-encoding согласно Go Module Proxy spec: заглавные буквы заменяются на ! + соответствующую строчную (например, Acme!acme).

Настройка клиента

# Установка GOPROXY
export GOPROXY="https://save.example.com/go/<project>/go-proxy"

# Если используется Basic Auth — credentials передаются через .netrc:
cat >> ~/.netrc << EOF
machine save.example.com
login <username>
password <password>
EOF
chmod 600 ~/.netrc

Цепочка прокси

GOPROXY может содержать несколько URL через запятую: GOPROXY="https://save.example.com/go/<project>/go-proxy,direct". Go toolchain попробует каждый прокси по очереди; direct означает обращение напрямую к VCS.

Robot-аккаунты в CI

Для CI/CD используйте robot-аккаунт: login = sa$<robot-name>, password = <api-key> в ~/.netrc. Подробнее — в общем разделе Аутентификация.

GOPRIVATE для внутренних модулей

Если в репозитории хранятся внутренние модули, отсутствующие в публичном sumdb, добавьте их паттерны в GOPRIVATE.

export GOPRIVATE="git.example.com/*"
# При необходимости можно полностью отключить sumdb:
# export GOSUMDB=off

Миграция URL репозитория

Сценарий использования: миграция Go-прокси с Nexus / Artifactory на CodeScoring.Save.

Источник GOPROXY до миграции GOPROXY после миграции
Nexus https://nexus.host.ru/repository/go-remote https://save.example.com/go/<project>/go-proxy
Artifactory https://jfrog.host.ru/artifactory/api/go/go-virt https://save.example.com/go/<project>/go-proxy
Официальный proxy https://proxy.golang.org https://save.example.com/go/<project>/go-proxy

Устранение неполадок

Проверка списка версий

curl -u "<username>:<password>" \
  https://save.example.com/go/<project>/go-proxy/github.com/gin-gonic/gin/@v/list

Состояние сервиса

curl https://save.example.com/health

Аудит по репозиторию

curl -u "<username>:<password>" \
  "https://save.example.com/api/v1/admin/audit?resource_type=repository&q=go-proxy&limit=50"
Страница была полезна?