[О блоге] [наверх] [пред] [2023-08-14 18:17:01+03:00] [f110400deb3082f8a7c551479153143fb2808e25]
Темы: [go]

prepro утилиты

http://www.git.cypherpunks.ru/?p=prepro.git;a=blob;f=README
Не даёт мне покой (01b506180ad27c841d2fefed28cc3cffde06f3a7)
невозможность использовать из коробки SHA256 Git репозитории
в Go. Ну точнее получать модули из них.

Я понимаю что SHA256 формат в Git это экспериментальная штука, но во
всяких GitLab и других системах есть задачи и работа по возможности его
использования. Во всяких github.com/go-git/go-git библиотеках это тоже
поддерживается. Ну и, собственно, никто ничего не будет развивать пока
кто-то не будет неким первопроходцем и популяризатором. А избавляться от
SHA1 не может не быть неправильным, хоть в контексте Git это и не горит.

Удручало то меня в Go то, что нет готовых простых инструментов чтобы
сделать GOPROXY-совместимые директории для раздачи HTTP сервером. Так то
они создаются прозрачно на лету когда я устанавливаю зависимость. Но
чтобы установить её: у меня должен быть HTTP-сервер который бы отвечал
go-import-ом и перенаправлял на VCS. Но когда у меня GOPROXY-совместимый
кэш уже создан, то HTTP-сервер уже должен перенаправлять не на VCS, а на
GOPROXY сервер.

Думал как бы форсировать обращение при вызове go-get (для создания
GOPROXY кэша) не на настоящий go.{stargrave.org|cypherpunks.ru} сервер,
где не должно оставаться go-import-ов с VCS-ом, на какой-то временно
поднятый второй сервер, отдающий URL-ы до VCS-ом. Вызывая go-get-ы у
меня бы заполнилась директория которую бы я отдал для раздачи на GOPROXY
домене. Геморрой, короче.

Ещё пару дней назад я нашёл golang.org/x/mod/zip библиотеку, которая
может сделать ZIP-архив с нужной версией модуля прямо из VCS. Но она не
делает .info/.mod/list файлы. То есть, тоже не законченное решение.

Сегодня вспомнил про это, снова посмотрел на GOPROXY протокол и уже вижу
что "доделать" недостающие файлы -- тривиально. Вот и написал prepro
утилиты, которыми сделал себе GOPROXY/go-import-дружелюбные директории
для раздачи на HTTP-сервере. Несколько zsh скриптов. mk-mod делает
.zip/.info.mod файлы для заданного VCS URL/path, модуля и версии.
mk-list генерирует list-файлы во всей иерархии. mk-goget генерирует HTML
файл с go-import для заданного VCS-Web-URL и модуля (прежде я просто
руками создавал эти файлы, что тоже не было проблемой).

Теперь установить модуль разрабатываемый в SHA256 Git репозитории -- не
проблема, если я конечно не забуду вызвать mk-mod/mk-list для новой
версии в Git. go.* сайты перенаправят на proxy.go.* версии, следующие
GOPROXY протоколу.

Ещё один внезапный profit от этого: так как Git у меня находился только
на моей домашней машине, то вся раздача Go модулей шла с одного места. С
GOPROXY решением, так как теперь это просто несколько статичных файлов
-- я могу безболезненно их ещё и на VPS разместить, о чём прежде я и не
задумывался и вообще забыл что была только одна точка отказа.

    [оставить комментарий]