lure/pkg/gen/pip.go

58 lines
982 B
Go

package gen
import (
_ "embed"
"fmt"
"io"
"net/http"
"path"
"text/template"
)
//go:embed tmpls/pip.tmpl.sh
var pipTmpl string
type PipOptions struct {
Name string
Version string
Description string
}
func Pip(w io.Writer, opts PipOptions) error {
tmpl, err := template.New("pip").
Funcs(funcs).
Parse(pipTmpl)
if err != nil {
return err
}
params := map[string]any{
"name": opts.Name,
"version": opts.Version,
"description": opts.Description,
}
url := fmt.Sprintf(
"https://files.pythonhosted.org/packages/source/%s/%s/%s-%s.tar.gz",
opts.Name[:1],
opts.Name,
opts.Name,
opts.Version,
)
res, err := http.Head(url)
if err != nil {
return err
}
dir := path.Dir(res.Request.URL.Path)
checksum := path.Base(dir)
dir = path.Dir(dir)
checksum = path.Base(dir) + checksum
dir = path.Dir(dir)
checksum = path.Base(dir) + checksum
params["checksum"] = "blake2b-256:" + checksum
return tmpl.Execute(w, params)
}