mirror of
https://gitea.com/gitea/tea.git
synced 2026-04-26 02:03:30 +02:00
Compare commits
2 Commits
lunny/fix_
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
892905d482 | ||
|
|
5103496232 |
@@ -39,7 +39,7 @@ jobs:
|
|||||||
make unit-test-coverage
|
make unit-test-coverage
|
||||||
services:
|
services:
|
||||||
gitea:
|
gitea:
|
||||||
image: docker.gitea.com/gitea:1.26.0
|
image: docker.gitea.com/gitea:1.26.1
|
||||||
cmd:
|
cmd:
|
||||||
- bash
|
- bash
|
||||||
- -c
|
- -c
|
||||||
|
|||||||
@@ -61,12 +61,20 @@ func runReleaseAttachmentDelete(_ stdctx.Context, cmd *cli.Command) error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
existing, _, err := client.ListReleaseAttachments(ctx.Owner, ctx.Repo, release.ID, gitea.ListReleaseAttachmentsOptions{
|
var existing []*gitea.Attachment
|
||||||
ListOptions: gitea.ListOptions{Page: -1},
|
for page := 1; ; {
|
||||||
|
page_attachments, resp, err := client.ListReleaseAttachments(ctx.Owner, ctx.Repo, release.ID, gitea.ListReleaseAttachmentsOptions{
|
||||||
|
ListOptions: gitea.ListOptions{Page: page, PageSize: 50},
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
existing = append(existing, page_attachments...)
|
||||||
|
if resp == nil || resp.NextPage == 0 {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
page = resp.NextPage
|
||||||
|
}
|
||||||
|
|
||||||
for _, name := range ctx.Args().Slice()[1:] {
|
for _, name := range ctx.Args().Slice()[1:] {
|
||||||
var attachment *gitea.Attachment
|
var attachment *gitea.Attachment
|
||||||
|
|||||||
13
cmd/pulls.go
13
cmd/pulls.go
@@ -109,11 +109,20 @@ func runPullDetail(_ stdctx.Context, cmd *cli.Command, index string) error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
reviews, _, err := client.ListPullReviews(ctx.Owner, ctx.Repo, idx, gitea.ListPullReviewsOptions{
|
var reviews []*gitea.PullReview
|
||||||
ListOptions: gitea.ListOptions{Page: -1},
|
for page := 1; ; {
|
||||||
|
page_reviews, resp, err := client.ListPullReviews(ctx.Owner, ctx.Repo, idx, gitea.ListPullReviewsOptions{
|
||||||
|
ListOptions: gitea.ListOptions{Page: page, PageSize: 50},
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Printf("error while loading reviews: %v\n", err)
|
fmt.Printf("error while loading reviews: %v\n", err)
|
||||||
|
break
|
||||||
|
}
|
||||||
|
reviews = append(reviews, page_reviews...)
|
||||||
|
if resp == nil || resp.NextPage == 0 {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
page = resp.NextPage
|
||||||
}
|
}
|
||||||
|
|
||||||
if ctx.IsSet("output") {
|
if ctx.IsSet("output") {
|
||||||
|
|||||||
@@ -11,13 +11,14 @@ import (
|
|||||||
|
|
||||||
// GetReleaseByTag finds a release by its tag name.
|
// GetReleaseByTag finds a release by its tag name.
|
||||||
func GetReleaseByTag(owner, repo, tag string, client *gitea.Client) (*gitea.Release, error) {
|
func GetReleaseByTag(owner, repo, tag string, client *gitea.Client) (*gitea.Release, error) {
|
||||||
rl, _, err := client.ListReleases(owner, repo, gitea.ListReleasesOptions{
|
for page := 1; ; {
|
||||||
ListOptions: gitea.ListOptions{Page: -1},
|
rl, resp, err := client.ListReleases(owner, repo, gitea.ListReleasesOptions{
|
||||||
|
ListOptions: gitea.ListOptions{Page: page, PageSize: 50},
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
if len(rl) == 0 {
|
if page == 1 && len(rl) == 0 {
|
||||||
return nil, fmt.Errorf("repo does not have any release")
|
return nil, fmt.Errorf("repo does not have any release")
|
||||||
}
|
}
|
||||||
for _, r := range rl {
|
for _, r := range rl {
|
||||||
@@ -25,5 +26,10 @@ func GetReleaseByTag(owner, repo, tag string, client *gitea.Client) (*gitea.Rele
|
|||||||
return r, nil
|
return r, nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if resp == nil || resp.NextPage == 0 {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
page = resp.NextPage
|
||||||
|
}
|
||||||
return nil, fmt.Errorf("release tag does not exist")
|
return nil, fmt.Errorf("release tag does not exist")
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -89,6 +89,14 @@ func runWebhooksCreate(ctx stdctx.Context, cmd *cli.Command) error {
|
|||||||
config["secret"] = secret
|
config["secret"] = secret
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if branchFilter != "" {
|
||||||
|
config["branch_filter"] = branchFilter
|
||||||
|
}
|
||||||
|
|
||||||
|
if authHeader != "" {
|
||||||
|
config["authorization_header"] = authHeader
|
||||||
|
}
|
||||||
|
|
||||||
var hook *gitea.Hook
|
var hook *gitea.Hook
|
||||||
if c.IsGlobal {
|
if c.IsGlobal {
|
||||||
return fmt.Errorf("global webhooks not yet supported in this version")
|
return fmt.Errorf("global webhooks not yet supported in this version")
|
||||||
@@ -98,8 +106,6 @@ func runWebhooksCreate(ctx stdctx.Context, cmd *cli.Command) error {
|
|||||||
Config: config,
|
Config: config,
|
||||||
Events: events,
|
Events: events,
|
||||||
Active: active,
|
Active: active,
|
||||||
BranchFilter: branchFilter,
|
|
||||||
AuthorizationHeader: authHeader,
|
|
||||||
})
|
})
|
||||||
} else {
|
} else {
|
||||||
hook, _, err = client.CreateRepoHook(c.Owner, c.Repo, gitea.CreateHookOption{
|
hook, _, err = client.CreateRepoHook(c.Owner, c.Repo, gitea.CreateHookOption{
|
||||||
@@ -107,8 +113,6 @@ func runWebhooksCreate(ctx stdctx.Context, cmd *cli.Command) error {
|
|||||||
Config: config,
|
Config: config,
|
||||||
Events: events,
|
Events: events,
|
||||||
Active: active,
|
Active: active,
|
||||||
BranchFilter: branchFilter,
|
|
||||||
AuthorizationHeader: authHeader,
|
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
@@ -79,6 +79,8 @@ func TestWebhookConfigConstruction(t *testing.T) {
|
|||||||
name string
|
name string
|
||||||
url string
|
url string
|
||||||
secret string
|
secret string
|
||||||
|
branchFilter string
|
||||||
|
authHeader string
|
||||||
expectedKeys []string
|
expectedKeys []string
|
||||||
expectedValues map[string]string
|
expectedValues map[string]string
|
||||||
}{
|
}{
|
||||||
@@ -104,16 +106,44 @@ func TestWebhookConfigConstruction(t *testing.T) {
|
|||||||
"secret": "my-secret",
|
"secret": "my-secret",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
name: "Config with branch filter",
|
||||||
|
url: "https://example.com/webhook",
|
||||||
|
branchFilter: "main,develop",
|
||||||
|
expectedKeys: []string{"url", "http_method", "content_type", "branch_filter"},
|
||||||
|
expectedValues: map[string]string{
|
||||||
|
"url": "https://example.com/webhook",
|
||||||
|
"http_method": "post",
|
||||||
|
"content_type": "json",
|
||||||
|
"branch_filter": "main,develop",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Config with auth header",
|
||||||
|
url: "https://example.com/webhook",
|
||||||
|
authHeader: "Bearer token123",
|
||||||
|
expectedKeys: []string{"url", "http_method", "content_type", "authorization_header"},
|
||||||
|
expectedValues: map[string]string{
|
||||||
|
"url": "https://example.com/webhook",
|
||||||
|
"http_method": "post",
|
||||||
|
"content_type": "json",
|
||||||
|
"authorization_header": "Bearer token123",
|
||||||
|
},
|
||||||
|
},
|
||||||
{
|
{
|
||||||
name: "Complete config",
|
name: "Complete config",
|
||||||
url: "https://example.com/webhook",
|
url: "https://example.com/webhook",
|
||||||
secret: "secret123",
|
secret: "secret123",
|
||||||
expectedKeys: []string{"url", "http_method", "content_type", "secret"},
|
branchFilter: "main",
|
||||||
|
authHeader: "X-Token: abc",
|
||||||
|
expectedKeys: []string{"url", "http_method", "content_type", "secret", "branch_filter", "authorization_header"},
|
||||||
expectedValues: map[string]string{
|
expectedValues: map[string]string{
|
||||||
"url": "https://example.com/webhook",
|
"url": "https://example.com/webhook",
|
||||||
"http_method": "post",
|
"http_method": "post",
|
||||||
"content_type": "json",
|
"content_type": "json",
|
||||||
"secret": "secret123",
|
"secret": "secret123",
|
||||||
|
"branch_filter": "main",
|
||||||
|
"authorization_header": "X-Token: abc",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
@@ -129,6 +159,12 @@ func TestWebhookConfigConstruction(t *testing.T) {
|
|||||||
if tt.secret != "" {
|
if tt.secret != "" {
|
||||||
config["secret"] = tt.secret
|
config["secret"] = tt.secret
|
||||||
}
|
}
|
||||||
|
if tt.branchFilter != "" {
|
||||||
|
config["branch_filter"] = tt.branchFilter
|
||||||
|
}
|
||||||
|
if tt.authHeader != "" {
|
||||||
|
config["authorization_header"] = tt.authHeader
|
||||||
|
}
|
||||||
|
|
||||||
// Check all expected keys exist
|
// Check all expected keys exist
|
||||||
for _, key := range tt.expectedKeys {
|
for _, key := range tt.expectedKeys {
|
||||||
@@ -153,8 +189,6 @@ func TestWebhookCreateOptions(t *testing.T) {
|
|||||||
events []string
|
events []string
|
||||||
active bool
|
active bool
|
||||||
config map[string]string
|
config map[string]string
|
||||||
branchFilter string
|
|
||||||
authHeader string
|
|
||||||
}{
|
}{
|
||||||
{
|
{
|
||||||
name: "Gitea webhook",
|
name: "Gitea webhook",
|
||||||
@@ -166,8 +200,6 @@ func TestWebhookCreateOptions(t *testing.T) {
|
|||||||
"http_method": "post",
|
"http_method": "post",
|
||||||
"content_type": "json",
|
"content_type": "json",
|
||||||
},
|
},
|
||||||
branchFilter: "main",
|
|
||||||
authHeader: "X-Token: abc",
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "Slack webhook",
|
name: "Slack webhook",
|
||||||
@@ -200,16 +232,12 @@ func TestWebhookCreateOptions(t *testing.T) {
|
|||||||
Config: tt.config,
|
Config: tt.config,
|
||||||
Events: tt.events,
|
Events: tt.events,
|
||||||
Active: tt.active,
|
Active: tt.active,
|
||||||
BranchFilter: tt.branchFilter,
|
|
||||||
AuthorizationHeader: tt.authHeader,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
assert.Equal(t, gitea.HookType(tt.webhookType), option.Type)
|
assert.Equal(t, gitea.HookType(tt.webhookType), option.Type)
|
||||||
assert.Equal(t, tt.events, option.Events)
|
assert.Equal(t, tt.events, option.Events)
|
||||||
assert.Equal(t, tt.active, option.Active)
|
assert.Equal(t, tt.active, option.Active)
|
||||||
assert.Equal(t, tt.config, option.Config)
|
assert.Equal(t, tt.config, option.Config)
|
||||||
assert.Equal(t, tt.branchFilter, option.BranchFilter)
|
|
||||||
assert.Equal(t, tt.authHeader, option.AuthorizationHeader)
|
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -97,14 +97,11 @@ func runWebhooksUpdate(ctx stdctx.Context, cmd *cli.Command) error {
|
|||||||
if cmd.IsSet("secret") {
|
if cmd.IsSet("secret") {
|
||||||
config["secret"] = cmd.String("secret")
|
config["secret"] = cmd.String("secret")
|
||||||
}
|
}
|
||||||
branchFilter := hook.BranchFilter
|
|
||||||
if cmd.IsSet("branch-filter") {
|
if cmd.IsSet("branch-filter") {
|
||||||
branchFilter = cmd.String("branch-filter")
|
config["branch_filter"] = cmd.String("branch-filter")
|
||||||
}
|
}
|
||||||
|
|
||||||
authHeader := hook.AuthorizationHeader
|
|
||||||
if cmd.IsSet("authorization-header") {
|
if cmd.IsSet("authorization-header") {
|
||||||
authHeader = cmd.String("authorization-header")
|
config["authorization_header"] = cmd.String("authorization-header")
|
||||||
}
|
}
|
||||||
|
|
||||||
// Update events if specified
|
// Update events if specified
|
||||||
@@ -132,16 +129,12 @@ func runWebhooksUpdate(ctx stdctx.Context, cmd *cli.Command) error {
|
|||||||
Config: config,
|
Config: config,
|
||||||
Events: events,
|
Events: events,
|
||||||
Active: &active,
|
Active: &active,
|
||||||
BranchFilter: branchFilter,
|
|
||||||
AuthorizationHeader: authHeader,
|
|
||||||
})
|
})
|
||||||
} else {
|
} else {
|
||||||
_, err = client.EditRepoHook(c.Owner, c.Repo, int64(webhookID), gitea.EditHookOption{
|
_, err = client.EditRepoHook(c.Owner, c.Repo, int64(webhookID), gitea.EditHookOption{
|
||||||
Config: config,
|
Config: config,
|
||||||
Events: events,
|
Events: events,
|
||||||
Active: &active,
|
Active: &active,
|
||||||
BranchFilter: branchFilter,
|
|
||||||
AuthorizationHeader: authHeader,
|
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
@@ -130,6 +130,8 @@ func TestUpdateConfigPreservation(t *testing.T) {
|
|||||||
originalConfig := map[string]string{
|
originalConfig := map[string]string{
|
||||||
"url": "https://old.example.com/webhook",
|
"url": "https://old.example.com/webhook",
|
||||||
"secret": "old-secret",
|
"secret": "old-secret",
|
||||||
|
"branch_filter": "main",
|
||||||
|
"authorization_header": "Bearer old-token",
|
||||||
"http_method": "post",
|
"http_method": "post",
|
||||||
"content_type": "json",
|
"content_type": "json",
|
||||||
}
|
}
|
||||||
@@ -147,18 +149,37 @@ func TestUpdateConfigPreservation(t *testing.T) {
|
|||||||
expectedConfig: map[string]string{
|
expectedConfig: map[string]string{
|
||||||
"url": "https://new.example.com/webhook",
|
"url": "https://new.example.com/webhook",
|
||||||
"secret": "old-secret",
|
"secret": "old-secret",
|
||||||
|
"branch_filter": "main",
|
||||||
|
"authorization_header": "Bearer old-token",
|
||||||
"http_method": "post",
|
"http_method": "post",
|
||||||
"content_type": "json",
|
"content_type": "json",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "Update secret",
|
name: "Update secret and auth header",
|
||||||
updates: map[string]string{
|
updates: map[string]string{
|
||||||
"secret": "new-secret",
|
"secret": "new-secret",
|
||||||
|
"authorization_header": "X-Token: new-token",
|
||||||
},
|
},
|
||||||
expectedConfig: map[string]string{
|
expectedConfig: map[string]string{
|
||||||
"url": "https://old.example.com/webhook",
|
"url": "https://old.example.com/webhook",
|
||||||
"secret": "new-secret",
|
"secret": "new-secret",
|
||||||
|
"branch_filter": "main",
|
||||||
|
"authorization_header": "X-Token: new-token",
|
||||||
|
"http_method": "post",
|
||||||
|
"content_type": "json",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Clear branch filter",
|
||||||
|
updates: map[string]string{
|
||||||
|
"branch_filter": "",
|
||||||
|
},
|
||||||
|
expectedConfig: map[string]string{
|
||||||
|
"url": "https://old.example.com/webhook",
|
||||||
|
"secret": "old-secret",
|
||||||
|
"branch_filter": "",
|
||||||
|
"authorization_header": "Bearer old-token",
|
||||||
"http_method": "post",
|
"http_method": "post",
|
||||||
"content_type": "json",
|
"content_type": "json",
|
||||||
},
|
},
|
||||||
@@ -169,6 +190,8 @@ func TestUpdateConfigPreservation(t *testing.T) {
|
|||||||
expectedConfig: map[string]string{
|
expectedConfig: map[string]string{
|
||||||
"url": "https://old.example.com/webhook",
|
"url": "https://old.example.com/webhook",
|
||||||
"secret": "old-secret",
|
"secret": "old-secret",
|
||||||
|
"branch_filter": "main",
|
||||||
|
"authorization_header": "Bearer old-token",
|
||||||
"http_method": "post",
|
"http_method": "post",
|
||||||
"content_type": "json",
|
"content_type": "json",
|
||||||
},
|
},
|
||||||
@@ -194,61 +217,6 @@ func TestUpdateConfigPreservation(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestUpdateBranchFilterAndAuthHeaderHandling(t *testing.T) {
|
|
||||||
tests := []struct {
|
|
||||||
name string
|
|
||||||
originalBranchFilter string
|
|
||||||
originalAuthHeader string
|
|
||||||
setBranchFilter bool
|
|
||||||
newBranchFilter string
|
|
||||||
setAuthorizationHeader bool
|
|
||||||
newAuthHeader string
|
|
||||||
expectedBranchFilter string
|
|
||||||
expectedAuthHeader string
|
|
||||||
}{
|
|
||||||
{
|
|
||||||
name: "Preserve values",
|
|
||||||
originalBranchFilter: "main",
|
|
||||||
originalAuthHeader: "Bearer old-token",
|
|
||||||
expectedBranchFilter: "main",
|
|
||||||
expectedAuthHeader: "Bearer old-token",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "Update branch filter",
|
|
||||||
originalBranchFilter: "main",
|
|
||||||
setBranchFilter: true,
|
|
||||||
newBranchFilter: "develop",
|
|
||||||
expectedBranchFilter: "develop",
|
|
||||||
expectedAuthHeader: "",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "Update authorization header",
|
|
||||||
originalAuthHeader: "Bearer old-token",
|
|
||||||
setAuthorizationHeader: true,
|
|
||||||
newAuthHeader: "X-Token: new-token",
|
|
||||||
expectedBranchFilter: "",
|
|
||||||
expectedAuthHeader: "X-Token: new-token",
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, tt := range tests {
|
|
||||||
t.Run(tt.name, func(t *testing.T) {
|
|
||||||
branchFilter := tt.originalBranchFilter
|
|
||||||
if tt.setBranchFilter {
|
|
||||||
branchFilter = tt.newBranchFilter
|
|
||||||
}
|
|
||||||
|
|
||||||
authHeader := tt.originalAuthHeader
|
|
||||||
if tt.setAuthorizationHeader {
|
|
||||||
authHeader = tt.newAuthHeader
|
|
||||||
}
|
|
||||||
|
|
||||||
assert.Equal(t, tt.expectedBranchFilter, branchFilter)
|
|
||||||
assert.Equal(t, tt.expectedAuthHeader, authHeader)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestUpdateEventsHandling(t *testing.T) {
|
func TestUpdateEventsHandling(t *testing.T) {
|
||||||
tests := []struct {
|
tests := []struct {
|
||||||
name string
|
name string
|
||||||
|
|||||||
@@ -180,19 +180,25 @@ func fetchIssueSelectables(login *config.Login, owner, repo string, done chan is
|
|||||||
r.MilestoneList[i] = m.Title
|
r.MilestoneList[i] = m.Title
|
||||||
}
|
}
|
||||||
|
|
||||||
labels, _, err := c.ListRepoLabels(owner, repo, gitea.ListLabelsOptions{
|
r.LabelMap = make(map[string]int64)
|
||||||
ListOptions: gitea.ListOptions{Page: -1},
|
r.LabelList = make([]string, 0)
|
||||||
|
for page := 1; ; {
|
||||||
|
labels, resp, err := c.ListRepoLabels(owner, repo, gitea.ListLabelsOptions{
|
||||||
|
ListOptions: gitea.ListOptions{Page: page, PageSize: 50},
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
r.Err = err
|
r.Err = err
|
||||||
done <- r
|
done <- r
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
r.LabelMap = make(map[string]int64)
|
for _, l := range labels {
|
||||||
r.LabelList = make([]string, len(labels))
|
|
||||||
for i, l := range labels {
|
|
||||||
r.LabelMap[l.Name] = l.ID
|
r.LabelMap[l.Name] = l.ID
|
||||||
r.LabelList[i] = l.Name
|
r.LabelList = append(r.LabelList, l.Name)
|
||||||
|
}
|
||||||
|
if resp == nil || resp.NextPage == 0 {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
page = resp.NextPage
|
||||||
}
|
}
|
||||||
|
|
||||||
done <- r
|
done <- r
|
||||||
|
|||||||
@@ -67,21 +67,13 @@ func WebhookDetails(hook *gitea.Hook) {
|
|||||||
if method, ok := hook.Config["http_method"]; ok {
|
if method, ok := hook.Config["http_method"]; ok {
|
||||||
fmt.Printf("- **HTTP Method**: %s\n", method)
|
fmt.Printf("- **HTTP Method**: %s\n", method)
|
||||||
}
|
}
|
||||||
branchFilter := hook.BranchFilter
|
if branchFilter, ok := hook.Config["branch_filter"]; ok && branchFilter != "" {
|
||||||
if branchFilter == "" {
|
|
||||||
branchFilter = hook.Config["branch_filter"]
|
|
||||||
}
|
|
||||||
if branchFilter != "" {
|
|
||||||
fmt.Printf("- **Branch Filter**: %s\n", branchFilter)
|
fmt.Printf("- **Branch Filter**: %s\n", branchFilter)
|
||||||
}
|
}
|
||||||
if _, hasSecret := hook.Config["secret"]; hasSecret {
|
if _, hasSecret := hook.Config["secret"]; hasSecret {
|
||||||
fmt.Printf("- **Secret**: (configured)\n")
|
fmt.Printf("- **Secret**: (configured)\n")
|
||||||
}
|
}
|
||||||
hasAuth := hook.AuthorizationHeader != ""
|
if _, hasAuth := hook.Config["authorization_header"]; hasAuth {
|
||||||
if !hasAuth {
|
|
||||||
_, hasAuth = hook.Config["authorization_header"]
|
|
||||||
}
|
|
||||||
if hasAuth {
|
|
||||||
fmt.Printf("- **Authorization Header**: (configured)\n")
|
fmt.Printf("- **Authorization Header**: (configured)\n")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -84,10 +84,10 @@ func TestWebhookDetails(t *testing.T) {
|
|||||||
"url": "https://example.com/webhook",
|
"url": "https://example.com/webhook",
|
||||||
"content_type": "json",
|
"content_type": "json",
|
||||||
"http_method": "post",
|
"http_method": "post",
|
||||||
|
"branch_filter": "main,develop",
|
||||||
"secret": "secret-value",
|
"secret": "secret-value",
|
||||||
|
"authorization_header": "Bearer token123",
|
||||||
},
|
},
|
||||||
BranchFilter: "main,develop",
|
|
||||||
AuthorizationHeader: "Bearer token123",
|
|
||||||
Events: []string{"push", "pull_request", "issues"},
|
Events: []string{"push", "pull_request", "issues"},
|
||||||
Active: true,
|
Active: true,
|
||||||
Created: now.Add(-24 * time.Hour),
|
Created: now.Add(-24 * time.Hour),
|
||||||
@@ -240,12 +240,14 @@ func TestWebhookConfigHandling(t *testing.T) {
|
|||||||
config: map[string]string{
|
config: map[string]string{
|
||||||
"url": "https://example.com/webhook",
|
"url": "https://example.com/webhook",
|
||||||
"secret": "my-secret",
|
"secret": "my-secret",
|
||||||
|
"authorization_header": "Bearer token",
|
||||||
"content_type": "json",
|
"content_type": "json",
|
||||||
"http_method": "post",
|
"http_method": "post",
|
||||||
|
"branch_filter": "main",
|
||||||
},
|
},
|
||||||
expectedURL: "https://example.com/webhook",
|
expectedURL: "https://example.com/webhook",
|
||||||
hasSecret: true,
|
hasSecret: true,
|
||||||
hasAuthHeader: false,
|
hasAuthHeader: true,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "Config with minimal fields",
|
name: "Config with minimal fields",
|
||||||
@@ -342,10 +344,10 @@ func TestWebhookDetailsFormatting(t *testing.T) {
|
|||||||
"url": "https://example.com/webhook",
|
"url": "https://example.com/webhook",
|
||||||
"content_type": "json",
|
"content_type": "json",
|
||||||
"http_method": "post",
|
"http_method": "post",
|
||||||
|
"branch_filter": "main,develop",
|
||||||
"secret": "secret-value",
|
"secret": "secret-value",
|
||||||
|
"authorization_header": "Bearer token123",
|
||||||
},
|
},
|
||||||
BranchFilter: "main,develop",
|
|
||||||
AuthorizationHeader: "Bearer token123",
|
|
||||||
Events: []string{"push", "pull_request", "issues"},
|
Events: []string{"push", "pull_request", "issues"},
|
||||||
Active: true,
|
Active: true,
|
||||||
Created: now.Add(-24 * time.Hour),
|
Created: now.Add(-24 * time.Hour),
|
||||||
@@ -377,8 +379,8 @@ func TestWebhookDetailsFormatting(t *testing.T) {
|
|||||||
assert.Equal(t, "https://example.com/webhook", hook.Config["url"])
|
assert.Equal(t, "https://example.com/webhook", hook.Config["url"])
|
||||||
assert.Equal(t, "json", hook.Config["content_type"])
|
assert.Equal(t, "json", hook.Config["content_type"])
|
||||||
assert.Equal(t, "post", hook.Config["http_method"])
|
assert.Equal(t, "post", hook.Config["http_method"])
|
||||||
assert.Equal(t, "main,develop", hook.BranchFilter)
|
assert.Equal(t, "main,develop", hook.Config["branch_filter"])
|
||||||
assert.Contains(t, hook.Config, "secret")
|
assert.Contains(t, hook.Config, "secret")
|
||||||
assert.Equal(t, "Bearer token123", hook.AuthorizationHeader)
|
assert.Contains(t, hook.Config, "authorization_header")
|
||||||
assert.Equal(t, []string{"push", "pull_request", "issues"}, hook.Events)
|
assert.Equal(t, []string{"push", "pull_request", "issues"}, hook.Events)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,8 +13,10 @@ import (
|
|||||||
// ResolveLabelNames returns a list of label IDs for a given list of label names
|
// ResolveLabelNames returns a list of label IDs for a given list of label names
|
||||||
func ResolveLabelNames(client *gitea.Client, owner, repo string, labelNames []string) ([]int64, error) {
|
func ResolveLabelNames(client *gitea.Client, owner, repo string, labelNames []string) ([]int64, error) {
|
||||||
labelIDs := make([]int64, 0, len(labelNames))
|
labelIDs := make([]int64, 0, len(labelNames))
|
||||||
labels, _, err := client.ListRepoLabels(owner, repo, gitea.ListLabelsOptions{
|
page := 1
|
||||||
ListOptions: gitea.ListOptions{Page: -1},
|
for {
|
||||||
|
labels, resp, err := client.ListRepoLabels(owner, repo, gitea.ListLabelsOptions{
|
||||||
|
ListOptions: gitea.ListOptions{Page: page, PageSize: 50},
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
@@ -24,6 +26,11 @@ func ResolveLabelNames(client *gitea.Client, owner, repo string, labelNames []st
|
|||||||
labelIDs = append(labelIDs, l.ID)
|
labelIDs = append(labelIDs, l.ID)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if resp == nil || resp.NextPage == 0 {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
page = resp.NextPage
|
||||||
|
}
|
||||||
return labelIDs, nil
|
return labelIDs, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -166,12 +166,20 @@ func generateToken(login config.Login, user, pass, otp, scopes string) (string,
|
|||||||
}
|
}
|
||||||
client := login.Client(opts...)
|
client := login.Client(opts...)
|
||||||
|
|
||||||
tl, _, err := client.ListAccessTokens(gitea.ListAccessTokensOptions{
|
var tl []*gitea.AccessToken
|
||||||
ListOptions: gitea.ListOptions{Page: -1},
|
for page := 1; ; {
|
||||||
|
page_tokens, resp, err := client.ListAccessTokens(gitea.ListAccessTokensOptions{
|
||||||
|
ListOptions: gitea.ListOptions{Page: page, PageSize: 50},
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
|
tl = append(tl, page_tokens...)
|
||||||
|
if resp == nil || resp.NextPage == 0 {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
page = resp.NextPage
|
||||||
|
}
|
||||||
host, _ := os.Hostname()
|
host, _ := os.Hostname()
|
||||||
tokenName := host + "-tea"
|
tokenName := host + "-tea"
|
||||||
|
|
||||||
|
|||||||
@@ -19,12 +19,23 @@ import (
|
|||||||
// a matching private key in ~/.ssh/. If no match is found, path is empty.
|
// a matching private key in ~/.ssh/. If no match is found, path is empty.
|
||||||
func findSSHKey(client *gitea.Client) (string, error) {
|
func findSSHKey(client *gitea.Client) (string, error) {
|
||||||
// get keys registered on gitea instance
|
// get keys registered on gitea instance
|
||||||
keys, _, err := client.ListMyPublicKeys(gitea.ListPublicKeysOptions{
|
var keys []*gitea.PublicKey
|
||||||
ListOptions: gitea.ListOptions{Page: -1},
|
for page := 1; ; {
|
||||||
|
page_keys, resp, err := client.ListMyPublicKeys(gitea.ListPublicKeysOptions{
|
||||||
|
ListOptions: gitea.ListOptions{Page: page, PageSize: 50},
|
||||||
})
|
})
|
||||||
if err != nil || len(keys) == 0 {
|
if err != nil {
|
||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
|
keys = append(keys, page_keys...)
|
||||||
|
if resp == nil || resp.NextPage == 0 {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
page = resp.NextPage
|
||||||
|
}
|
||||||
|
if len(keys) == 0 {
|
||||||
|
return "", nil
|
||||||
|
}
|
||||||
|
|
||||||
// enumerate ~/.ssh/*.pub files
|
// enumerate ~/.ssh/*.pub files
|
||||||
glob, err := utils.AbsPathWithExpansion("~/.ssh/*.pub")
|
glob, err := utils.AbsPathWithExpansion("~/.ssh/*.pub")
|
||||||
|
|||||||
@@ -14,12 +14,20 @@ import (
|
|||||||
func ListPullReviewComments(ctx *context.TeaContext, idx int64) ([]*gitea.PullReviewComment, error) {
|
func ListPullReviewComments(ctx *context.TeaContext, idx int64) ([]*gitea.PullReviewComment, error) {
|
||||||
c := ctx.Login.Client()
|
c := ctx.Login.Client()
|
||||||
|
|
||||||
reviews, _, err := c.ListPullReviews(ctx.Owner, ctx.Repo, idx, gitea.ListPullReviewsOptions{
|
var reviews []*gitea.PullReview
|
||||||
ListOptions: gitea.ListOptions{Page: -1},
|
for page := 1; ; {
|
||||||
|
page_reviews, resp, err := c.ListPullReviews(ctx.Owner, ctx.Repo, idx, gitea.ListPullReviewsOptions{
|
||||||
|
ListOptions: gitea.ListOptions{Page: page, PageSize: 50},
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
reviews = append(reviews, page_reviews...)
|
||||||
|
if resp == nil || resp.NextPage == 0 {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
page = resp.NextPage
|
||||||
|
}
|
||||||
|
|
||||||
var allComments []*gitea.PullReviewComment
|
var allComments []*gitea.PullReviewComment
|
||||||
for _, review := range reviews {
|
for _, review := range reviews {
|
||||||
|
|||||||
Reference in New Issue
Block a user