2021-12-28 20:42:51 +08:00
|
|
|
package git
|
|
|
|
|
|
|
|
import (
|
|
|
|
"encoding/base64"
|
|
|
|
"errors"
|
|
|
|
"net/http"
|
|
|
|
|
|
|
|
"code.gitea.io/sdk/gitea"
|
|
|
|
)
|
|
|
|
|
|
|
|
var cli *gitea.Client
|
|
|
|
|
|
|
|
func init() {
|
|
|
|
var err error
|
2021-12-29 20:24:21 +08:00
|
|
|
cli, err = gitea.NewClient("http://gitea:3000/", gitea.SetToken("4322b0d361004db5dcea1741417f9e014a0f428f"))
|
2021-12-28 20:42:51 +08:00
|
|
|
if err != nil {
|
|
|
|
panic(err)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// DefaultRealConfigFilePath 默认原始配置文件路径
|
|
|
|
const DefaultRealConfigFilePath = ".drone.yml"
|
|
|
|
|
|
|
|
// Client git 客户端
|
|
|
|
type Client struct {
|
|
|
|
namespace string
|
|
|
|
repo string
|
|
|
|
ref string
|
|
|
|
realConfigPath string
|
|
|
|
}
|
|
|
|
|
|
|
|
// New 创建 git 客户端
|
|
|
|
func New(namespace string, repo string, ref string, configPath string) Client {
|
|
|
|
return Client{
|
|
|
|
namespace: namespace,
|
|
|
|
repo: repo,
|
|
|
|
ref: ref,
|
|
|
|
realConfigPath: configPath,
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// GetFileContent 获取文件内容
|
|
|
|
func (c Client) GetFileContent(filepath string) (string, error) {
|
|
|
|
ret, resp, err := cli.GetContents(c.namespace, c.repo, c.ref, filepath)
|
|
|
|
if err != nil {
|
|
|
|
return "", err
|
|
|
|
}
|
|
|
|
if resp.StatusCode != http.StatusOK {
|
|
|
|
return "", errors.New("gitea fail")
|
|
|
|
}
|
|
|
|
|
|
|
|
fileContent, err := base64.StdEncoding.DecodeString(*ret.Content)
|
|
|
|
if err != nil {
|
|
|
|
return "", err
|
|
|
|
}
|
|
|
|
return string(fileContent), nil
|
|
|
|
}
|
|
|
|
|
|
|
|
// GetRealConfig 获取原始配置文件
|
|
|
|
func (c Client) GetRealConfig() (string, error) {
|
|
|
|
filePath := DefaultRealConfigFilePath
|
|
|
|
if c.realConfigPath == "" {
|
|
|
|
filePath = c.realConfigPath
|
|
|
|
}
|
|
|
|
return c.GetFileContent(filePath)
|
|
|
|
}
|
|
|
|
|
|
|
|
func (c Client) GetCommitModifiedFileList() ([]string, error) {
|
|
|
|
commit, resp, err := cli.GetSingleCommit(c.namespace, c.repo, c.ref)
|
|
|
|
if err != nil {
|
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
if resp.StatusCode != http.StatusOK {
|
|
|
|
return nil, errors.New("gitea fail")
|
|
|
|
}
|
|
|
|
|
|
|
|
modifiedFileList := make([]string, len(commit.Files))
|
|
|
|
for i, file := range commit.Files {
|
|
|
|
modifiedFileList[i] = file.Filename
|
|
|
|
}
|
|
|
|
return modifiedFileList, nil
|
|
|
|
}
|