Работа с 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 вида:
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.
Миграция 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 -u "<username>:<password>" \
"https://save.example.com/api/v1/admin/audit?resource_type=repository&q=go-proxy&limit=50"