aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGiteabot <teabot@gitea.io>2024-04-11 15:51:02 +0800
committerGitHub <noreply@github.com>2024-04-11 07:51:02 +0000
commit69cc79173ddbf7662c4d7246b6161b9351038d16 (patch)
treef1c5a13abf274e7b4f786164410bdcc9cf4f6c60
parent40f1f770e651ace39ca15a51248ec15cecae3250 (diff)
downloadgitea-69cc79173ddbf7662c4d7246b6161b9351038d16.tar.gz
gitea-69cc79173ddbf7662c4d7246b6161b9351038d16.zip
Avoid user does not exist error when detecting schedule actions when the commit author is an external user (#30357) (#30409)
Backport #30357 by @yp05327 ![image](https://github.com/go-gitea/gitea/assets/18380374/ddf6ee84-2242-49b9-b066-bd8429ba4d76) When repo is a mirror, and commit author is an external user, then `GetUserByEmail` will return error. reproduce/test: - mirror Gitea to your instance - disable action and enable it again, this will trigger `DetectAndHandleSchedules` ps: also follow #24706, it only fixed normal runs, not scheduled runs. Co-authored-by: yp05327 <576951401@qq.com>
-rw-r--r--models/actions/schedule_list.go3
-rw-r--r--services/actions/notifier_helper.go9
2 files changed, 6 insertions, 6 deletions
diff --git a/models/actions/schedule_list.go b/models/actions/schedule_list.go
index b806550b87..ecd2c1121c 100644
--- a/models/actions/schedule_list.go
+++ b/models/actions/schedule_list.go
@@ -44,6 +44,9 @@ func (schedules ScheduleList) LoadTriggerUser(ctx context.Context) error {
schedule.TriggerUser = user_model.NewActionsUser()
} else {
schedule.TriggerUser = users[schedule.TriggerUserID]
+ if schedule.TriggerUser == nil {
+ schedule.TriggerUser = user_model.NewGhostUser()
+ }
}
}
return nil
diff --git a/services/actions/notifier_helper.go b/services/actions/notifier_helper.go
index 8c98f56af5..c48886a824 100644
--- a/services/actions/notifier_helper.go
+++ b/services/actions/notifier_helper.go
@@ -525,12 +525,9 @@ func DetectAndHandleSchedules(ctx context.Context, repo *repo_model.Repository)
}
// We need a notifyInput to call handleSchedules
- // Here we use the commit author as the Doer of the notifyInput
- commitUser, err := user_model.GetUserByEmail(ctx, commit.Author.Email)
- if err != nil {
- return fmt.Errorf("get user by email: %w", err)
- }
- notifyInput := newNotifyInput(repo, commitUser, webhook_module.HookEventSchedule)
+ // if repo is a mirror, commit author maybe an external user,
+ // so we use action user as the Doer of the notifyInput
+ notifyInput := newNotifyInput(repo, user_model.NewActionsUser(), webhook_module.HookEventSchedule)
return handleSchedules(ctx, scheduleWorkflows, commit, notifyInput, repo.DefaultBranch)
}