66 lines
1.3 KiB
Go
66 lines
1.3 KiB
Go
//go:build ignore
|
|
|
|
package main
|
|
|
|
import (
|
|
"flag"
|
|
"fmt"
|
|
"io"
|
|
"net/http"
|
|
"os"
|
|
"regexp"
|
|
|
|
"github.com/ayn2op/arikawa/v3/api"
|
|
)
|
|
|
|
const format = `// GENERATED BY go generate; DO NOT EDIT.
|
|
|
|
package %s
|
|
|
|
const clientBuildNumber = %s
|
|
`
|
|
|
|
var buildNumberRegex = regexp.MustCompile(`"BUILD_NUMBER":\s*"(\d+)"`)
|
|
|
|
func fetchBuildNumber() (string, error) {
|
|
resp, err := http.Get(api.BaseEndpoint + "/login")
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
defer resp.Body.Close()
|
|
|
|
if resp.StatusCode < http.StatusOK || resp.StatusCode >= http.StatusMultipleChoices {
|
|
return "", fmt.Errorf("failed to fetch login page; status=%q", resp.Status)
|
|
}
|
|
|
|
body, err := io.ReadAll(resp.Body)
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
|
|
matches := buildNumberRegex.FindSubmatch(body)
|
|
if len(matches) < 2 {
|
|
return "", fmt.Errorf("failed to find build number; matches=%v", matches)
|
|
}
|
|
return string(matches[1]), nil
|
|
}
|
|
|
|
func main() {
|
|
out := flag.String("out", "generated.go", "out filename")
|
|
flag.Parse()
|
|
|
|
buildNumber, err := fetchBuildNumber()
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
packageName := os.Getenv("GOPACKAGE")
|
|
if packageName == "" {
|
|
panic("GOPACKAGE is not set; run with go generate")
|
|
}
|
|
|
|
content := fmt.Appendf(nil, format, packageName, buildNumber)
|
|
if err := os.WriteFile(*out, content, 0644); err != nil {
|
|
panic(err)
|
|
}
|
|
}
|