Skip to content

Commit 39efb64

Browse files
Merge branch 'main' into feat-version-arch
2 parents 220f23a + 3e1b63f commit 39efb64

File tree

128 files changed

+2019
-1027
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

128 files changed

+2019
-1027
lines changed

cmd/web.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,12 @@ import (
1818

1919
"code.gitea.io/gitea/modules/container"
2020
"code.gitea.io/gitea/modules/graceful"
21+
"code.gitea.io/gitea/modules/gtprof"
2122
"code.gitea.io/gitea/modules/log"
2223
"code.gitea.io/gitea/modules/process"
2324
"code.gitea.io/gitea/modules/public"
2425
"code.gitea.io/gitea/modules/setting"
26+
"code.gitea.io/gitea/modules/util"
2527
"code.gitea.io/gitea/routers"
2628
"code.gitea.io/gitea/routers/install"
2729

@@ -218,6 +220,8 @@ func serveInstalled(ctx *cli.Context) error {
218220
}
219221
}
220222

223+
gtprof.EnableBuiltinTracer(util.Iif(setting.IsProd, 2000*time.Millisecond, 100*time.Millisecond))
224+
221225
// Set up Chi routes
222226
webRoutes := routers.NormalRoutes()
223227
err := listen(webRoutes, true)

custom/conf/app.example.ini

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -790,10 +790,13 @@ LEVEL = Info
790790
;; Please note that setting this to false will not disable OAuth Basic or Basic authentication using a token
791791
;ENABLE_BASIC_AUTHENTICATION = true
792792
;;
793-
;; Show the password sign-in form (for password-based login), otherwise, only show OAuth2 login methods.
793+
;; Show the password sign-in form (for password-based login), otherwise, only show OAuth2 or passkey login methods if they are enabled.
794794
;; If you set it to false, maybe it also needs to set ENABLE_BASIC_AUTHENTICATION to false to completely disable password-based authentication.
795795
;ENABLE_PASSWORD_SIGNIN_FORM = true
796796
;;
797+
;; Allow users to sign-in with a passkey
798+
;ENABLE_PASSKEY_AUTHENTICATION = true
799+
;;
797800
;; More detail: https://github.com/gogits/gogs/issues/165
798801
;ENABLE_REVERSE_PROXY_AUTHENTICATION = false
799802
; Enable this to allow reverse proxy authentication for API requests, the reverse proxy is responsible for ensuring that no CSRF is possible.
@@ -1126,6 +1129,9 @@ LEVEL = Info
11261129
;; In default merge messages only include approvers who are official
11271130
;DEFAULT_MERGE_MESSAGE_OFFICIAL_APPROVERS_ONLY = true
11281131
;;
1132+
;; In default squash-merge messages include the commit message of all commits comprising the pull request.
1133+
;POPULATE_SQUASH_COMMENT_WITH_COMMIT_MESSAGES = false
1134+
;;
11291135
;; Add co-authored-by and co-committed-by trailers if committer does not match author
11301136
;ADD_CO_COMMITTER_TRAILERS = true
11311137
;;

models/db/engine_hook.go

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,23 +7,36 @@ import (
77
"context"
88
"time"
99

10+
"code.gitea.io/gitea/modules/gtprof"
1011
"code.gitea.io/gitea/modules/log"
12+
"code.gitea.io/gitea/modules/setting"
1113

1214
"xorm.io/xorm/contexts"
1315
)
1416

