From 08992fbecf91957fd0a8b2a4330097c14d1b71dc Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Sun, 16 Feb 2025 22:43:06 -0800 Subject: [PATCH 1/2] Fix webhook target url generated by actions status event --- services/webhook/notifier.go | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/services/webhook/notifier.go b/services/webhook/notifier.go index 6c691c21f438e..c3727fd024b77 100644 --- a/services/webhook/notifier.go +++ b/services/webhook/notifier.go @@ -5,6 +5,7 @@ package webhook import ( "context" + "strings" git_model "code.gitea.io/gitea/models/git" issues_model "code.gitea.io/gitea/models/issues" @@ -871,6 +872,14 @@ func (m *webhookNotifier) CreateCommitStatus(ctx context.Context, repo *repo_mod return } + // as a webhook url, target should be an absolute url. But for internal actions target url + // the target url is a url path with no host and port to make it easy to be visited + // from multiple hosts. So we need to convert it to an absolute url here. + target := status.TargetURL + if strings.HasPrefix(target, "/") { + target = setting.AppURL + strings.TrimPrefix(target, "/") + } + payload := api.CommitStatusPayload{ Context: status.Context, CreatedAt: status.CreatedUnix.AsTime().UTC(), @@ -878,7 +887,7 @@ func (m *webhookNotifier) CreateCommitStatus(ctx context.Context, repo *repo_mod ID: status.ID, SHA: commit.Sha1, State: status.State.String(), - TargetURL: status.TargetURL, + TargetURL: target, Commit: apiCommit, Repo: convert.ToRepo(ctx, repo, access_model.Permission{AccessMode: perm.AccessModeOwner}), From 8f80089a3c9eded46ef9a01377f050e95cdf92b5 Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Mon, 17 Feb 2025 11:54:49 -0800 Subject: [PATCH 2/2] Fix bug --- services/webhook/notifier.go | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/services/webhook/notifier.go b/services/webhook/notifier.go index c3727fd024b77..76d6fd3472c58 100644 --- a/services/webhook/notifier.go +++ b/services/webhook/notifier.go @@ -5,7 +5,6 @@ package webhook import ( "context" - "strings" git_model "code.gitea.io/gitea/models/git" issues_model "code.gitea.io/gitea/models/issues" @@ -16,6 +15,7 @@ import ( repo_model "code.gitea.io/gitea/models/repo" user_model "code.gitea.io/gitea/models/user" "code.gitea.io/gitea/modules/git" + "code.gitea.io/gitea/modules/httplib" "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/repository" "code.gitea.io/gitea/modules/setting" @@ -875,10 +875,7 @@ func (m *webhookNotifier) CreateCommitStatus(ctx context.Context, repo *repo_mod // as a webhook url, target should be an absolute url. But for internal actions target url // the target url is a url path with no host and port to make it easy to be visited // from multiple hosts. So we need to convert it to an absolute url here. - target := status.TargetURL - if strings.HasPrefix(target, "/") { - target = setting.AppURL + strings.TrimPrefix(target, "/") - } + target := httplib.MakeAbsoluteURL(ctx, status.TargetURL) payload := api.CommitStatusPayload{ Context: status.Context,