package bootstrap import ( "os" "os/exec" "path/filepath" "runtime" "strings" "code.gitea.io/sdk/gitea" "gopkg.in/yaml.v3" ) // FirstUpper 字符串首字母大写 func FirstUpper(s string) string { if s == "" { return "" } return strings.ToUpper(s[:1]) + s[1:] } type GiteaClient struct { client *gitea.Client } func NewGiteaClient(addr string) (*GiteaClient, error) { client, err := gitea.NewClient(addr) if err != nil { return nil, err } return &GiteaClient{client: client}, nil } func (c *GiteaClient) GetLatestCommit(owner, repoName string) (*gitea.Commit, error) { commits, _, err := c.client.ListRepoCommits(owner, repoName, gitea.ListCommitOptions{ ListOptions: gitea.ListOptions{ Page: 1, PageSize: 1, }, }) if err != nil { return nil, err } return commits[0], nil } type EasYaml struct { } func NewEasYaml() *EasYaml { return &EasYaml{} } func (y *EasYaml) Read(filename string, ptr interface{}) error { body, err := os.ReadFile(filename) if err != nil { return err } if err := yaml.Unmarshal(body, ptr); err != nil { return err } return nil } func (y *EasYaml) Write(filename string, ptr interface{}) error { body, err := yaml.Marshal(ptr) if err != nil { return err } return os.WriteFile(filename, body, os.ModePerm) } type Runtime struct { } func NewRuntime() *Runtime { return &Runtime{} } func (r *Runtime) Exec(cmd string, args ...string) (output string, err error) { command := exec.Command(cmd, args...) body, err := command.Output() if err != nil { return "", err } return string(body), nil } type GOOS string const ( Linux GOOS = "linux" Windows GOOS = "windows" Darwin GOOS = "darwin" Freebsd GOOS = "freebsd" ) // GetGOOS get GOOS value func (r *Runtime) GetGOOS() GOOS { return GOOS(runtime.GOOS) } // GetHomeDir get home directory func (r *Runtime) GetHomeDir() string { switch r.GetGOOS() { case Linux: return os.Getenv("HOME") case Windows: return os.Getenv("USERPROFILE") default: return os.Getenv("HOME") } } // ReplaceEachSlash replacing each slash ('/') character func (r *Runtime) ReplaceEachSlash(filename string) string { return filepath.FromSlash(filename) }