15-
type SlowQueryHook struct {
17+
type EngineHook struct {
1618
Threshold time.Duration
1719
Logger log.Logger
1820
}
1921

20-
var _ contexts.Hook = (*SlowQueryHook)(nil)
22+
var _ contexts.Hook = (*EngineHook)(nil)
2123

22-
func (*SlowQueryHook) BeforeProcess(c *contexts.ContextHook) (context.Context, error) {
23-
return c.Ctx, nil
24+
func (*EngineHook) BeforeProcess(c *contexts.ContextHook) (context.Context, error) {
25+
ctx, _ := gtprof.GetTracer().Start(c.Ctx, gtprof.TraceSpanDatabase)
26+
return ctx, nil
2427
}
2528

26-
func (h *SlowQueryHook) AfterProcess(c *contexts.ContextHook) error {
29+
func (h *EngineHook) AfterProcess(c *contexts.ContextHook) error {
30+
span := gtprof.GetContextSpan(c.Ctx)
31+
if span != nil {
32+
// Do not record SQL parameters here:
33+
// * It shouldn't expose the parameters because they contain sensitive information, end users need to report the trace details safely.
34+
// * Some parameters contain quite long texts, waste memory and are difficult to display.
35+
span.SetAttributeString(gtprof.TraceAttrDbSQL, c.SQL)
36+
span.End()
37+
} else {
38+
setting.PanicInDevOrTesting("span in database engine hook is nil")
39+
}
2740
if c.ExecuteTime >= h.Threshold {
2841
// 8 is the amount of skips passed to runtime.Caller, so that in the log the correct function
2942
// is being displayed (the function that ultimately wants to execute the query in the code)

models/db/engine_init.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ func InitEngine(ctx context.Context) error {
7272
xe.SetDefaultContext(ctx)
7373

7474
if setting.Database.SlowQueryThreshold > 0 {
75-
xe.AddHook(&SlowQueryHook{
75+
xe.AddHook(&EngineHook{
7676
Threshold: setting.Database.SlowQueryThreshold,
7777
Logger: log.GetLogger("xorm"),
7878
})

models/webhook/webhook.go

Lines changed: 27 additions & 174 deletions
Original file line numberDiff line numberDiff line change
@@ -167,186 +167,39 @@ func (w *Webhook) UpdateEvent() error {
167167
return err
168168
}
169169

170-
// HasCreateEvent returns true if hook enabled create event.
171-
func (w *Webhook) HasCreateEvent() bool {
172-
return w.SendEverything ||
173-
(w.ChooseEvents && w.HookEvents.Create)
174-
}
175-
176-
// HasDeleteEvent returns true if hook enabled delete event.
177-
func (w *Webhook) HasDeleteEvent() bool {
178-
return w.SendEverything ||
179-
(w.ChooseEvents && w.HookEvents.Delete)
180-
}
181-
182-
// HasForkEvent returns true if hook enabled fork event.
183-
func (w *Webhook) HasForkEvent() bool {
184-
return w.SendEverything ||
185-
(w.ChooseEvents && w.HookEvents.Fork)
186-
}
187-
188-
// HasIssuesEvent returns true if hook enabled issues event.
189-
func (w *Webhook) HasIssuesEvent() bool {
190-
return w.SendEverything ||
191-
(w.ChooseEvents && w.HookEvents.Issues)
192-
}
193-
194-
// HasIssuesAssignEvent returns true if hook enabled issues assign event.
195-
func (w *Webhook) HasIssuesAssignEvent() bool {
196-
return w.SendEverything ||
197-
(w.ChooseEvents && w.HookEvents.IssueAssign)
198-
}
199-
200-
// HasIssuesLabelEvent returns true if hook enabled issues label event.
201-
func (w *Webhook) HasIssuesLabelEvent() bool {
202-
return w.SendEverything ||
203-
(w.ChooseEvents && w.HookEvents.IssueLabel)
204-
}
205-
206-
// HasIssuesMilestoneEvent returns true if hook enabled issues milestone event.
207-
func (w *Webhook) HasIssuesMilestoneEvent() bool {
208-
return w.SendEverything ||
209-
(w.ChooseEvents && w.HookEvents.IssueMilestone)
210-
}
211-
212-
// HasIssueCommentEvent returns true if hook enabled issue_comment event.
213-
func (w *Webhook) HasIssueCommentEvent() bool {
214-
return w.SendEverything ||
215-
(w.ChooseEvents && w.HookEvents.IssueComment)
216-
}
217-
218-
// HasPushEvent returns true if hook enabled push event.
219-
func (w *Webhook) HasPushEvent() bool {
220-
return w.PushOnly || w.SendEverything ||
221-
(w.ChooseEvents && w.HookEvents.Push)
222-
}
223-
224-
// HasPullRequestEvent returns true if hook enabled pull request event.
225-
func (w *Webhook) HasPullRequestEvent() bool {
226-
return w.SendEverything ||
227-
(w.ChooseEvents && w.HookEvents.PullRequest)
228-
}
229-
230-
// HasPullRequestAssignEvent returns true if hook enabled pull request assign event.
231-
func (w *Webhook) HasPullRequestAssignEvent() bool {
232-
return w.SendEverything ||
233-
(w.ChooseEvents && w.HookEvents.PullRequestAssign)
234-
}
235-
236-
// HasPullRequestLabelEvent returns true if hook enabled pull request label event.
237-
func (w *Webhook) HasPullRequestLabelEvent() bool {
238-
return w.SendEverything ||
239-
(w.ChooseEvents && w.HookEvents.PullRequestLabel)
240-
}
241-
242-
// HasPullRequestMilestoneEvent returns true if hook enabled pull request milestone event.
243-
func (w *Webhook) HasPullRequestMilestoneEvent() bool {
244-
return w.SendEverything ||
245-
(w.ChooseEvents && w.HookEvents.PullRequestMilestone)
246-
}
247-
248-
// HasPullRequestCommentEvent returns true if hook enabled pull_request_comment event.
249-
func (w *Webhook) HasPullRequestCommentEvent() bool {
250-
return w.SendEverything ||
251-
(w.ChooseEvents && w.HookEvents.PullRequestComment)
252-
}
253-
254-
// HasPullRequestApprovedEvent returns true if hook enabled pull request review event.
255-
func (w *Webhook) HasPullRequestApprovedEvent() bool {
256-
return w.SendEverything ||
257-
(w.ChooseEvents && w.HookEvents.PullRequestReview)
258-
}
259-
260-
// HasPullRequestRejectedEvent returns true if hook enabled pull request review event.
261-
func (w *Webhook) HasPullRequestRejectedEvent() bool {
262-
return w.SendEverything ||
263-
(w.ChooseEvents && w.HookEvents.PullRequestReview)
264-
}
265-
266-
// HasPullRequestReviewCommentEvent returns true if hook enabled pull request review event.
267-
func (w *Webhook) HasPullRequestReviewCommentEvent() bool {
268-
return w.SendEverything ||
269-
(w.ChooseEvents && w.HookEvents.PullRequestReview)
270-
}
271-
272-
// HasPullRequestSyncEvent returns true if hook enabled pull request sync event.
273-
func (w *Webhook) HasPullRequestSyncEvent() bool {
274-
return w.SendEverything ||
275-
(w.ChooseEvents && w.HookEvents.PullRequestSync)
276-
}
277-
278-
// HasWikiEvent returns true if hook enabled wiki event.
279-
func (w *Webhook) HasWikiEvent() bool {
280-
return w.SendEverything ||
281-
(w.ChooseEvents && w.HookEvent.Wiki)
282-
}
283-
284-
// HasReleaseEvent returns if hook enabled release event.
285-
func (w *Webhook) HasReleaseEvent() bool {
286-
return w.SendEverything ||
287-
(w.ChooseEvents && w.HookEvents.Release)
288-
}
289-
290-
// HasRepositoryEvent returns if hook enabled repository event.
291-
func (w *Webhook) HasRepositoryEvent() bool {
292-
return w.SendEverything ||
293-
(w.ChooseEvents && w.HookEvents.Repository)
294-
}
295-
296-
// HasPackageEvent returns if hook enabled package event.
297-
func (w *Webhook) HasPackageEvent() bool {
298-
return w.SendEverything ||
299-
(w.ChooseEvents && w.HookEvents.Package)
300-
}
301-
302-
// HasPullRequestReviewRequestEvent returns true if hook enabled pull request review request event.
303-
func (w *Webhook) HasPullRequestReviewRequestEvent() bool {
304-
return w.SendEverything ||
305-
(w.ChooseEvents && w.HookEvents.PullRequestReviewRequest)
306-
}
307-
308-
// EventCheckers returns event checkers
309-
func (w *Webhook) EventCheckers() []struct {
310-
Has func() bool
311-
Type webhook_module.HookEventType
312-
} {
313-
return []struct {
314-
Has func() bool
315-
Type webhook_module.HookEventType
316-
}{
317-
{w.HasCreateEvent, webhook_module.HookEventCreate},
318-
{w.HasDeleteEvent, webhook_module.HookEventDelete},
319-
{w.HasForkEvent, webhook_module.HookEventFork},
320-
{w.HasPushEvent, webhook_module.HookEventPush},
321-
{w.HasIssuesEvent, webhook_module.HookEventIssues},
322-
{w.HasIssuesAssignEvent, webhook_module.HookEventIssueAssign},
323-
{w.HasIssuesLabelEvent, webhook_module.HookEventIssueLabel},
324-
{w.HasIssuesMilestoneEvent, webhook_module.HookEventIssueMilestone},
325-
{w.HasIssueCommentEvent, webhook_module.HookEventIssueComment},
326-
{w.HasPullRequestEvent, webhook_module.HookEventPullRequest},
327-
{w.HasPullRequestAssignEvent, webhook_module.HookEventPullRequestAssign},
328-
{w.HasPullRequestLabelEvent, webhook_module.HookEventPullRequestLabel},
329-
{w.HasPullRequestMilestoneEvent, webhook_module.HookEventPullRequestMilestone},
330-
{w.HasPullRequestCommentEvent, webhook_module.HookEventPullRequestComment},
331-
{w.HasPullRequestApprovedEvent, webhook_module.HookEventPullRequestReviewApproved},
332-
{w.HasPullRequestRejectedEvent, webhook_module.HookEventPullRequestReviewRejected},
333-
{w.HasPullRequestCommentEvent, webhook_module.HookEventPullRequestReviewComment},
334-
{w.HasPullRequestSyncEvent, webhook_module.HookEventPullRequestSync},
335-
{w.HasWikiEvent, webhook_module.HookEventWiki},
336-
{w.HasRepositoryEvent, webhook_module.HookEventRepository},
337-
{w.HasReleaseEvent, webhook_module.HookEventRelease},
338-
{w.HasPackageEvent, webhook_module.HookEventPackage},
339-
{w.HasPullRequestReviewRequestEvent, webhook_module.HookEventPullRequestReviewRequest},
170+
func (w *Webhook) HasEvent(evt webhook_module.HookEventType) bool {
171+
if w.SendEverything {
172+
return true
340173
}
174+
if w.PushOnly {
175+
return evt == webhook_module.HookEventPush
176+
}
177+
checkEvt := evt
178+
switch evt {
179+
case webhook_module.HookEventPullRequestReviewApproved, webhook_module.HookEventPullRequestReviewRejected, webhook_module.HookEventPullRequestReviewComment:
180+
checkEvt = webhook_module.HookEventPullRequestReview
181+
}
182+
return w.HookEvents[checkEvt]
341183
}
342184

343185
// EventsArray returns an array of hook events
344186
func (w *Webhook) EventsArray() []string {
345-
events := make([]string, 0, 7)
187+
if w.SendEverything {
188+
events := make([]string, 0, len(webhook_module.AllEvents()))
189+
for _, evt := range webhook_module.AllEvents() {
190+
events = append(events, string(evt))
191+
}
192+
return events
193+
}
194+
195+
if w.PushOnly {
196+
return []string{string(webhook_module.HookEventPush)}
197+
}
346198

347-
for _, c := range w.EventCheckers() {
348-
if c.Has() {
349-
events = append(events, string(c.Type))
199+
events := make([]string, 0, len(w.HookEvents))
200+
for event, enabled := range w.HookEvents {
201+
if enabled {
202+
events = append(events, string(event))
350203
}
351204
}
352205
return events

models/webhook/webhook_test.go

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -54,9 +54,9 @@ func TestWebhook_UpdateEvent(t *testing.T) {
5454
SendEverything: false,
5555
ChooseEvents: false,
5656
HookEvents: webhook_module.HookEvents{
57-
Create: false,
58-
Push: true,
59-
PullRequest: false,
57+
webhook_module.HookEventCreate: false,
58+
webhook_module.HookEventPush: true,
59+
webhook_module.HookEventPullRequest: false,
6060
},
6161
}
6262
webhook.HookEvent = hookEvent
@@ -68,13 +68,13 @@ func TestWebhook_UpdateEvent(t *testing.T) {
6868
}
6969

7070
func TestWebhook_EventsArray(t *testing.T) {
71-
assert.Equal(t, []string{
71+
assert.EqualValues(t, []string{
7272
"create", "delete", "fork", "push",
7373
"issues", "issue_assign", "issue_label", "issue_milestone", "issue_comment",
7474
"pull_request", "pull_request_assign", "pull_request_label", "pull_request_milestone",
7575
"pull_request_comment", "pull_request_review_approved", "pull_request_review_rejected",
76-
"pull_request_review_comment", "pull_request_sync", "wiki", "repository", "release",
77-
"package", "pull_request_review_request",
76+
"pull_request_review_comment", "pull_request_sync", "pull_request_review_request", "wiki", "repository", "release",
77+
"package", "status",
7878
},
7979
(&Webhook{
8080
HookEvent: &webhook_module.HookEvent{SendEverything: true},

modules/git/command.go

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import (
1818
"time"
1919

2020
"code.gitea.io/gitea/modules/git/internal" //nolint:depguard // only this file can use the internal type CmdArg, other files and packages should use AddXxx functions
21+
"code.gitea.io/gitea/modules/gtprof"
2122
"code.gitea.io/gitea/modules/log"
2223
"code.gitea.io/gitea/modules/process"
2324
"code.gitea.io/gitea/modules/util"
@@ -54,7 +55,7 @@ func logArgSanitize(arg string) string {
5455
} else if filepath.IsAbs(arg) {
5556
base := filepath.Base(arg)
5657
dir := filepath.Dir(arg)
57-
return filepath.Join(filepath.Base(dir), base)
58+
return ".../" + filepath.Join(filepath.Base(dir), base)
5859
}
5960
return arg
6061
}
@@ -295,15 +296,20 @@ func (c *Command) run(skip int, opts *RunOpts) error {
295296
timeout = defaultCommandExecutionTimeout
296297
}
297298

298-
var desc string
299+
cmdLogString := c.LogString()
299300
callerInfo := util.CallerFuncName(1 /* util */ + 1 /* this */ + skip /* parent */)
300301
if pos := strings.LastIndex(callerInfo, "/"); pos >= 0 {
301302
callerInfo = callerInfo[pos+1:]
302303
}
303304
// these logs are for debugging purposes only, so no guarantee of correctness or stability
304-
desc = fmt.Sprintf("git.Run(by:%s, repo:%s): %s", callerInfo, logArgSanitize(opts.Dir), c.LogString())
305+
desc := fmt.Sprintf("git.Run(by:%s, repo:%s): %s", callerInfo, logArgSanitize(opts.Dir), cmdLogString)
305306
log.Debug("git.Command: %s", desc)
306307

308+
_, span := gtprof.GetTracer().Start(c.parentContext, gtprof.TraceSpanGitRun)
309+
defer span.End()
310+
span.SetAttributeString(gtprof.TraceAttrFuncCaller, callerInfo)
311+
span.SetAttributeString(gtprof.TraceAttrGitCommand, cmdLogString)
312+
307313
var ctx context.Context
308314
var cancel context.CancelFunc
309315
var finished context.CancelFunc

modules/git/command_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,5 +58,5 @@ func TestCommandString(t *testing.T) {
5858
assert.EqualValues(t, cmd.prog+` a "-m msg" "it's a test" "say \"hello\""`, cmd.LogString())
5959

6060
cmd = NewCommandContextNoGlobals(context.Background(), "url: https://a:b@c/", "/root/dir-a/dir-b")
61-
assert.EqualValues(t, cmd.prog+` "url: https://sanitized-credential@c/" dir-a/dir-b`, cmd.LogString())
61+
assert.EqualValues(t, cmd.prog+` "url: https://sanitized-credential@c/" .../dir-a/dir-b`, cmd.LogString())
6262
}

0 commit comments

Comments
 (0)