✨ feat(spx): 按 git origin 支持 GitHub 仓库,state 评论改成隐藏注释格式,新增 issue view / pr view / pr create
This commit is contained in:
1 parent
64d5961b62
commit
c90d84d7f2
17 files changed
+2683
-400
No files matched your search
@@ -0,0 +1,90 @@
|
||||
// Package forge talks to the code host a repo lives on, Gitea or GitHub, through one [Forge] interface, so spx
|
||||
// commands work the same on either.
|
||||
package forge
|
||||
|
||||
import "strings"
|
||||
|
||||
// Kind names a forge flavor.
|
||||
type Kind string
|
||||
|
||||
const (
|
||||
KindGitea Kind = "gitea"
|
||||
KindGitHub Kind = "github"
|
||||
)
|
||||
|
||||
// KindForHost tells which forge serves `host`: only `github.com` is GitHub, every other host is taken as Gitea.
|
||||
func KindForHost(host string) Kind {
|
||||
if strings.EqualFold(host, "github.com") {
|
||||
return KindGitHub
|
||||
}
|
||||
return KindGitea
|
||||
}
|
||||
|
||||
// Issue is the part of an issue spx reads; its JSON form is what `spx issue view --json` prints.
|
||||
type Issue struct {
|
||||
Number int `json:"number"`
|
||||
Title string `json:"title"`
|
||||
Body string `json:"body"`
|
||||
State string `json:"state"`
|
||||
Author string `json:"author"`
|
||||
Assignees []string `json:"assignees"`
|
||||
HTMLURL string `json:"html_url"`
|
||||
}
|
||||
|
||||
// Comment is one comment on an issue or pull request.
|
||||
type Comment struct {
|
||||
ID int64 `json:"id"`
|
||||
Author string `json:"author"`
|
||||
Body string `json:"body"`
|
||||
CreatedAt string `json:"created_at"`
|
||||
HTMLURL string `json:"html_url"`
|
||||
}
|
||||
|
||||
// BranchRef is one side of a pull request: the branch and the commit it pointed at.
|
||||
type BranchRef struct {
|
||||
Branch string `json:"branch"`
|
||||
SHA string `json:"sha"`
|
||||
}
|
||||
|
||||
// PullRequest is the part of a pull request spx reads; its JSON form is what `spx pr view --json` prints.
|
||||
type PullRequest struct {
|
||||
Number int `json:"number"`
|
||||
Title string `json:"title"`
|
||||
Body string `json:"body"`
|
||||
State string `json:"state"`
|
||||
Merged bool `json:"merged"`
|
||||
Author string `json:"author"`
|
||||
Head BranchRef `json:"head"`
|
||||
Base BranchRef `json:"base"`
|
||||
HTMLURL string `json:"html_url"`
|
||||
}
|
||||
|
||||
// NewPullRequest is what it takes to open a pull request from branch `Head` into branch `Base`.
|
||||
type NewPullRequest struct {
|
||||
Title string
|
||||
Body string
|
||||
Head string
|
||||
Base string
|
||||
}
|
||||
|
||||
// Forge is one repo on a code host, with the few calls spx makes against it.
|
||||
//
|
||||
// Pull requests share numbering with issues on both forges, so the issue and comment calls also work on a pull
|
||||
// request number; that is how pull request comments are read and posted.
|
||||
type Forge interface {
|
||||
// Kind tells which forge this is.
|
||||
Kind() Kind
|
||||
// CurrentUserLogin returns the login of the user the token belongs to.
|
||||
CurrentUserLogin() (string, error)
|
||||
// CreateIssue opens an issue assigned to `assignees`.
|
||||
CreateIssue(title, body string, assignees []string) (*Issue, error)
|
||||
GetIssue(number int) (*Issue, error)
|
||||
UpdateIssueBody(number int, body string) error
|
||||
// ListIssueComments returns every comment, oldest first, reading all pages.
|
||||
ListIssueComments(number int) ([]Comment, error)
|
||||
CreateIssueComment(number int, body string) (*Comment, error)
|
||||
GetPullRequest(number int) (*PullRequest, error)
|
||||
CreatePullRequest(pr NewPullRequest) (*PullRequest, error)
|
||||
// DefaultBranch returns the repo's default branch, the usual base of a new pull request.
|
||||
DefaultBranch() (string, error)
|
||||
}
|
||||
Reference in new issue
Block a user