This commit is contained in:
Dev
2025-09-15 04:02:11 +03:00
commit fc86288f06
24 changed files with 2938 additions and 0 deletions

98
internal/github/client.go Normal file
View File

@@ -0,0 +1,98 @@
package github
import (
"context"
"fmt"
"time"
"github.com/google/go-github/v56/github"
"golang.org/x/oauth2"
)
type Client struct {
client *github.Client
owner string
repo string
}
type Content struct {
Path string
Content string
SHA string
LastUpdated time.Time
}
func NewClient(token, owner, repo string) *Client {
ctx := context.Background()
ts := oauth2.StaticTokenSource(
&oauth2.Token{AccessToken: token},
)
tc := oauth2.NewClient(ctx, ts)
client := github.NewClient(tc)
return &Client{
client: client,
owner: owner,
repo: repo,
}
}
func (c *Client) GetFileContent(path string) (*Content, error) {
ctx := context.Background()
fileContent, _, _, err := c.client.Repositories.GetContents(ctx, c.owner, c.repo, path, nil)
if err != nil {
return nil, fmt.Errorf("failed to get file content: %w", err)
}
content, err := fileContent.GetContent()
if err != nil {
return nil, fmt.Errorf("failed to decode content: %w", err)
}
return &Content{
Path: path,
Content: content,
SHA: fileContent.GetSHA(),
LastUpdated: time.Now(),
}, nil
}
func (c *Client) ListDirectory(path string) ([]*Content, error) {
ctx := context.Background()
_, contents, _, err := c.client.Repositories.GetContents(ctx, c.owner, c.repo, path, nil)
if err != nil {
return nil, fmt.Errorf("failed to list directory: %w", err)
}
var result []*Content
for _, content := range contents {
if content.GetType() == "file" {
fileContent, err := c.GetFileContent(content.GetPath())
if err != nil {
continue
}
result = append(result, fileContent)
}
}
return result, nil
}
func (c *Client) GetLastCommit() (*github.RepositoryCommit, error) {
ctx := context.Background()
commits, _, err := c.client.Repositories.ListCommits(ctx, c.owner, c.repo, &github.CommitsListOptions{
ListOptions: github.ListOptions{PerPage: 1},
})
if err != nil {
return nil, fmt.Errorf("failed to get last commit: %w", err)
}
if len(commits) == 0 {
return nil, fmt.Errorf("no commits found")
}
return commits[0], nil
}