in tools/releaser/main.go [493:552]
func parseZigUpstream(defsPath string) (zigUpstream, error) {
ret := zigUpstream{}
data, err := os.ReadFile(defsPath)
if err != nil {
return zigUpstream{}, err
}
parsed, err := bzl.Parse(defsPath, data)
if err != nil {
return zigUpstream{}, err
}
var nightlyFormat, releaseFormat string
for _, expr := range parsed.Stmt {
def, ok := expr.(*bzl.AssignExpr)
if !ok {
continue
}
key := def.LHS.(*bzl.Ident)
var to *string
switch key.Name {
case "VERSION":
to = &ret.version
case "URL_FORMAT_RELEASE":
to = &releaseFormat
case "URL_FORMAT_NIGHTLY":
to = &nightlyFormat
default:
continue
}
value, ok := def.RHS.(*bzl.StringExpr)
if !ok {
return zigUpstream{}, errors.New("got a non-string expression")
}
*to = value.Value
}
if ret.version == "" {
return zigUpstream{}, errors.New("VERSION not found")
}
if strings.Contains(ret.version, "dev") {
ret.urlTemplate = nightlyFormat
} else {
ret.urlTemplate = releaseFormat
}
if ret.urlTemplate == "" {
return zigUpstream{}, fmt.Errorf("url format for %q not found", ret.version)
}
ret.urlTemplate = strings.Replace(ret.urlTemplate,
"https://ziglang.org/",
"https://mirror.bazel.build/ziglang.org/",
1,
)
return ret, nil
}