mirror of
https://github.com/MichaelMure/git-bug.git
synced 2024-12-15 02:01:43 +03:00
125 lines
2.9 KiB
Go
125 lines
2.9 KiB
Go
|
package github
|
||
|
|
||
|
import (
|
||
|
"context"
|
||
|
"fmt"
|
||
|
|
||
|
"github.com/MichaelMure/git-bug/bridge/core"
|
||
|
"github.com/MichaelMure/git-bug/cache"
|
||
|
"github.com/shurcooL/githubv4"
|
||
|
)
|
||
|
|
||
|
type githubImporter struct{}
|
||
|
|
||
|
func (*githubImporter) ImportAll(repo *cache.RepoCache, conf core.Configuration) error {
|
||
|
client := buildClient(conf)
|
||
|
|
||
|
type Event struct {
|
||
|
CreatedAt githubv4.DateTime
|
||
|
Actor struct {
|
||
|
Login githubv4.String
|
||
|
AvatarUrl githubv4.String
|
||
|
}
|
||
|
}
|
||
|
|
||
|
var q struct {
|
||
|
Repository struct {
|
||
|
Issues struct {
|
||
|
Nodes []struct {
|
||
|
Title string
|
||
|
Timeline struct {
|
||
|
Nodes []struct {
|
||
|
Typename githubv4.String `graphql:"__typename"`
|
||
|
|
||
|
// Issue
|
||
|
IssueComment struct {
|
||
|
Author struct {
|
||
|
Login githubv4.String
|
||
|
AvatarUrl githubv4.String
|
||
|
}
|
||
|
BodyText githubv4.String
|
||
|
CreatedAt githubv4.DateTime
|
||
|
|
||
|
// TODO: edition
|
||
|
} `graphql:"... on IssueComment"`
|
||
|
|
||
|
// Label
|
||
|
LabeledEvent struct {
|
||
|
Event
|
||
|
Label struct {
|
||
|
Color githubv4.String
|
||
|
Name githubv4.String
|
||
|
}
|
||
|
} `graphql:"... on LabeledEvent"`
|
||
|
UnlabeledEvent struct {
|
||
|
Event
|
||
|
Label struct {
|
||
|
Color githubv4.String
|
||
|
Name githubv4.String
|
||
|
}
|
||
|
} `graphql:"... on UnlabeledEvent"`
|
||
|
|
||
|
// Status
|
||
|
ClosedEvent struct {
|
||
|
Event
|
||
|
} `graphql:"... on ClosedEvent"`
|
||
|
ReopenedEvent struct {
|
||
|
Event
|
||
|
} `graphql:"... on ReopenedEvent"`
|
||
|
|
||
|
// Title
|
||
|
RenamedTitleEvent struct {
|
||
|
Event
|
||
|
CurrentTitle githubv4.String
|
||
|
PreviousTitle githubv4.String
|
||
|
} `graphql:"... on RenamedTitleEvent"`
|
||
|
}
|
||
|
PageInfo struct {
|
||
|
EndCursor githubv4.String
|
||
|
HasNextPage bool
|
||
|
}
|
||
|
} `graphql:"timeline(first: $timelineFirst, after: $timelineAfter)"`
|
||
|
}
|
||
|
PageInfo struct {
|
||
|
EndCursor githubv4.String
|
||
|
HasNextPage bool
|
||
|
}
|
||
|
} `graphql:"issues(first: $issueFirst, after: $issueAfter)"`
|
||
|
} `graphql:"repository(owner: $owner, name: $name)"`
|
||
|
}
|
||
|
|
||
|
variables := map[string]interface{}{
|
||
|
"owner": githubv4.String(conf[keyUser]),
|
||
|
"name": githubv4.String(conf[keyProject]),
|
||
|
"issueFirst": githubv4.Int(1),
|
||
|
"issueAfter": (*githubv4.String)(nil),
|
||
|
"timelineFirst": githubv4.Int(10),
|
||
|
"timelineAfter": (*githubv4.String)(nil),
|
||
|
}
|
||
|
|
||
|
for {
|
||
|
err := client.Query(context.TODO(), &q, variables)
|
||
|
if err != nil {
|
||
|
return err
|
||
|
}
|
||
|
|
||
|
for _, event := range q.Repository.Issues.Nodes[0].Timeline.Nodes {
|
||
|
fmt.Println(event)
|
||
|
}
|
||
|
|
||
|
if !q.Repository.Issues.Nodes[0].Timeline.PageInfo.HasNextPage {
|
||
|
break
|
||
|
}
|
||
|
variables["timelineAfter"] = githubv4.NewString(q.Repository.Issues.Nodes[0].Timeline.PageInfo.EndCursor)
|
||
|
}
|
||
|
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
func (*githubImporter) Import(repo *cache.RepoCache, conf core.Configuration, id string) error {
|
||
|
fmt.Println(conf)
|
||
|
fmt.Println("IMPORT")
|
||
|
|
||
|
return nil
|
||
|
}
|