Что: f110400deb3082f8a7c551479153143fb2808e25
Когда: 2023-08-14 18:17:01+03:00
Темы: 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 разместить, о чём прежде я и не задумывался и вообще забыл что была только одна точка отказа.
Сгенерирован: SGBlog 0.34.0